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