Class: LcpRuby::Events::HandlerRegistry

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

Class Method Summary collapse

Class Method Details

.clear!Object



37
38
39
# File 'lib/lcp_ruby/events/handler_registry.rb', line 37

def clear!
  @registry = {}
end

.discover!(base_path) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/lcp_ruby/events/handler_registry.rb', line 15

def discover!(base_path)
  handlers_path = File.join(base_path, "event_handlers")
  return unless File.directory?(handlers_path)

  Dir[File.join(handlers_path, "**", "*.rb")].sort.each do |file|
    require file

    relative = file.sub("#{handlers_path}/", "").sub(/\.rb$/, "")
    parts = relative.split("/")
    model_name = parts[0]
    class_name = "LcpRuby::HostEventHandlers::#{parts.map(&:camelize).join('::')}"

    begin
      handler_class = class_name.constantize
      event_name = handler_class.handles_event
      register(model_name, event_name, handler_class)
    rescue NameError, NotImplementedError => e
      Rails.logger.warn("[LcpRuby] Could not register event handler #{class_name}: #{e.message}")
    end
  end
end

.handlers_for(model_name, event_name) ⇒ Object



5
6
7
# File 'lib/lcp_ruby/events/handler_registry.rb', line 5

def handlers_for(model_name, event_name)
  registry.fetch(model_name.to_s, {}).fetch(event_name.to_s, [])
end

.register(model_name, event_name, handler_class) ⇒ Object



9
10
11
12
13
# File 'lib/lcp_ruby/events/handler_registry.rb', line 9

def register(model_name, event_name, handler_class)
  registry[model_name.to_s] ||= {}
  registry[model_name.to_s][event_name.to_s] ||= []
  registry[model_name.to_s][event_name.to_s] << handler_class
end