Module: Smith::Models::ProviderQualifiedRegistry
- Included in:
- Smith::Models
- Defined in:
- lib/smith/models/provider_qualified_registry.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.extended(registry) ⇒ Object
8 9 10 11 |
# File 'lib/smith/models/provider_qualified_registry.rb', line 8 def self.extended(registry) registry.instance_variable_set(:@registry_monitor, Monitor.new) registry.instance_variable_set(:@registry_index, {}) end |
Instance Method Details
#all ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/smith/models/provider_qualified_registry.rb', line 39 def all registry_monitor.synchronize do keys.map { |key| resolve(key) }.sort_by do |profile| [profile.model_id, profile.provider.to_s] end end end |
#clear! ⇒ Object
47 48 49 50 51 52 |
# File 'lib/smith/models/provider_qualified_registry.rb', line 47 def clear! registry_monitor.synchronize do @_container&.clear @registry_index = {} end end |
#find(model_id, provider: nil) ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'lib/smith/models/provider_qualified_registry.rb', line 13 def find(model_id, provider: nil) registry_monitor.synchronize do registered_keys = registered_keys_for(model_id, provider:) return nil if registered_keys.empty? reject_ambiguous_lookup!(model_id, registered_keys) resolve(registered_keys.first) end end |
#register(profile) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/smith/models/provider_qualified_registry.rb', line 23 def register(profile) registry_monitor.synchronize do profile = normalized_profile(profile) key = registry_key(profile.model_id, profile.provider) existing = key?(key) ? resolve(key) : nil return profile if existing == profile raise_collision!(key, existing, profile) if existing super(key, profile) index_profile(profile, key) profile end end |