Class: Phronomy::Agent::ContextPolicyRegistry
- Inherits:
-
Object
- Object
- Phronomy::Agent::ContextPolicyRegistry
- Defined in:
- lib/phronomy/agent/context_policy_registry.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ ContextPolicyRegistry
constructor
A new instance of ContextPolicyRegistry.
- #register(id:, version:, &factory) ⇒ Object
- #resolve(descriptor) ⇒ Object
Constructor Details
#initialize ⇒ ContextPolicyRegistry
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
.default ⇒ Object
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
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 |