sidekiq-unique-jobs 4.0.0 → 4.0.7

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.

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