Module: Jumbotron::Adapters::Registry
- Defined in:
- app/adapters/jumbotron/adapters/registry.rb
Class Method Summary collapse
-
.assert_unique_keys! ⇒ Object
Raises if two different registered classes share the same registry_key.
-
.ensure_loaded! ⇒ Object
Adapter classes register via load-time
register!. - .find(adapter_id) ⇒ Object
-
.register(adapter_class) ⇒ Object
Stores the adapter class reference (not a config snapshot).
- .registered ⇒ Object
- .registered?(adapter_class) ⇒ Boolean
- .reset! ⇒ Object
Class Method Details
.assert_unique_keys! ⇒ Object
Raises if two different registered classes share the same registry_key.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 56 def assert_unique_keys! grouped = registered.group_by do |adapter| adapter.registry_key rescue ConfigurationError :incomplete end grouped.each do |key, adapters| next if key == :incomplete next if adapters.uniq.size <= 1 raise RegistrationError, "conflicting adapter registration for #{key.inspect}: " \ "#{adapters.map(&:name).join(' vs ')}" end end |
.ensure_loaded! ⇒ Object
Adapter classes register via load-time register!. In non-eager-load
processes (e.g. Solid Queue workers), nothing may have constantized them
yet when jobs resolve by adapter_id string — load them first.
If classes are already loaded but the in-memory registry was cleared,
re-register Base subclasses (constantize alone does not re-run file side effects).
30 31 32 33 34 35 36 37 38 39 40 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 30 def ensure_loaded! Dir[Jumbotron::Engine.root.join("app/adapters/jumbotron/adapters/**/*.rb")].each do |path| relative = Pathname.new(path).relative_path_from(Jumbotron::Engine.root.join("app/adapters")).to_s klass = relative.chomp(".rb").camelize.constantize next unless klass.is_a?(Class) next unless klass < Base next if klass == Base klass.register! unless registered?(klass) end end |
.find(adapter_id) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 42 def find(adapter_id) id = adapter_id.to_s registered.find do |adapter| adapter.adapter_id == id rescue ConfigurationError false end end |
.register(adapter_class) ⇒ Object
Stores the adapter class reference (not a config snapshot). Top-of-class register! is safe: identity is the class, not registry_key.
12 13 14 15 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 12 def register(adapter_class) classes[adapter_class.name] = adapter_class adapter_class end |
.registered ⇒ Object
17 18 19 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 17 def registered classes.values end |
.registered?(adapter_class) ⇒ Boolean
21 22 23 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 21 def registered?(adapter_class) classes[adapter_class.name] == adapter_class end |
.reset! ⇒ Object
51 52 53 |
# File 'app/adapters/jumbotron/adapters/registry.rb', line 51 def reset! @classes = {} end |