Sha256: c50e2c888f02d2980b5633c1f2d9824592188b97972a10b7963125a369e6c05c

Contents?: true

Size: 1.36 KB

Versions: 22

Compression:

Stored size: 1.36 KB

Contents

class Class
  def load_for_delayed_job(arg)
    self
  end
  
  def dump_for_delayed_job
    name
  end
end

module Delayed
  class PerformableMethod < Struct.new(:object, :method, :args)
    STRING_FORMAT = /^LOAD\;([A-Z][\w\:]+)(?:\;(\w+))?$/
    
    class LoadError < StandardError
    end

    def initialize(object, method, args)
      raise NoMethodError, "undefined method `#{method}' for #{object.inspect}" unless object.respond_to?(method, true)

      self.object = dump(object)
      self.args   = args.map { |a| dump(a) }
      self.method = method.to_sym
    end
    
    def display_name
      if STRING_FORMAT === object
        "#{$1}#{$2 ? '#' : '.'}#{method}"
      else
        "#{object.class}##{method}"
      end
    end
    
    def perform
      load(object).send(method, *args.map{|a| load(a)})
    rescue PerformableMethod::LoadError
      # We cannot do anything about objects that can't be loaded
      true
    end

    private

    def load(obj)
      if STRING_FORMAT === obj
        $1.constantize.load_for_delayed_job($2)
      else
        obj
      end
    rescue => e
      Delayed::Worker.logger.warn "Could not load object for job: #{e.message}"
      raise PerformableMethod::LoadError
    end

    def dump(obj)
      if obj.respond_to?(:dump_for_delayed_job)
        "LOAD;#{obj.dump_for_delayed_job}"
      else
        obj
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 5 rubygems

Version Path
delayed_job-2.0.8 lib/delayed/performable_method.rb
delayed_job_csi-2.0.7 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.14 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.13 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.12 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.11 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.10 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.9 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.8 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.7 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.6 lib/delayed/performable_method.rb
delayed-job-ajaycb-2.0.10 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.5 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.4 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.3 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.2 lib/delayed/performable_method.rb
delayed_job_with_named_queues-2.0.7.1 lib/delayed/performable_method.rb
yetanothernguyen-delayed_job-0.0.1 lib/delayed/performable_method.rb
delayed_job-2.0.7 lib/delayed/performable_method.rb
delayed_job-2.0.6 lib/delayed/performable_method.rb