sidekiq-unique-jobs 4.0.0 → 4.0.7

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq-unique-jobs might be problematic. Click here for more details.

Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +1 -1
  3. data/.travis.yml +1 -2
  4. data/Appraisals +1 -1
  5. data/CHANGELOG.md +44 -1
  6. data/Gemfile +1 -2
  7. data/README.md +49 -51
  8. data/circle.yml +3 -1
  9. data/gemfiles/sidekiq_2.17.gemfile +7 -5
  10. data/gemfiles/sidekiq_3.0.gemfile +6 -4
  11. data/gemfiles/sidekiq_3.1.gemfile +6 -4
  12. data/gemfiles/sidekiq_3.2.gemfile +6 -4
  13. data/gemfiles/sidekiq_3.3.gemfile +6 -4
  14. data/gemfiles/sidekiq_develop.gemfile +6 -4
  15. data/lib/sidekiq-unique-jobs.rb +3 -6
  16. data/lib/sidekiq_unique_jobs/config.rb +1 -6
  17. data/lib/sidekiq_unique_jobs/constants.rb +17 -0
  18. data/lib/sidekiq_unique_jobs/core_ext.rb +28 -23
  19. data/lib/sidekiq_unique_jobs/lock.rb +1 -1
  20. data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +13 -0
  21. data/lib/sidekiq_unique_jobs/lock/until_executed.rb +17 -3
  22. data/lib/sidekiq_unique_jobs/lock/until_executing.rb +4 -0
  23. data/lib/sidekiq_unique_jobs/lock/until_timeout.rb +9 -2
  24. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +17 -5
  25. data/lib/sidekiq_unique_jobs/options_with_fallback.rb +14 -5
  26. data/lib/sidekiq_unique_jobs/server/middleware.rb +3 -40
  27. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +29 -2
  28. data/lib/sidekiq_unique_jobs/testing/sidekiq_overrides.rb +6 -2
  29. data/lib/sidekiq_unique_jobs/timeout_calculator.rb +42 -0
  30. data/lib/sidekiq_unique_jobs/unique_args.rb +31 -29
  31. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  32. data/redis/synchronize.lua +1 -1
  33. data/sidekiq-unique-jobs.gemspec +1 -2
  34. data/spec/{workers/unique_worker.rb → jobs/another_unique_job.rb} +3 -3
  35. data/spec/{workers/queue_worker.rb → jobs/custom_queue_job.rb} +1 -1
  36. data/spec/jobs/custom_queue_job_with_filter_method.rb +7 -0
  37. data/spec/{workers/queue_worker_with_filter_proc.rb → jobs/custom_queue_job_with_filter_proc.rb} +2 -3
  38. data/spec/jobs/expiring_job.rb +4 -0
  39. data/spec/{workers → jobs}/inline_worker.rb +1 -1
  40. data/spec/jobs/just_a_worker.rb +8 -0
  41. data/spec/jobs/main_job.rb +8 -0
  42. data/spec/{workers/my_worker.rb → jobs/my_job.rb} +2 -3
  43. data/spec/jobs/my_unique_job.rb +7 -0
  44. data/spec/{workers → jobs}/plain_class.rb +0 -0
  45. data/spec/{workers → jobs}/test_class.rb +0 -0
  46. data/spec/{workers → jobs}/unique_job_with_filter_method.rb +2 -2
  47. data/spec/{workers/unique_on_all_queues_worker.rb → jobs/unique_on_all_queues_job.rb} +3 -3
  48. data/spec/jobs/until_and_while_executing_job.rb +8 -0
  49. data/spec/{workers/another_unique_worker.rb → jobs/until_executed_job.rb} +6 -2
  50. data/spec/jobs/until_executing_job.rb +8 -0
  51. data/spec/jobs/until_global_timeout_job.rb +8 -0
  52. data/spec/{workers/inline_expiration_worker.rb → jobs/until_timeout_job.rb} +2 -2
  53. data/spec/{workers/after_unlock_worker.rb → jobs/while_executing_job.rb} +2 -3
  54. data/spec/lib/sidekiq_unique_jobs/client/middleware_spec.rb +60 -44
  55. data/spec/lib/sidekiq_unique_jobs/lock/until_and_while_executing_spec.rb +39 -0
  56. data/spec/lib/sidekiq_unique_jobs/lock/until_executed_spec.rb +40 -0
  57. data/spec/lib/sidekiq_unique_jobs/lock/while_executing_spec.rb +15 -4
  58. data/spec/lib/sidekiq_unique_jobs/options_with_fallback_spec.rb +25 -0
  59. data/spec/lib/sidekiq_unique_jobs/scripts_spec.rb +3 -4
  60. data/spec/lib/sidekiq_unique_jobs/server/middleware_spec.rb +51 -68
  61. data/spec/lib/sidekiq_unique_jobs/sidekiq_testing_enabled_spec.rb +75 -79
  62. data/spec/lib/sidekiq_unique_jobs/sidekiq_unique_ext_spec.rb +2 -2
  63. data/spec/lib/sidekiq_unique_jobs/{lock/time_calculator_spec.rb → timeout_calculator_spec.rb} +10 -11
  64. data/spec/lib/sidekiq_unique_jobs/unique_args_spec.rb +28 -45
  65. data/spec/spec_helper.rb +23 -15
  66. data/spec/support/unique_macros.rb +20 -1
  67. metadata +30 -42
  68. data/lib/sidekiq_unique_jobs/lock/time_calculator.rb +0 -44
  69. data/spec/workers/after_yield_worker.rb +0 -17
  70. data/spec/workers/before_yield_worker.rb +0 -9
  71. data/spec/workers/expiring_worker.rb +0 -4
  72. data/spec/workers/inline_unlock_order_worker.rb +0 -8
  73. data/spec/workers/just_a_worker.rb +0 -8
  74. data/spec/workers/main_job.rb +0 -8
  75. data/spec/workers/my_unique_worker.rb +0 -8
  76. data/spec/workers/queue_worker_with_filter_method.rb +0 -7
  77. data/spec/workers/run_lock_with_retries_worker.rb +0 -12
  78. data/spec/workers/run_lock_worker.rb +0 -7
  79. data/spec/workers/while_executing_worker.rb +0 -13
