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