delayed_job_mongoid 2.1.0 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 824ab3dc83ed1613e9e2ece9ed703a411aba94d3
4
- data.tar.gz: 6a286aae4db6c1efbce2fe0449f88fc652ef6f03
3
+ metadata.gz: 4e1ed70a5ed5d07ef9104c2cb19cf41fc68a0694
4
+ data.tar.gz: 3793796caa8f4eddfd982441c9a5ddfd71fb2b18
5
5
  SHA512:
6
- metadata.gz: 8134c2be8e5a26297c7c1713791357ce47bbf3d510362748f6726e122addd90dda2f5619c842dca2c66e7100a4879f0c0924ea0eb9af3796d0905f605df57b65
7
- data.tar.gz: 68ef96228c0e632607e623208d0be3b4cbcc090e9107b080ee1a635ef62dc21f38d8b3604ce705db0efdf2278bc22cc5973e3d4113a385102a216883d1a59912
6
+ metadata.gz: c96d5a0fca52cf64119effbade77ea6c03df555074ed5d677dd58224ff842ed253dc95d819af51d3f7222ecc0cea221ac43e70776ebb4341a52ef13ebc7909e4
7
+ data.tar.gz: 90ec0f2f1f953ddcc7e56632b7ed36843b921ad1853873daf198c3742a861aef1a642e73b9ca94808849f00e2e282393c6cdf1876fccd67718033dcad24cb3c6
@@ -1,10 +1,18 @@
1
- Next Release
2
- ============
1
+ Next
2
+ ====
3
+ * Your contribution here.
4
+
5
+ 2.2.0 - 2015-09-24
6
+ ==================
7
+ * Support Mongoid 5.0
8
+
9
+ 2.1.0 - 2014-05-09
10
+ ==================
3
11
  * [#38](https://github.com/collectiveidea/delayed_job_mongoid/pull/38): Fix clearing identity map before each job - [@srleo](https://github.com/srleo)
4
12
  * [#43](https://github.com/collectiveidea/delayed_job_mongoid/pull/43): Compatibility with Mongoid 4.x and Delayed Job 4.x - [@dblock](https://github.com/dblock)
5
13
 
6
- 2.0.0
7
- =====
14
+ 2.0.0 - 2012-08-02
15
+ ==================
8
16
  * Added code coverage with SimpleCov - [@sferik](https://github.com/sferik)
9
17
  * Added Mongoid 3.0 support - [@sferik](https://github.com/sferik), [@asavartsov](https://github.com/asavartsov)
10
18
 
@@ -2,17 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.add_dependency 'delayed_job', ['>= 3.0', '< 5']
5
- spec.add_dependency 'mongoid', ['>= 3.0', '< 5']
5
+ spec.add_dependency 'mongoid', ['>= 3.0', '< 6']
6
+ spec.add_dependency 'mongoid-compatibility'
6
7
  spec.authors = ['Chris Gaffney', 'Brandon Keepers', 'Erik Michaels-Ober']
7
8
  spec.email = ['chris@collectiveidea.com', 'brandon@opensoul.com', 'sferik@gmail.com']
8
- spec.files = %w[CHANGELOG.md CONTRIBUTING.md LICENSE.md README.md Rakefile delayed_job_mongoid.gemspec]
9
- spec.files += Dir.glob('lib/**/*.rb')
10
- spec.files += Dir.glob('spec/**/*')
9
+ spec.files = %w[CHANGELOG.md CONTRIBUTING.md LICENSE.md README.md delayed_job_mongoid.gemspec] + Dir['lib/**/*.rb']
11
10
  spec.homepage = 'http://github.com/collectiveidea/delayed_job_mongoid'
12
11
  spec.licenses = ['MIT']
13
12
  spec.name = 'delayed_job_mongoid'
14
13
  spec.require_paths = ['lib']
15
14
  spec.summary = 'Mongoid backend for delayed_job'
16
- spec.test_files = Dir.glob('spec/**/*')
17
- spec.version = '2.1.0'
15
+ spec.version = '2.2.0'
18
16
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'delayed_job'
3
3
  require 'mongoid'
4
+ require 'mongoid/compatibility'
4
5
 
5
6
  module Delayed
6
7
  module Backend
@@ -28,29 +29,48 @@ module Delayed
28
29
  Time.now.utc
29
30
  end
30
31
 
31
- # Reserves this job for the worker.
32
+ # Reserves one job for the worker.
32
33
  #
33
- # Uses Mongo's findAndModify operation to atomically pick and lock one
34
- # job from from the collection.
34
+ # Atomically picks and locks one job from the collection.
35
35
  def self.reserve(worker, max_run_time = Worker.max_run_time)
36
36
  right_now = db_time_now
37
37
 
38
+ criteria = reservation_criteria worker, right_now, max_run_time
39
+
40
+ if ::Mongoid::Compatibility::Version.mongoid5?
41
+ criteria.find_one_and_update(
42
+ {'$set' => {:locked_at => right_now, :locked_by => worker.name}},
43
+ :return_document => :after
44
+ )
45
+ else
46
+ criteria.find_and_modify(
47
+ {'$set' => {:locked_at => right_now, :locked_by => worker.name}},
48
+ :new => true
49
+ )
50
+ end
51
+ end
52
+
53
+ # Mongo criteria matching all the jobs the worker can reserver
54
+ #
55
+ # Jobs are sorted by priority and run_at.
56
+ #
57
+ # @api private
58
+ def self.reservation_criteria(worker, right_now, max_run_time)
38
59
  criteria = where(
39
60
  :run_at => {'$lte' => right_now},
40
61
  :failed_at => nil
41
62
  ).any_of(
42
63
  {:locked_by => worker.name},
43
64
  {:locked_at => nil},
44
- {:locked_at => {'$lt' => (right_now - max_run_time)}}
65
+ :locked_at => {'$lt' => (right_now - max_run_time)}
45
66
  )
46
67
 
47
68
  criteria = criteria.gte(:priority => Worker.min_priority.to_i) if Worker.min_priority
48
69
  criteria = criteria.lte(:priority => Worker.max_priority.to_i) if Worker.max_priority
49
70
  criteria = criteria.any_in(:queue => Worker.queues) if Worker.queues.any?
71
+ criteria = criteria.desc(:locked_by).asc(:priority).asc(:run_at)
50
72
 
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
- )
73
+ criteria
54
74
  end
55
75
 
56
76
  # When a worker is exiting, make sure we don't have any locked jobs.
@@ -65,13 +85,12 @@ module Delayed
65
85
 
66
86
  # Hook method that is called after a new worker is forked
67
87
  def self.after_fork
68
- # to avoid `failed with error "unauthorized"` errors in Mongoid 4.0.alpha2
69
- ::Mongoid.default_session.disconnect
88
+ if ::Mongoid::Compatibility::Version.mongoid4?
89
+ # to avoid `failed with error "unauthorized"` errors in Mongoid 4.0.alpha2
90
+ ::Mongoid.default_session.disconnect
91
+ end
70
92
  end
71
93
  end
72
- def self.mongoid3?
73
- ::Mongoid.const_defined? :Observer # deprecated in Mongoid 4.x
74
- end
75
94
  end
76
95
  end
77
96
  end
@@ -2,7 +2,7 @@
2
2
  # clear Mongoid::IdentityMap before each job
3
3
  #
4
4
 
5
- if Delayed::Backend::Mongoid.mongoid3?
5
+ if ::Mongoid::Compatibility::Version.mongoid3?
6
6
  module Delayed
7
7
  module Plugins
8
8
  class ClearIdentityMap < Plugin
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: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Gaffney
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-05-09 00:00:00.000000000 Z
13
+ date: 2015-09-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: delayed_job
@@ -41,7 +41,7 @@ dependencies:
41
41
  version: '3.0'
42
42
  - - "<"
43
43
  - !ruby/object:Gem::Version
44
- version: '5'
44
+ version: '6'
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,7 +51,21 @@ dependencies:
51
51
  version: '3.0'
52
52
  - - "<"
53
53
  - !ruby/object:Gem::Version
54
- version: '5'
54
+ version: '6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mongoid-compatibility
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description:
56
70
  email:
57
71
  - chris@collectiveidea.com
@@ -65,15 +79,11 @@ files:
65
79
  - CONTRIBUTING.md
66
80
  - LICENSE.md
67
81
  - README.md
68
- - Rakefile
69
82
  - delayed_job_mongoid.gemspec
70
83
  - lib/delayed/backend/mongoid.rb
71
84
  - lib/delayed/plugins.rb
72
85
  - lib/delayed/serialization/mongoid.rb
73
86
  - lib/delayed_job_mongoid.rb
74
- - spec/delayed_job_mongoid_spec.rb
75
- - spec/helper.rb
76
- - spec/plugins_spec.rb
77
87
  homepage: http://github.com/collectiveidea/delayed_job_mongoid
78
88
  licenses:
79
89
  - MIT
@@ -94,12 +104,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
104
  version: '0'
95
105
  requirements: []
96
106
  rubyforge_project:
97
- rubygems_version: 2.2.2
107
+ rubygems_version: 2.4.8
98
108
  signing_key:
99
109
  specification_version: 4
100
110
  summary: Mongoid backend for delayed_job
101
- test_files:
102
- - spec/delayed_job_mongoid_spec.rb
103
- - spec/helper.rb
104
- - spec/plugins_spec.rb
111
+ test_files: []
105
112
  has_rdoc:
data/Rakefile DELETED
@@ -1,34 +0,0 @@
1
- # encoding: utf-8
2
- require 'rubygems'
3
- require 'bundler/setup'
4
- Bundler::GemHelper.install_tasks
5
-
6
- require 'rspec/core/rake_task'
7
- desc 'Run the specs'
8
- RSpec::Core::RakeTask.new do |r|
9
- r.verbose = false
10
- end
11
-
12
- task :test => :spec
13
-
14
- begin
15
- require 'rubocop/rake_task'
16
- Rubocop::RakeTask.new
17
- rescue LoadError
18
- task :rubocop do
19
- $stderr.puts 'Rubocop is disabled'
20
- end
21
- end
22
-
23
- require 'yardstick/rake/measurement'
24
- Yardstick::Rake::Measurement.new do |measurement|
25
- measurement.output = 'measurement/report.txt'
26
- end
27
-
28
- require 'yardstick/rake/verify'
29
- Yardstick::Rake::Verify.new do |verify|
30
- verify.require_exact_threshold = false
31
- verify.threshold = 53.3
32
- end
33
-
34
- task :default => [:spec, :rubocop, :verify_measurements]
@@ -1,5 +0,0 @@
1
- require 'helper'
2
-
3
- describe Delayed::Backend::Mongoid::Job do
4
- it_behaves_like 'a delayed_job backend'
5
- end
@@ -1,42 +0,0 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
- SimpleCov::Formatter::HTMLFormatter,
6
- Coveralls::SimpleCov::Formatter
7
- ]
8
-
9
- SimpleCov.start do
10
- add_filter '/spec/'
11
- minimum_coverage(77.27)
12
- end
13
-
14
- require 'rspec'
15
- require 'delayed_job_mongoid'
16
- require 'delayed/backend/shared_spec'
17
-
18
- RSpec.configure do |config|
19
- config.expect_with :rspec do |c|
20
- c.syntax = :expect
21
- end
22
- end
23
-
24
- Mongoid.configure do |config|
25
- config.connect_to('dl_spec')
26
- end
27
-
28
- class Story
29
- include ::Mongoid::Document
30
- field :text
31
-
32
- def tell
33
- text
34
- end
35
-
36
- def whatever(n, _)
37
- tell * n
38
- end
39
- def self.count; end
40
-
41
- handle_asynchronously :whatever
42
- end
@@ -1,23 +0,0 @@
1
- require 'helper'
2
-
3
- if Delayed::Backend::Mongoid.mongoid3?
4
- describe Delayed::Backend::Mongoid::Job do
5
- let(:worker) { Delayed::Worker.new }
6
- before do
7
- Delayed::Worker.max_priority = nil
8
- Delayed::Worker.min_priority = nil
9
- Delayed::Worker.default_priority = 99
10
- Delayed::Worker.delay_jobs = true
11
- SimpleJob.runs = 0
12
- described_class.delete_all
13
- end
14
- after do
15
- Delayed::Worker.reset
16
- end
17
- it 'clears mongoid identity map' do
18
- expect(Mongoid::IdentityMap).to receive(:clear).once
19
- described_class.enqueue SimpleJob.new, :priority => 5
20
- worker.work_off
21
- end
22
- end
23
- end