@@ -22,7 +22,7 @@ RSpec.describe 'Sidekiq::Api' do
22
22
  'class' => JustAWorker,
23
23
  'queue' => 'testqueue',
24
24
  'args' => [foo: 'bar'],
25
- 'at' => Time.now.tomorrow.to_i)
25
+ 'at' => (Date.today + 1).to_time.to_i)
26
26
  end
27
27
 
28
28
  def schedule_job
@@ -67,7 +67,7 @@ RSpec.describe 'Sidekiq::Api' do
67
67
  end
68
68
  end
69
69
 
70
- describe Sidekiq::JobSet::UniqueExtension, sidekiq_ver: '>= 3' do
70
+ describe Sidekiq::JobSet::UniqueExtension, sidekiq_ver: '>= 3.1' do
71
71
  it 'deletes uniqueness locks on clear' do
72
72
  schedule_job
73
73
  Sidekiq::JobSet.new('schedule').clear
@@ -1,13 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe SidekiqUniqueJobs::Lock::TimeCalculator do
4
- include ActiveSupport::Testing::TimeHelpers
3
+ RSpec.describe SidekiqUniqueJobs::TimeoutCalculator do
5
4
  shared_context 'undefined worker class' do
6
5
  subject { described_class.new('class' => 'test') }
7
6
  end
8
7
 
9
8
  shared_context 'item not scheduled' do
10
- subject { described_class.new('class' => 'MyUniqueWorker') }
9
+ subject { described_class.new('class' => 'MyUniqueJob') }
11
10
  end
12
11
 
13
12
  describe 'public api' do
