lib/reactor/models/concerns/subscribable.rb in reactor-0.5.3 vs lib/reactor/models/concerns/subscribable.rb in reactor-0.6.0
- old
+ new
@@ -1,11 +1,13 @@
module Reactor::Subscribable
extend ActiveSupport::Concern
module ClassMethods
- def on_event(event, method = nil, options = {}, &block)
- (Reactor::SUBSCRIBERS[event.to_s] ||= []).push(StaticSubscriberFactory.create event, method, {source: self}.merge(options), &block)
+ def on_event(*args, &block)
+ options = args.extract_options!
+ event, method = args
+ (Reactor::SUBSCRIBERS[event.to_s] ||= []).push(StaticSubscriberFactory.create(event, method, {source: self}.merge(options), &block))
end
end
class StaticSubscriberFactory
@@ -15,26 +17,35 @@
eval %Q{
class #{new_class}
include Sidekiq::Worker
- cattr_accessor :method, :delay, :source
+ cattr_accessor :method, :delay, :source, :in_memory
def perform(data)
event = Reactor::Event.new(data)
if @@method.is_a?(Symbol)
@@source.delay_for(@@delay).send(@@method, event)
else
@@method.call(event)
end
end
+
+ def self.perform_where_needed(data)
+ if @@in_memory
+ new.perform(data)
+ else
+ perform_async(data)
+ end
+ end
end
}
new_class = new_class.constantize
new_class.method = method || block
new_class.delay = options[:delay] || 0
new_class.source = options[:source]
+ new_class.in_memory = options[:in_memory]
new_class
end
end
end
\ No newline at end of file