Class: LcpRuby::Events::Dispatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/events/dispatcher.rb

Class Method Summary collapse

Class Method Details

.dispatch(event_name:, record:, changes: {}, request_params: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/lcp_ruby/events/dispatcher.rb', line 5

def dispatch(event_name:, record:, changes: {}, request_params: nil)
  model_name = infer_model_name(record)
  handlers = HandlerRegistry.handlers_for(model_name, event_name)

  last_result = nil
  handlers.each do |handler_class|
    context = {
      record: record,
      changes: changes,
      current_user: Current.user,
      event_name: event_name,
      request_params: request_params
    }

    if handler_class.async?
      AsyncHandlerJob.perform_later(handler_class.name, context_to_args(context, record))
    else
      last_result = handler_class.new(context).call
    end
  end
  last_result
end