@@ -41,13 +40,13 @@ RSpec.describe SidekiqUniqueJobs::Lock::TimeCalculator do
41
40
  its(:time_until_scheduled) { is_expected.to eq(0) }
42
41
  end
43
42
 
44
- subject { described_class.new('class' => 'MyUniqueWorker', 'at' => schedule_time) }
45
- let(:schedule_time) { 1.day.from_now.to_i }
43
+ subject { described_class.new('class' => 'MyUniqueJob', 'at' => schedule_time) }
44
+ let(:schedule_time) { Time.now.utc.to_i + 24 * 60 * 60 }
46
45
  let(:now_in_utc) { Time.now.utc.to_i }
47
46
 
48
47
  its(:time_until_scheduled) do
49
- travel_to(Time.at(now_in_utc)) do
50
- is_expected.to eq(schedule_time - now_in_utc)
48
+ Timecop.travel(Time.at(now_in_utc)) do
49
+ is_expected.to be_within(1).of(schedule_time - now_in_utc)
51
50
  end
52
51
  end
53
52
  end
@@ -57,7 +56,7 @@ RSpec.describe SidekiqUniqueJobs::Lock::TimeCalculator do
57
56
  its(:unique_expiration) { is_expected.to eq(SidekiqUniqueJobs.config.default_expiration) }
58
57
  end
59
58
 
60
- subject { described_class.new('class' => 'MyUniqueWorker') }
59
+ subject { described_class.new('class' => 'MyUniqueJob') }
61
60
  its(:unique_expiration) { is_expected.to eq(7_200) }
62
61
  end
63
62
 
@@ -66,7 +65,7 @@ RSpec.describe SidekiqUniqueJobs::Lock::TimeCalculator do
66
65
  its(:worker_class_unique_expiration) { is_expected.to eq(nil) }
67
66
  end
68
67
 
69
- subject { described_class.new('class' => 'MyUniqueWorker') }
68
+ subject { described_class.new('class' => 'MyUniqueJob') }
70
69
  its(:worker_class_unique_expiration) { is_expected.to eq(7_200) }
71
70
  end
72
71
 
@@ -75,7 +74,7 @@ RSpec.describe SidekiqUniqueJobs::Lock::TimeCalculator do
75
74
  its(:worker_class) { is_expected.to eq('test') }
76
75
  end
77
76
 
78
- subject { described_class.new('class' => 'MyWorker') }
79
- its(:worker_class) { is_expected.to eq(MyWorker) }
77
+ subject { described_class.new('class' => 'MyJob') }
78
+ its(:worker_class) { is_expected.to eq(MyJob) }
80
79
  end
81
80
  end
@@ -1,45 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe SidekiqUniqueJobs::UniqueArgs do
4
- let(:item) { { 'class' => 'UniqueWorker', 'queue' => 'myqueue', 'args' => [[1, 2]] } }
4
+ let(:item) { { 'class' => 'UntilExecutedJob', 'queue' => 'myqueue', 'args' => [[1, 2]] } }
5
5
  subject { described_class.new(item) }
6
6
 
7
- describe '#unique_args_enabled_in_worker?' do
8
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args) do
9
- its(:unique_args_enabled_in_worker?) { is_expected.to eq(:unique_args) }
10
- end
11
-
12
- with_sidekiq_options_for(UniqueWorker, unique_args: false) do
13
- its(:unique_args_enabled_in_worker?) { is_expected.to eq(false) }
14
- end
15
-
16
- # For when a worker doesn't exist in the current context
17
- with_sidekiq_options_for('NotAWorker') do
18
- its(:unique_args_enabled_in_worker?) { is_expected.to eq(nil) }
19
- end
20
- end
21
-
22
7
  describe '#unique_args_enabled?' do
23
- with_global_config(unique_args_enabled: true) do
24
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args) do
8
+ with_default_worker_options(unique: :until_executed, unique_args: ->(args) { args[1]['test'] }) do
9
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args) do
25
10
  its(:unique_args_enabled?) { is_expected.to eq(:unique_args) }
