delayed_job_extras 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,7 @@ module Delayed
10
10
 
11
11
  def payload_object=(object)
12
12
  self.worker_class_name = object.worker_class_name if object.respond_to?(:worker_class_name)
13
+ @payload_object = object
13
14
  self['handler'] = object.to_yaml
14
15
  end
15
16
 
@@ -32,6 +33,19 @@ module Delayed
32
33
  !self.started_at.nil? && !self.finished_at.nil?
33
34
  end
34
35
 
36
+ def validate_with_unique
37
+ validate_without_unique
38
+ if self['handler'] && self.payload_object && self.payload_object.is_a?(DJ::Worker) && self.new_record?
39
+ if self.payload_object.unique?
40
+ if Delayed::Job.count(:all, :conditions => {:worker_class_name => self.worker_class_name, :finished_at => nil}) > 0
41
+ self.errors.add_to_base("Only one #{self.worker_class_name} can be queued at a time!")
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ alias_method_chain :validate, :unique
48
+
35
49
  class << self
36
50
 
37
51
  def stats(start_date = 1.day.ago.beginning_of_day, end_date = Time.now.beginning_of_day)
@@ -5,6 +5,12 @@ module DJ
5
5
 
6
6
  attr_accessor :dj_object
7
7
  attr_accessor :logger
8
+ attr_accessor :__original_args
9
+
10
+ def initialize(*args)
11
+ self.__original_args = *args
12
+ return self
13
+ end
8
14
 
9
15
  def priority=(x)
10
16
  @priority = x
@@ -41,6 +47,17 @@ module DJ
41
47
  def enqueue(priority = self.priority, run_at = self.run_at)
42
48
  Delayed::Job.enqueue(self, priority, run_at)
43
49
  end
50
+
51
+ def reenqueue
52
+ job = self.class.new(*self.__original_args)
53
+ yield job if block_given?
54
+ self.dj_object.touch(:finished_at) if self.dj_object
55
+ job.enqueue
56
+ end
57
+
58
+ def unique?
59
+ false
60
+ end
44
61
 
45
62
  class << self
46
63
 
@@ -1,14 +1,15 @@
1
1
  module Delayed
2
2
  class Job
3
+
3
4
  def self.enqueue(obj, *args)
4
5
  if obj.respond_to?(:dj_object)
5
6
  if obj.dj_object.nil?
6
7
  obj.dj_object = Delayed::Job.new
7
- obj.dj_object.id = 1
8
8
  end
9
9
  end
10
10
  obj.perform
11
11
  obj.respond_to?(:dj_object) ? obj.dj_object : nil
12
12
  end
13
+
13
14
  end
14
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_extras
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markbates
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-28 00:00:00 -04:00
12
+ date: 2009-09-29 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency