delayed_job_extras 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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