forked from tobi/delayed_job
-
Notifications
You must be signed in to change notification settings - Fork 955
/
performable_method.rb
41 lines (33 loc) · 1.02 KB
/
performable_method.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
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
module Delayed
class PerformableMethod
attr_accessor :object, :method_name, :args
def initialize(object, method_name, args)
raise NoMethodError, "undefined method `#{method_name}' for #{object.inspect}" unless object.respond_to?(method_name, true)
if object.respond_to?(:persisted?) && !object.persisted?
raise(ArgumentError, "job cannot be created for non-persisted record: #{object.inspect}")
end
self.object = object
self.args = args
self.method_name = method_name.to_sym
end
def display_name
if object.is_a?(Class)
"#{object}.#{method_name}"
else
"#{object.class}##{method_name}"
end
end
def perform
object.send(method_name, *args) if object
end
def method(sym)
object.method(sym)
end
def method_missing(symbol, *args)
object.send(symbol, *args)
end
def respond_to?(symbol, include_private = false)
super || object.respond_to?(symbol, include_private)
end
end
end