Module: Wisper::Listener

Defined in:
lib/wisper/listener.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

UnhandledEventError =
Class.new(StandardError)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.generated_method_name(event_class) ⇒ Object

NOTE: mostly copied from ActiveSupport#underscore



8
9
10
11
12
13
14
15
16
17
# File 'lib/wisper/listener.rb', line 8

def self.generated_method_name(event_class)
  class_name = event_class.gsub('::', '_')
  name =
    class_name
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .downcase

  "on_#{name}"
end

.included(base) ⇒ Object



19
20
21
# File 'lib/wisper/listener.rb', line 19

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#_wisper_listener?Boolean



23
24
25
# File 'lib/wisper/listener.rb', line 23

def _wisper_listener?
  true
end

#trigger(event) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/wisper/listener.rb', line 27

def trigger(event)
  method_name = Wisper::Listener.generated_method_name(event.class.name)
  if respond_to?(method_name)
    public_send(method_name, event)
  else
    raise(
      UnhandledEventError,
      "Event #{event.class} not handled in #{self.class}"
    )
  end
end