Class: Ace::Hitl::Hermes::Molecules::HermesChannels::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/hitl/hermes/molecules/hermes_channels.rb

Overview

The channel registry the plugin owns (rejestr kanalow). Token validation happens here, fail closed; folder existence and writability are re-verified at every folder operation by the Box (a channel may be registered before its folder exists).

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Registry

Returns a new instance of Registry.



30
31
32
33
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 30

def initialize
  @channels = {}
  @default_name = nil
end

Instance Method Details

#available ⇒ Object



82
83
84
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 82

def available
  @channels.keys.sort
end

#default ⇒ Object



71
72
73
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 71

def default
  @default_name
end

#default=(name) ⇒ Object



66
67
68
69
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 66

def default=(name)
  resolve(name)
  @default_name = name
end

#register(name, machine:, folder:) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 35

def register(name, machine:, folder:)
  name = Atoms::HermesTokens.validate!(name, "channel name")
  machine = Atoms::HermesTokens.validate!(machine, "machine name")
  unless folder.is_a?(String) && File.absolute_path?(folder)
    raise ContractError,
      "hermes channel #{name} folder must be an absolute directory path " \
      "(got #{folder.inspect})"
  end
  base = File.basename(folder)
  unless Atoms::HermesTokens.valid?(base)
    raise ContractError,
      "hermes channel #{name} folder basename must match " \
      "#{Atoms::HermesTokens::PATTERN.inspect} (got #{base.inspect})"
  end
  if @channels.key?(name)
    raise ContractError, "hermes channel already registered: #{name}"
  end

  @channels[name] = Channel.new(name: name, machine: machine, folder: folder)
  name
end

#resolve(name) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 57

def resolve(name)
  channel = @channels[name]
  unless channel
    raise UnknownChannelError,
      "unknown hermes channel #{name.inspect} (available: #{available.join(", ")})"
  end
  channel
end

#resolve_default ⇒ Object



75
76
77
78
79
80
# File 'lib/ace/hitl/hermes/molecules/hermes_channels.rb', line 75

def resolve_default
  unless @default_name
    raise ContractError, "no default hermes channel registered"
  end
  resolve(@default_name)
end