lib/reactor/subscription.rb in reactor-0.19.0 vs lib/reactor/subscription.rb in reactor-1.0.0
- old
+ new
@@ -1,9 +1,9 @@
module Reactor
class Subscription
- attr_reader :source, :event_name, :action, :handler_name, :delay, :async, :worker_class,
+ attr_reader :source, :event_name, :action, :handler_name, :delay, :worker_class,
:deprecated, :sidekiq_options
def self.build_handler_name(event_name, handler_name_option = nil)
if handler_name_option
handler_name_option.to_s.camelize
@@ -22,11 +22,10 @@
@event_name = options[:event_name]
@action = options[:action] || block
@delay = options[:delay].to_i
- @async = determine_async(options)
@deprecated = !!options[:deprecated]
@sidekiq_options = options[:sidekiq_options] || {}
build_worker_class
end
@@ -39,53 +38,45 @@
@event_handler_names ||= []
end
def namespace
return @namespace if @namespace
+ @namespace = generate_namespace
+ end
- ns = source.name.demodulize
- unless Reactor.subscriber_namespace.const_defined?(ns, false)
- Reactor.subscriber_namespace.const_set(ns, Module.new)
+ def generate_namespace
+ module_chain.reduce(Reactor.subscriber_namespace) do |mod, name|
+ unless mod.const_defined?(name, false)
+ mod.const_set(name, Module.new)
+ end
+ mod.const_get(name)
end
-
- @namespace = Reactor.subscriber_namespace.const_get(ns, false)
end
def mailer_subscriber?
!!(source < ActionMailer::Base)
end
private
- # options[:in_memory] is a legacy way of setting async to false -
- # see Reactor::Workers::EventWorker#perform_where_needed
- def determine_async(options = {})
- if options[:async].nil?
- if options[:in_memory].nil?
- true
- else
- !options[:in_memory]
- end
- else
- !!options[:async]
- end
+ def module_chain
+ source.name.split('::')
end
def build_worker_class
- namespace.send(:remove_const, handler_name) if handler_defined?
worker_class = mailer_subscriber? ? build_mailer_worker : build_event_worker
+ namespace.send(:remove_const, handler_name) if handler_defined?
namespace.const_set(handler_name, worker_class)
@worker_class = namespace.const_get(handler_name)
end
def build_event_worker
subscription = self
Class.new(Reactor::Workers::EventWorker) do
self.source = subscription.source
self.action = subscription.action
- self.async = subscription.async
self.delay = subscription.delay
self.deprecated = subscription.deprecated
self.sidekiq_options subscription.sidekiq_options
end
end
@@ -94,10 +85,9 @@
subscription = self
Class.new(Reactor::Workers::MailerWorker) do
self.source = subscription.source
self.action = subscription.action
self.delay = subscription.delay
- self.async = subscription.async
self.deprecated = subscription.deprecated
self.sidekiq_options subscription.sidekiq_options
end
end