module ResqueDef::ClassMethods

Public Class Methods

job=(job) click to toggle source
# File lib/resque_def.rb, line 25
def self.job=(job)
  @job = job
end
perform(*args) click to toggle source
# File lib/resque_def.rb, line 21
def self.perform(*args)
  @job.call(*args)
end
queue=(queue) click to toggle source
# File lib/resque_def.rb, line 29
def self.queue=(queue)
  @queue = queue
end

Public Instance Methods

resque_def(resque_name, &block) click to toggle source
# File lib/resque_def.rb, line 7
def resque_def(resque_name, &block)
  # convert resque_name like :delay_send_issues to DelaySendIssues for klass name
  resque_klass_name = resque_name.to_s.capitalize.gsub(/_\S/) {|m| m.upcase}.gsub('_', '')


  # convert proc to lambda :(
  obj = Object.new
  obj.define_singleton_method(:_, &block)
  block = obj.method(:_).to_proc

  # create the resque klass
  resque_klass = Class.new do
    @queue = resque_name

    def self.perform(*args)
      @job.call(*args)
    end

    def self.job=(job)
      @job = job
    end

    def self.queue=(queue)
      @queue = queue
    end
  end
  resque_klass.job   = block
  resque_klass.queue = resque_name

  # assign the object to a constant we can look up later
  resque_klass = self.const_set(resque_klass_name, resque_klass)

  # create the class method to enqueue the resque job
  define_singleton_method(resque_name) do |*args|
    Resque.enqueue(resque_klass, *args)
  end

  # helper instance method, calls the class method
  define_method(resque_name) do |*args|
    self.class.send(resque_name, *args)
  end
end