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 42 43
|
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
# rubocop:disable MethodMissing
def method_missing(symbol, *args)
object.send(symbol, *args)
end
# rubocop:enable MethodMissing
def respond_to?(symbol, include_private = false)
super || object.respond_to?(symbol, include_private)
end
end
end
|