14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/reactor/models/concerns/subscribable.rb', line 14
def self.create(event, method = nil, options = {}, &block)
handler_class_prefix = event == '*' ? 'Wildcard': event.to_s.camelize
i = 0
begin
new_class = "#{handler_class_prefix}Handler#{i}"
i+= 1
end while Reactor::StaticSubscribers.const_defined?(new_class)
klass = Class.new do
include Sidekiq::Worker
class_attribute :method, :delay, :source, :in_memory, :dont_perform
def perform(data)
return :__perform_aborted__ if dont_perform && !Reactor::TEST_MODE_SUBSCRIBERS.include?(source)
event = Reactor::Event.new(data)
if method.is_a?(Symbol)
ActiveSupport::Deprecation.silence do
source.delay_for(delay).send(method, event)
end
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
Reactor::StaticSubscribers.const_set(new_class, klass)
klass.tap do |k|
k.method = method || block
k.delay = options[:delay] || 0
k.source = options[:source]
k.in_memory = options[:in_memory]
k.dont_perform = Reactor.test_mode?
end
end
|