delayed_job_mongoid 1.1.0 → 2.0.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.
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require 'delayed_job'
3
- require 'mongo'
4
3
  require 'mongoid'
5
4
 
6
5
  module Delayed
@@ -10,6 +9,7 @@ module Delayed
10
9
  include ::Mongoid::Document
11
10
  include ::Mongoid::Timestamps
12
11
  include Delayed::Backend::Base
12
+
13
13
  field :priority, :type => Integer, :default => 0
14
14
  field :attempts, :type => Integer, :default => 0
15
15
  field :handler, :type => String
@@ -20,22 +20,10 @@ module Delayed
20
20
  field :last_error, :type => String
21
21
  field :queue, :type => String
22
22
 
23
- if ::Mongoid::VERSION.to_f >= 3
24
- index({:locked_by => -1, :priority => 1, :run_at => 1})
25
- else
26
- index([[:locked_by, -1], [:priority, 1], [:run_at, 1]])
27
- end
23
+ index :locked_by => -1, :priority => 1, :run_at => 1
28
24
 
29
25
  before_save :set_default_run_at
30
26
 
31
- def self.before_fork
32
- ::Mongoid.master.connection.close
33
- end
34
-
35
- def self.after_fork
36
- ::Mongoid.master.connection.connect
37
- end
38
-
39
27
  def self.db_time_now
40
28
  Time.now.utc
41
29
  end
@@ -43,40 +31,31 @@ module Delayed
43
31
  # Reserves this job for the worker.
44
32
  #
45
33
  # Uses Mongo's findAndModify operation to atomically pick and lock one
46
- # job from from the collection. findAndModify is not yet available
47
- # directly thru Mongoid so go down to the Mongo Ruby driver instead.
34
+ # job from from the collection.
48
35
  def self.reserve(worker, max_run_time = Worker.max_run_time)
49
36
  right_now = db_time_now
50
37
 
51
- conditions = {:run_at => {"$lte" => right_now}, :failed_at => nil}
52
- (conditions[:priority] ||= {})['$gte'] = Worker.min_priority.to_i if Worker.min_priority
53
- (conditions[:priority] ||= {})['$lte'] = Worker.max_priority.to_i if Worker.max_priority
54
- (conditions[:queue] ||= {})['$in'] = Worker.queues if Worker.queues.any?
55
-
56
- conditions['$or'] = [
38
+ criteria = self.where(
39
+ :run_at => {"$lte" => right_now},
40
+ :failed_at => nil
41
+ ).any_of(
57
42
  { :locked_by => worker.name },
58
43
  { :locked_at => nil },
59
44
  { :locked_at => { '$lt' => (right_now - max_run_time) }}
60
- ]
45
+ )
61
46
 
62
- begin
63
- result = self.db.collection(self.collection.name).find_and_modify(
64
- :query => conditions,
65
- :sort => [['locked_by', -1], ['priority', 1], ['run_at', 1]],
66
- :update => {"$set" => {:locked_at => right_now, :locked_by => worker.name}}
67
- )
47
+ criteria = criteria.gte(:priority => Worker.min_priority.to_i) if Worker.min_priority
48
+ criteria = criteria.lte(:priority => Worker.max_priority.to_i) if Worker.max_priority
49
+ criteria = criteria.any_in(:queue => Worker.queues) if Worker.queues.any?
68
50
 
69
- # Return result as a Mongoid document.
70
- # When Mongoid starts supporting findAndModify, this extra step should no longer be necessary.
71
- self.find(:first, :conditions => {:_id => result["_id"]}) unless result.nil?
72
- rescue Mongo::OperationFailure
73
- nil # no jobs available
74
- end
51
+ criteria.desc(:locked_by).asc(:priority).asc(:run_at).find_and_modify(
52
+ {"$set" => {:locked_at => right_now, :locked_by => worker.name}}, :new => true
53
+ )
75
54
  end
76
55
 
77
56
  # When a worker is exiting, make sure we don't have any locked jobs.
78
57
  def self.clear_locks!(worker_name)
79
- self.collection.update({:locked_by => worker_name}, {"$set" => {:locked_at => nil, :locked_by => nil}}, :multi => true)
58
+ self.where(:locked_by => worker_name).update_all({:locked_at => nil, :locked_by => nil})
80
59
  end
81
60
 
82
61
  def reload(*args)
@@ -2,28 +2,4 @@ require 'spec_helper'
2
2
 
3
3
  describe Delayed::Backend::Mongoid::Job do
