Module: ResqueDef::ClassMethods

Defined in:
lib/resque_def.rb

Instance Method Summary collapse

Instance Method Details

#resque_def(resque_name, &block) ⇒ Object



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
# 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('_', '')

  # 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 = 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