26
11
  end
27
12
 
28
- with_sidekiq_options_for(UniqueWorker, unique_args: false) do
29
- its(:unique_args_enabled?) { is_expected.to eq(true) }
13
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: false) do
14
+ its(:unique_args_enabled?) { is_expected.to be_a(Proc) }
30
15
  end
31
16
  end
32
17
 
33
- with_global_config(unique_args_enabled: false) do
34
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args) do
18
+ with_default_worker_options(unique: false, unique_args: nil) do
19
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args) do
35
20
  its(:unique_args_enabled?) { is_expected.to eq(:unique_args) }
36
21
  end
37
22
 
38
- with_sidekiq_options_for(UniqueWorker, unique_args: false) do
39
- its(:unique_args_enabled?) { is_expected.to eq(false) }
23
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: false) do
24
+ its(:unique_args_enabled?) { is_expected.to be_falsy }
40
25
  end
41
26
 
42
- its(:unique_args_enabled?) { is_expected.to eq(false) }
27
+ its(:unique_args_enabled?) { is_expected.to be_falsy }
43
28
  end
44
29
  end
45
30
 
@@ -47,46 +32,44 @@ RSpec.describe SidekiqUniqueJobs::UniqueArgs do
47
32
  with_global_config(unique_args_enabled: true) do
48
33
  its(:unique_on_all_queues?) { is_expected.to eq(nil) }
49
34
 
50
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args, unique_on_all_queues: true) do
35
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args, unique_on_all_queues: true) do
51
36
  its(:unique_on_all_queues?) { is_expected.to eq(true) }
52
37
  end
53
38
 
54
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args, unique_on_all_queues: false) do
55
- its(:unique_on_all_queues?) { is_expected.to eq(false) }
56
- end
57
-
58
- # For when a worker doesn't exist in the current context
59
- with_sidekiq_options_for('NotAWorker', unique_args: :unique_args, unique_on_all_queues: true) do
60
- its(:unique_args_enabled_in_worker?) { is_expected.to eq(nil) }
39
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args, unique_on_all_queues: false) do
40
+ its(:unique_on_all_queues?) { is_expected.to be_falsy }
61
41
  end
62
42
  end
63
43
 
64
44
  with_global_config(unique_args_enabled: false) do
65
45
  its(:unique_on_all_queues?) { is_expected.to eq(nil) }
66
46
 
67
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args, unique_on_all_queues: false) do
47
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args, unique_on_all_queues: false) do
68
48
  its(:unique_on_all_queues?) { is_expected.to eq(false) }
69
49
  end
70
50
 
71
- with_sidekiq_options_for(UniqueWorker, unique_args: :unique_args, unique_on_all_queues: true) do
51
+ with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args, unique_on_all_queues: true) do
72
52
  its(:unique_on_all_queues?) { is_expected.to eq(true) }
73
53
  end
74
-
75
- # For when a worker doesn't exist in the current context
76
- with_sidekiq_options_for('NotAWorker', unique_args: :unique_args, unique_on_all_queues: true) do
77
- its(:unique_args_enabled_in_worker?) { is_expected.to eq(nil) }
78
- end
79
54
  end
80
55
  end
81
56
 
82
57
  describe '#filter_by_proc' do
83
- let(:proc) { ->(args) { args[1]['test'] } }
84
- before do
85
- allow(subject).to receive(:unique_args_method).and_return(proc)
58
+ let(:filter) { ->(args) { args[1]['test'] } }
59
+ context 'without any default worker options configured' do
60
+ before do
61
+ allow(subject).to receive(:unique_args_method).and_return(filter)
62
+ end
63
+
64
+ it 'returns the value of theoptions hash ' do
65
+ expect(subject.filter_by_proc([1, 'test' => 'it'])).to eq('it')
66
+ end
86
67
  end
87
68
 