4
4
  it_should_behave_like 'a delayed_job backend'
5
-
6
- describe "before_fork" do
7
- after do
8
- ::Mongoid.master.connection.close
9
- end
10
-
11
- it "should disconnect" do
12
- lambda do
13
- Delayed::Backend::Mongoid::Job.before_fork
14
- end.should change { !!Mongoid.master.connection.connected? }.from(true).to(false)
15
- end
16
- end
17
-
18
- describe "after_fork" do
19
- before do
20
- ::Mongoid.master.connection.close
21
- end
22
-
23
- it "should call reconnect" do
24
- lambda do
25
- Delayed::Backend::Mongoid::Job.after_fork
26
- end.should change { !!Mongoid.master.connection.connected? }.from(false).to(true)
27
- end
28
- end
29
- end
5
+ end
@@ -1,13 +1,16 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- $LOAD_PATH.unshift(File.dirname(__FILE__))
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ unless ENV['CI']
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter 'spec'
5
+ end
6
+ end
7
+
5
8
  require 'rspec'
6
9
  require 'delayed_job_mongoid'
7
10
  require 'delayed/backend/shared_spec'
8
11
 
9
12
  Mongoid.configure do |config|
10
- config.master = config.master = Mongo::Connection.new.db('dl_spec')
13
+ config.connect_to("dl_spec")
11
14
  end
12
15
 
13
16
  class Story
@@ -18,4 +21,3 @@ class Story
18
21
 
19
22
  handle_asynchronously :whatever
20
23
  end
21
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,16 +10,16 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-26 00:00:00.000000000 Z
13
+ date: 2012-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: mongo
16
+ name: mongoid
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: '1.6'
22
+ version: '3.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,16 +27,32 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: '1.6'
30
+ version: '3.0'
31
31
  - !ruby/object:Gem::Dependency
32
- name: mongoid
32
+ name: delayed_job
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '3.0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
33
49
  requirement: !ruby/object:Gem::Requirement
34
50
  none: false
35
51
  requirements:
36
52
  - - ! '>='
37
53
  - !ruby/object:Gem::Version
38
54
  version: '2.0'
39
- type: :runtime
55
+ type: :development
40
56
  prerelease: false
41
57
  version_requirements: !ruby/object:Gem::Requirement
42
58
  none: false
@@ -45,29 +61,29 @@ dependencies:
45
61
  - !ruby/object:Gem::Version
46
62
  version: '2.0'
47
63
  - !ruby/object:Gem::Dependency
48
- name: delayed_job
64
+ name: rake
49
65
  requirement: !ruby/object:Gem::Requirement
50
66
  none: false
51
67
  requirements:
52
- - - ~>
68
+ - - ! '>='
53
69
  - !ruby/object:Gem::Version
54
- version: '3.0'
55
- type: :runtime
70
+ version: '0.9'
71
+ type: :development
56
72
  prerelease: false
57
73
  version_requirements: !ruby/object:Gem::Requirement
58
74
  none: false
59
75
  requirements:
60
- - - ~>
76
+ - - ! '>='
61
77
  - !ruby/object:Gem::Version
62
- version: '3.0'
78
+ version: '0.9'
63
79
  - !ruby/object:Gem::Dependency
64
- name: rspec
80
+ name: simplecov
65
81
  requirement: !ruby/object:Gem::Requirement
66
82
  none: false
67
83
  requirements:
68
84
  - - ! '>='
69
85
  - !ruby/object:Gem::Version
70
- version: '2.0'
86
+ version: '0.6'
71
87
  type: :development
72
88
  prerelease: false
73
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,7 +91,7 @@ dependencies:
75
91
  requirements:
76
92
  - - ! '>='
77
93
  - !ruby/object:Gem::Version
78
- version: '2.0'
94
+ version: '0.6'
79
95
  description:
80
96
  email:
81
97
  - chris@collectiveidea.com
@@ -108,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
124
  version: '0'
109
125
  segments:
110
126
  - 0
111
- hash: 4375365577565581306
127
+ hash: -913743688657912921
112
128
  required_rubygems_version: !ruby/object:Gem::Requirement
113
129
  none: false
114
130
  requirements:
@@ -117,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
133
  version: '0'
118
134
  segments:
119
135
  - 0
120
- hash: 4375365577565581306
136
+ hash: -913743688657912921
121
137
  requirements: []
122
138
  rubyforge_project:
123
139
  rubygems_version: 1.8.23