Class: Ace::Hitl::Providers::Ref

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/hitl/providers/ref.rb

Overview

Typed reverse address of the asking agent: herdr session + pane (spec 8wm.t.vrz §3). Versioned schema ace.hitl.ref/v1; captured fail-closed from the herdr environment at ask time. ace-herdr exports both variables when it bootstraps an agent pane.

The ref identifies WHERE the answer goes; it never carries answer content.

Constant Summary collapse

SCHEMA =
"ace.hitl.ref/v1"
SESSION_ENV =
"HERDR_SESSION"
PANE_ENV =
"HERDR_PANE"
MAX_LENGTH =
128
TOKEN_PATTERN =
/\A[A-Za-z0-9._:-]+\z/.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(session:, pane:) ⇒ Ref

Returns a new instance of Ref.



24
25
26
27
# File 'lib/ace/hitl/providers/ref.rb', line 24

def initialize(session:, pane:)
  @session = session
  @pane = pane
end

Instance Attribute Details

#pane ⇒ Object (readonly)

Returns the value of attribute pane.



22
23
24
# File 'lib/ace/hitl/providers/ref.rb', line 22

def pane
  @pane
end

#session ⇒ Object (readonly)

Returns the value of attribute session.



22
23
24
# File 'lib/ace/hitl/providers/ref.rb', line 22

def session
  @session
end

Class Method Details

.from_env(env = ENV) ⇒ Object

Fail closed: raises InvalidRefError naming the offending variable and rule when the reverse address is absent or invalid.



31
32
33
34
35
# File 'lib/ace/hitl/providers/ref.rb', line 31

def self.from_env(env = ENV)
  session = validate!(env[SESSION_ENV], SESSION_ENV)
  pane = validate!(env[PANE_ENV], PANE_ENV)
  new(session: session, pane: pane)
end

.validate!(value, source) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ace/hitl/providers/ref.rb', line 37

def self.validate!(value, source)
  token = value.to_s.strip
  if token.empty?
    raise InvalidRefError,
      "#{source} is required (herdr reverse address, #{SCHEMA})"
  end
  if token.length > MAX_LENGTH
    raise InvalidRefError,
      "#{source} exceeds #{MAX_LENGTH} characters"
  end
  unless token.match?(TOKEN_PATTERN)
    raise InvalidRefError,
      "#{source} contains invalid characters " \
      "(allowed: letters, digits, '.', '_', ':', '-')"
  end

  token
end

Instance Method Details

#to_h ⇒ Object



56
57
58
# File 'lib/ace/hitl/providers/ref.rb', line 56

def to_h
  {schema: SCHEMA, session: session, pane: pane}
end