Class: Phronomy::Agent::ContextPolicyRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/phronomy/agent/context_policy_registry.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeContextPolicyRegistry

Returns a new instance of ContextPolicyRegistry.



16
17
18
19
# File 'lib/phronomy/agent/context_policy_registry.rb', line 16

def initialize
  @factories = {}
  @mutex = Mutex.new
end

Class Method Details

.defaultObject



7
8
9
10
11
12
13
# File 'lib/phronomy/agent/context_policy_registry.rb', line 7

def default
  @default ||= new.tap do |registry|
    registry.register(id: "default-recent-v1", version: 1) do |config|
      ContextPolicies::Default.new(config)
    end
  end
end

Instance Method Details

#register(id:, version:, &factory) ⇒ Object

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
# File 'lib/phronomy/agent/context_policy_registry.rb', line 21

def register(id:, version:, &factory)
  raise ArgumentError, "Context Policy factory is required" unless factory

  key = [id.to_s, Integer(version)].freeze
  @mutex.synchronize do
    raise ArgumentError, "Context Policy already registered: #{key.join("@")}" if @factories.key?(key)
    @factories[key] = factory
  end
  self
end

#resolve(descriptor) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/phronomy/agent/context_policy_registry.rb', line 32

def resolve(descriptor)
  key = [descriptor.id.to_s, Integer(descriptor.version)]
  factory = @mutex.synchronize { @factories[key] }
  raise Phronomy::ConfigurationError, "Unknown Context Policy: #{key.join("@")}" unless factory

  policy = factory.call(descriptor.config)
  unless policy.is_a?(ContextPolicy)
    raise Phronomy::ConfigurationError,
      "Context Policy factory returned #{policy.class}, expected #{ContextPolicy}"
  end
  policy
end