88
- it 'returns the value of the provided ' do
89
- expect(subject.filter_by_proc([1, 'test' => 'it'])).to eq('it')
69
+ with_default_worker_options(unique: :until_executed, unique_args: ->(args) { args[1]['test'] }) do
70
+ it 'returns the value of the provided options' do
71
+ expect(subject.filter_by_proc([1, 'test' => 'it'])).to eq('it')
72
+ end
90
73
  end
91
74
  end
92
75
 
@@ -1,26 +1,34 @@
1
- if ENV['CI'] && RUBY_ENGINE == 'ruby'
2
- require 'codeclimate-test-reporter'
3
- CodeClimate::TestReporter.start
4
- else
5
- require 'simplecov'
6
- end
1
+ if RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '2.2.3'
2
+ if ENV['CI']
3
+ require 'codeclimate-test-reporter'
4
+ CodeClimate::TestReporter.start
5
+ else
6
+ require 'simplecov'
7
+ end
7
8
 
8
- begin
9
- require 'pry-byebug'
10
- rescue LoadError
11
- puts 'Pry unavailable'
9
+ begin
10
+ require 'pry-byebug'
11
+ rescue LoadError
12
+ puts 'Pry unavailable'
13
+ end
12
14
  end
13
15
 
14
16
  require 'rspec'
15
17
  require 'rspec/its'
16
- require 'celluloid/current'
18
+
19
+ begin
20
+ require 'celluloid/current'
21
+ rescue LoadError
22
+ warn 'Celluloid is old'
23
+ require 'celluloid'
24
+ end
17
25
  require 'celluloid/test'
26
+ Celluloid.boot
18
27
  require 'sidekiq'
19
28
  require 'sidekiq/util'
20
29
  require 'sidekiq-unique-jobs'
21
30
  require 'sidekiq_unique_jobs/testing'
22
- require 'active_support/all'
23
- require 'active_support/testing/time_helpers'
31
+ require 'timecop'
24
32
 
25
33
  require 'rspec-sidekiq'
26
34
 
@@ -47,7 +55,7 @@ RSpec.configure do |config|
47
55
  config.filter_run :focus unless ENV['CI']
48
56
  config.run_all_when_everything_filtered = true
49
57
  config.disable_monkey_patching!
50
- config.warnings = true
58
+ config.warnings = false
51
59
  config.default_formatter = 'doc' if config.files_to_run.one?
52
60
  config.order = :random
53
61
  Kernel.srand config.seed
@@ -64,4 +72,4 @@ RSpec::Sidekiq.configure do |config|
64
72
  config.warn_when_jobs_not_processed_by_sidekiq = false
65
73
  end
66
74
 
67
- Dir[File.join(File.dirname(__FILE__), 'workers', '**', '*.rb')].each { |f| require f }
75
+ Dir[File.join(File.dirname(__FILE__), 'jobs', '**', '*.rb')].each { |f| require f }
@@ -10,7 +10,6 @@ module SidekiqUniqueJobs
10
10
  SidekiqUniqueJobs.configure(was_config)
11
11
  end
12
12
 
13
- # enable versioning for specific blocks (at instance-level)
14
13
  def with_sidekiq_options_for(worker_class, options)
15
14
  worker_class = SidekiqUniqueJobs.worker_class_constantize(worker_class)
16
15
  if worker_class.respond_to?(:sidekiq_options)
@@ -21,6 +20,16 @@ module SidekiqUniqueJobs
21
20
  ensure
22
21
  worker_class.sidekiq_options_hash = was_options if worker_class.respond_to?(:sidekiq_options_hash=)
23
22
  end
23
+
24
+ def with_default_worker_options(options)
25
+ was_options = Sidekiq.default_worker_options
26
+ Sidekiq.default_worker_options.clear
27
+ Sidekiq.default_worker_options = options
28
+ yield
29
+ ensure
30
+ Sidekiq.default_worker_options.clear
31
+ Sidekiq.default_worker_options = was_options
32
+ end
24
33
  end
