Module: Wamp::Client::Event::ClassMethods

Defined in:
lib/wamp/client/event.rb

Instance Method Summary collapse

Instance Method Details

#create_event(events, attribute: nil, setter: nil, trigger: nil) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/wamp/client/event.rb', line 38

def create_event(events, attribute: nil, setter: nil, trigger: nil)
  attribute ||= :event
  setter ||= :on
  trigger ||= :trigger

  # Create the attributes
  callback_name = "#{attribute}_callbacks"
  event_list_name = "#{attribute}_list"

  # Creates the attribute to store the callbacks
  attr_accessor callback_name

  # Creates the attributes to store the allowed events
  define_method event_list_name do
    events
  end

  # Creates the setter.  Default: "on"
  define_method setter do |event, &handler|
    unless self.send(event_list_name).include?(event)
      raise RuntimeError, "unknown #{setter}(event) '#{event}'"
    end

    callback = self.send(callback_name) || {}
    callback[event] = handler
    self.send("#{callback_name}=", callback)
  end

  # Create the trigger.  Default: "trigger"
  define_method trigger do |event, *args|
    handler = (self.send(callback_name) || {})[event]
    if handler != nil
      handler.call(*args)
    end
  end
end