Module: Seams::EventRegistry

Defined in:
lib/seams/event_registry.rb

Overview

Tracks every event name that an engine has declared it emits, along with the engine that owns it. Acts as the single source of truth for ‘bin/rails seams:list` and prevents two engines from claiming the same event name.

Class Method Summary collapse

Class Method Details

.allObject



40
41
42
# File 'lib/seams/event_registry.rb', line 40

def all
  @registry.dup
end

.emitter_of(name) ⇒ Object



36
37
38
# File 'lib/seams/event_registry.rb', line 36

def emitter_of(name)
  @registry[name.to_s]
end

.register(name, emitted_by:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/seams/event_registry.rb', line 15

def register(name, emitted_by:)
  Events.assert_valid_name!(name)
  name = name.to_s

  @mutex.synchronize do
    existing = @registry[name]

    if existing && existing != emitted_by
      raise Events::DuplicateEventError,
            "Event #{name.inspect} already registered by #{existing.inspect}; " \
            "cannot also be registered by #{emitted_by.inspect}"
    end

    @registry[name] = emitted_by
  end
end

.registered?(name) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/seams/event_registry.rb', line 32

def registered?(name)
  @registry.key?(name.to_s)
end

.reset!Object



44
45
46
# File 'lib/seams/event_registry.rb', line 44

def reset!
  @mutex.synchronize { @registry.clear }
end