25
34
 
26
35
  module ClassMethods
@@ -42,6 +51,16 @@ module SidekiqUniqueJobs
42
51
  class_exec(&block)
43
52
  end
44
53
  end
54
+
55
+ # enable versioning for specific blocks (at class-level)
56
+ def with_default_worker_options(config = {}, &block)
57
+ context "with default sidekiq options #{config}" do
58
+ around(:each) do |ex|
59
+ with_default_worker_options(config, &ex)
60
+ end
61
+ class_exec(&block)
62
+ end
63
+ end
45
64
  end
46
65
  end
47
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-unique-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-05 00:00:00.000000000 Z
11
+ date: 2015-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: activesupport
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '3'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '3'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rubocop
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: simplecov
84
+ name: timecop
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -139,9 +125,10 @@ files:
139
125
  - lib/sidekiq-unique-jobs.rb
140
126
  - lib/sidekiq_unique_jobs/client/middleware.rb
141
127
  - lib/sidekiq_unique_jobs/config.rb
128
+ - lib/sidekiq_unique_jobs/constants.rb
142
129
  - lib/sidekiq_unique_jobs/core_ext.rb
143
130
  - lib/sidekiq_unique_jobs/lock.rb
144
- - lib/sidekiq_unique_jobs/lock/time_calculator.rb
131
+ - lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb
145
132
  - lib/sidekiq_unique_jobs/lock/until_executed.rb
146
133
  - lib/sidekiq_unique_jobs/lock/until_executing.rb
147
134
  - lib/sidekiq_unique_jobs/lock/until_timeout.rb
@@ -155,6 +142,7 @@ files:
155
142
  - lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb
156
143
  - lib/sidekiq_unique_jobs/testing.rb
157
144
  - lib/sidekiq_unique_jobs/testing/sidekiq_overrides.rb
145
+ - lib/sidekiq_unique_jobs/timeout_calculator.rb
158
146
  - lib/sidekiq_unique_jobs/unique_args.rb
159
147
  - lib/sidekiq_unique_jobs/unlockable.rb
160
148
  - lib/sidekiq_unique_jobs/version.rb
@@ -162,45 +150,45 @@ files:
162
150
  - redis/release_lock.lua
163
151
  - redis/synchronize.lua
164
152
  - sidekiq-unique-jobs.gemspec
153
+ - spec/jobs/another_unique_job.rb
154
+ - spec/jobs/custom_queue_job.rb
155
+ - spec/jobs/custom_queue_job_with_filter_method.rb
156
+ - spec/jobs/custom_queue_job_with_filter_proc.rb
157
+ - spec/jobs/expiring_job.rb
158
+ - spec/jobs/inline_worker.rb
159
+ - spec/jobs/just_a_worker.rb
160
+ - spec/jobs/main_job.rb
161
+ - spec/jobs/my_job.rb
162
+ - spec/jobs/my_unique_job.rb
163
+ - spec/jobs/plain_class.rb
164
+ - spec/jobs/test_class.rb
165
+ - spec/jobs/unique_job_with_filter_method.rb
166
+ - spec/jobs/unique_on_all_queues_job.rb
167
+ - spec/jobs/until_and_while_executing_job.rb
168
+ - spec/jobs/until_executed_job.rb
169
+ - spec/jobs/until_executing_job.rb
170
+ - spec/jobs/until_global_timeout_job.rb
171
+ - spec/jobs/until_timeout_job.rb
172
+ - spec/jobs/while_executing_job.rb
165
173
  - spec/lib/sidekiq_unique_jobs/client/middleware_spec.rb
166
174
  - spec/lib/sidekiq_unique_jobs/core_ext_spec.rb
167
- - spec/lib/sidekiq_unique_jobs/lock/time_calculator_spec.rb
175
+ - spec/lib/sidekiq_unique_jobs/lock/until_and_while_executing_spec.rb
176
+ - spec/lib/sidekiq_unique_jobs/lock/until_executed_spec.rb
168
177
  - spec/lib/sidekiq_unique_jobs/lock/while_executing_spec.rb
