module Wamp::Client::Event::ClassMethods
Public Instance Methods
create_event(events, attribute: nil, setter: nil, trigger: nil)
click to toggle source
# 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