Module: Jumbotron::Adapters::Registry

Defined in:
app/adapters/jumbotron/adapters/registry.rb

Class Method Summary collapse

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

.registeredObject



17
18
19
# File 'app/adapters/jumbotron/adapters/registry.rb', line 17

def registered
  classes.values
end

.registered?(adapter_class) ⇒ Boolean

Returns:

  • (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