169
178
  - spec/lib/sidekiq_unique_jobs/normalizer_spec.rb
179
+ - spec/lib/sidekiq_unique_jobs/options_with_fallback_spec.rb
170
180
  - spec/lib/sidekiq_unique_jobs/scripts_spec.rb
171
181
  - spec/lib/sidekiq_unique_jobs/server/middleware_spec.rb
172
182
  - spec/lib/sidekiq_unique_jobs/sidekiq_testing_enabled_spec.rb
173
183
  - spec/lib/sidekiq_unique_jobs/sidekiq_unique_ext_spec.rb
174
184
  - spec/lib/sidekiq_unique_jobs/sidekiq_unique_jobs_spec.rb
185
+ - spec/lib/sidekiq_unique_jobs/timeout_calculator_spec.rb
175
186
  - spec/lib/sidekiq_unique_jobs/unique_args_spec.rb
176
187
  - spec/spec_helper.rb
177
188
  - spec/support/matchers/redis_matchers.rb
178
189
  - spec/support/ruby_meta.rb
179
190
  - spec/support/sidekiq_meta.rb
180
191
  - spec/support/unique_macros.rb
181
- - spec/workers/after_unlock_worker.rb
182
- - spec/workers/after_yield_worker.rb
183
- - spec/workers/another_unique_worker.rb
184
- - spec/workers/before_yield_worker.rb
185
- - spec/workers/expiring_worker.rb
186
- - spec/workers/inline_expiration_worker.rb
187
- - spec/workers/inline_unlock_order_worker.rb
188
- - spec/workers/inline_worker.rb
189
- - spec/workers/just_a_worker.rb
190
- - spec/workers/main_job.rb
191
- - spec/workers/my_unique_worker.rb
192
- - spec/workers/my_worker.rb
193
- - spec/workers/plain_class.rb
194
- - spec/workers/queue_worker.rb
195
- - spec/workers/queue_worker_with_filter_method.rb
196
- - spec/workers/queue_worker_with_filter_proc.rb
197
- - spec/workers/run_lock_with_retries_worker.rb
198
- - spec/workers/run_lock_worker.rb
199
- - spec/workers/test_class.rb
200
- - spec/workers/unique_job_with_filter_method.rb
201
- - spec/workers/unique_on_all_queues_worker.rb
202
- - spec/workers/unique_worker.rb
203
- - spec/workers/while_executing_worker.rb
204
192
  homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
205
193
  licenses:
206
194
  - LGPL-3.0
@@ -1,44 +0,0 @@
1
- module SidekiqUniqueJobs
2
- module Lock
3
- class TimeCalculator
4
- def self.for_item(item)
5
- new(item)
6
- end
7
-
8
- def initialize(item)
9
- @item = item
10
- end
11
-
12
- def seconds
13
- time_until_scheduled + unique_expiration
14
- end
15
-
16
- def time_until_scheduled
17
- scheduled = item['at'.freeze]
18
- return 0 unless scheduled
19
- (Time.at(scheduled) - Time.now.utc).to_i
20
- end
21
-
22
- def unique_expiration
23
- @unique_expiration ||=
24
- (
25
- worker_class_unique_expiration ||
26
- SidekiqUniqueJobs.config.default_expiration
27
- ).to_i
28
- end
29
-
30
- def worker_class_unique_expiration
31
- return unless worker_class.respond_to?(:get_sidekiq_options)
32
- worker_class.get_sidekiq_options['unique_expiration'.freeze]
33
- end
34
-
35
- def worker_class
36
- @worker_class ||= SidekiqUniqueJobs.worker_class_constantize(item['class'.freeze])
37
- end
38
-
39
- private
40
-
41
- attr_reader :item
42
- end
43
- end
44
- end