Class: Evilution::Hooks::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/hooks/registry.rb

Instance Method Summary collapse

Constructor Details

#initialize(on_error: nil) ⇒ Registry

Returns a new instance of Registry.



6
7
8
9
# File 'lib/evilution/hooks/registry.rb', line 6

def initialize(on_error: nil)
  @handlers = Evilution::Hooks::EVENTS.to_h { |event| [event, []] }
  @on_error = on_error
end

Instance Method Details

#clear(event = nil) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/evilution/hooks/registry.rb', line 33

def clear(event = nil)
  if event
    validate_event!(event)
    @handlers[event].clear
  else
    @handlers.each_value(&:clear)
  end
end

#fire(event, **payload) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/evilution/hooks/registry.rb', line 19

def fire(event, **payload)
  validate_event!(event)
  errors = []

  @handlers[event].each do |handler|
    handler.call(payload)
  rescue StandardError => e
    errors << e
    report_error(event, e)
  end

  errors
end

#handlers_for(event) ⇒ Object



42
43
44
45
# File 'lib/evilution/hooks/registry.rb', line 42

def handlers_for(event)
  validate_event!(event)
  @handlers[event].dup
end

#register(event, &block) ⇒ Object

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
# File 'lib/evilution/hooks/registry.rb', line 11

def register(event, &block)
  validate_event!(event)
  raise ArgumentError, "a block must be provided when registering handler for #{event}" unless block

  @handlers[event] << block
  self
end