module Reactor::Subscribable::ClassMethods
Public Instance Methods
on_event(*args, &block)
click to toggle source
# File lib/reactor/models/concerns/subscribable.rb, line 7 def on_event(*args, &block) options = args.extract_options! options[:event_name], options[:action] = args options[:action] ||= block options[:source] = self add_subscription(options) end
Private Instance Methods
add_subscription(options = {})
click to toggle source
# File lib/reactor/models/concerns/subscribable.rb, line 17 def add_subscription(options = {}) event_name = options[:event_name] check_for_duplicate_subscription!(event_name, options[:handler_name_option]) subscription = Subscription.new(options) handler_names << subscription handler_names.uniq! Reactor.add_subscriber(event_name, subscription.worker_class) end
check_for_duplicate_subscription!(event_name, handler_name_option = nil)
click to toggle source
# File lib/reactor/models/concerns/subscribable.rb, line 36 def check_for_duplicate_subscription!(event_name, handler_name_option = nil) handler_name = Subscription.build_handler_name(event_name, handler_name_option) if duplicate_subscription?(handler_name) raise EventHandlerAlreadyDefined.new( "A Reactor event named #{handler_name} already has been defined on #{static_subscriber_namespace}. Specify a `:handler_name` option on your subscriber's `on_event` declaration to name this event handler deterministically." ) end end
duplicate_subscription?(handler_name)
click to toggle source
# File lib/reactor/models/concerns/subscribable.rb, line 32 def duplicate_subscription?(handler_name) handler_names.include?(handler_name) end
handler_names()
click to toggle source
# File lib/reactor/models/concerns/subscribable.rb, line 28 def handler_names @handler_names ||= [] end