sidekiq-unique-jobs 4.0.9 → 4.0.10

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10b0a3b898db3bbf29feae82657b62d4dfa5e248
4
- data.tar.gz: b3a13fd8edcc4227478a3927bfa7a005d1bac46b
3
+ metadata.gz: b162c2c7699b7d27a7a0a438cac56a19bce354dd
4
+ data.tar.gz: ecc6bfc490c57b890d08f63bf9a1ea7f7b337def
5
5
  SHA512:
6
- metadata.gz: e7c316aced14d335b51142a5c1f0270f3231458edac5545dda7e95252209f7d45408140d380f071505e0ffce9314ab82aed697064fc9a1d39eccea5925502333
7
- data.tar.gz: f8243f502b22d28a56f7a6c102dee27dc460dbd38dd82b53236759dc3a81b577ca95196be4e4de60f6676c358fea323385f8128b2443779fd5c2b85cf8f4d137
6
+ metadata.gz: 7b76bf584d09f6a1027a8496ded7fca389eb12ae96062b436236a4c309b6b8ad71e8bb82c0728ce27e1547de7f7230124467603d1486fdc11aac649f20ccd66f
7
+ data.tar.gz: c8dcbc4616bbfd5faed3a7968e27bfe0ba113a46fb7b76e9319ab80d46d864d8d5d2fc983e7e30799b2ccffc200f4f10010d2087b5030d69535aff71c70c7803
data/.travis.yml CHANGED
@@ -20,6 +20,7 @@ gemfile:
20
20
  - gemfiles/sidekiq_3.1.gemfile
21
21
  - gemfiles/sidekiq_3.2.gemfile
22
22
  - gemfiles/sidekiq_3.3.gemfile
23
+ - gemfiles/sidekiq_4.0.gemfile
23
24
 
24
25
  notifications:
25
26
  email:
data/Appraisals CHANGED
@@ -21,3 +21,7 @@ end
21
21
  appraise 'sidekiq-3.3' do
22
22
  gem 'sidekiq', '~> 3.3.0'
23
23
  end
24
+
25
+ appraise 'sidekiq-4.0' do
26
+ gem 'sidekiq', '~> 4.0.0'
27
+ end
data/README.md CHANGED
@@ -194,16 +194,15 @@ There are two ways to display and remove keys regarding uniqueness. The console
194
194
  Start the console with the following command `bundle exec jobs console`.
195
195
 
196
196
  #### List Unique Keys
197
- `keys '*', count: 100`
197
+ `keys '*', 100`
198
198
 
199
199
  #### Remove Unique Keys
200
- `del_by '*', count: 100, dry_run: false` the dry_run and count parameters are both required. This is to have some type of protection against clearing out all uniqueness.
200
+ `del '*', 100, false` the dry_run and count parameters are both required. This is to have some type of protection against clearing out all uniqueness.
201
201
 
202
202
  ### Command Line
203
203
 
204
204
  `bundle exec jobs` displays help on how to use the unique jobs command line.
205
205
 
206
-
207
206
  ## Testing
208
207
 
209
208
  To enable the testing for `sidekiq-unique-jobs`, add `require 'sidekiq_unique_jobs/testing'` to your testing helper.
@@ -0,0 +1,19 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "appraisal", "~> 2.0.0"
6
+ gem "rspec-its", :require => false
7
+ gem "rspec-wait", :require => false
8
+ gem "sidekiq", "~> 4.0.0"
9
+
10
+ platforms :mri_22 do
11
+ gem "fasterer", :require => false
12
+ gem "benchmark-ips", :require => false
13
+ gem "pry-byebug", :require => false
14
+ gem "simplecov-json", :require => false
15
+ gem "memory_profiler", :require => false
16
+ gem "codeclimate-test-reporter", :require => false
17
+ end
18
+
19
+ gemspec :path => "../"
@@ -56,7 +56,7 @@ module SidekiqUniqueJobs
56
56
  end
57
57
 
58
58
  def redis_version
59
- @redis_version ||= connection { |c| c.info('server')['redis_version'] }
59
+ @redis_version ||= connection { |c| c.info('server'.freeze)['redis_version'.freeze] }
60
60
  end
61
61
 
62
62
  def connection(redis_pool = nil)
@@ -67,10 +67,6 @@ module SidekiqUniqueJobs
67
67
  end
68
68
  end
69
69
 
70
- def mock_redis
71
- @redis_mock ||= MockRedis.new if defined?(MockRedis)
72
- end
73
-
74
70
  def synchronize(item, redis_pool)
75
71
  Lock::WhileExecuting.synchronize(item, redis_pool) { yield }
76
72
  end
@@ -5,30 +5,33 @@ module SidekiqUniqueJobs
5
5
  desc 'keys PATTERN', 'list all unique keys and their expiry time'
6
6
  option :count, aliases: :c, type: :numeric, default: 1000, desc: 'The max number of keys to return'
7
7
  def keys(pattern)
8
- Util.keys(pattern, count: options[:count])
8
+ Util.keys(pattern, options[:count])
9
9
  end
10
10
 
11
- desc 'del_by PATTERN', 'deletes unique keys from redis by pattern'
11
+ desc 'del PATTERN', 'deletes unique keys from redis by pattern'
12
12
  option :dry_run, aliases: :d, type: :boolean, desc: 'set to false to perform deletion'
13
13
  option :count, aliases: :c, type: :numeric, default: 1000, desc: 'The max number of keys to return'
14
- def del_by(pattern)
15
- Util.del_by(pattern, dry_run: dry_run, count: count)
14
+ def del(pattern)
15
+ Util.del(pattern, count, dry_run)
16
16
  end
17
17
 
18
18
  desc 'drop into a console', 'easy access to helper methods'
19
19
  def console
20
- puts "Use `keys '*', count: 1000 to display the first 1000 unique keys matching '*'"
21
- puts "Use `del '*', count: 1000 to see how many keys would be deleted for the pattern '*'"
22
- puts "Use `del '*', dry_run: false, count: 1000 to delete the first 1000 keys matching '*'"
23
- begin
24
- require 'pry'
25
- Object.include SidekiqUniqueJobs::Util
26
- Pry.start
27
- rescue LoadError
28
- require 'irb'
29
- Object.include SidekiqUniqueJobs::Util
30
- IRB.start
31
- end
20
+ puts "Use `keys '*', 1000 to display the first 1000 unique keys matching '*'"
21
+ puts "Use `del '*', 1000, true (default) to see how many keys would be deleted for the pattern '*'"
22
+ puts "Use `del '*', 1000, false to delete the first 1000 keys matching '*'"
23
+ Object.include SidekiqUniqueJobs::Util
24
+ console_class.start
25
+ end
26
+
27
+ private
28
+
29
+ def console_class
30
+ require 'pry'
31
+ Pry
32
+ rescue LoadError
33
+ require 'irb'
34
+ IRB
32
35
  end
33
36
  end
34
37
  end
@@ -4,36 +4,30 @@ module SidekiqUniqueJobs
4
4
  module Client
5
5
  class Middleware
6
6
  extend Forwardable
7
- def_delegators :SidekiqUniqueJobs, :connection, :config
7
+ def_delegators :SidekiqUniqueJobs, :connection, :config, :worker_class_constantize
8
8
  def_delegators :Sidekiq, :logger
9
9
 
10
10
  include OptionsWithFallback
11
11
 
12
12
  def call(worker_class, item, queue, redis_pool = nil)
13
- @worker_class = SidekiqUniqueJobs.worker_class_constantize(worker_class)
13
+ @worker_class = worker_class_constantize(worker_class)
14
14
  @item = item
15
15
  @queue = queue
16
16
  @redis_pool = redis_pool
17
- yield if ordinary_or_locked?
17
+
18
+ yield if disabled_or_successfully_locked?
18
19
  end
19
20
 
20
21
  private
21
22
 
22
23
  attr_reader :item, :worker_class, :redis_pool, :queue
23
24
 
24
- def ordinary_or_locked?
25
- unique_disabled? || unlockable? || aquire_lock
26
- end
27
-
28
- def unlockable?
29
- !lockable?
30
- end
31
-
32
- def lockable?
33
- lock.respond_to?(:lock)
25
+ def disabled_or_successfully_locked?
26
+ unique_disabled? || aquire_lock
34
27
  end
35
28
 
36
29
  def aquire_lock
30
+ return true unless lock.respond_to?(:lock)
37
31
  locked = lock.lock(:client)
38
32
  warn_about_duplicate(item) unless locked
39
33
  locked
@@ -3,6 +3,8 @@ module SidekiqUniqueJobs
3
3
  class UntilExecuted
4
4
  OK ||= 'OK'.freeze
5
5
 
6
+ include SidekiqUniqueJobs::Unlockable
7
+
6
8
  extend Forwardable
7
9
  def_delegators :Sidekiq, :logger
8
10
 
@@ -25,7 +27,8 @@ module SidekiqUniqueJobs
25
27
  unless [:server, :api, :test].include?(scope)
26
28
  fail ArgumentError, "#{scope} middleware can't #{__method__} #{unique_key}"
27
29
  end
28
- SidekiqUniqueJobs::Unlockable.unlock(unique_key, item[JID_KEY], redis_pool)
30
+
31
+ unlock_by_key(unique_key, item[JID_KEY], redis_pool)
29
32
  end
30
33
 
31
34
  # rubocop:disable MethodLength
@@ -1,17 +1,11 @@
1
1
  require 'sidekiq/api'
2
2
 
3
3
  module Sidekiq
4
- module UnlockMethod
5
- def unlock(item)
6
- SidekiqUniqueJobs::Unlockable.unlock(item['unique_digest'.freeze], item['jid'.freeze])
7
- end
8
- end
9
-
10
4
  class SortedEntry
11
5
  module UniqueExtension
12
6
  def self.included(base)
13
7
  base.class_eval do
14
- include UnlockMethod
8
+ include SidekiqUniqueJobs::Unlockable
15
9
  alias_method :delete_orig, :delete
16
10
  alias_method :delete, :delete_ext
17
11
  alias_method :remove_job_orig, :remove_job
@@ -41,7 +35,7 @@ module Sidekiq
41
35
  module UniqueExtension3_0
42
36
  def self.included(base)
43
37
  base.class_eval do
44
- include UnlockMethod
38
+ include SidekiqUniqueJobs::Unlockable
45
39
  alias_method :delete_orig, :delete
46
40
  alias_method :delete, :delete_ext
47
41
  end
@@ -63,7 +57,7 @@ module Sidekiq
63
57
  module UniqueExtension3_4
64
58
  def self.included(base)
65
59
  base.class_eval do
66
- include UnlockMethod
60
+ include SidekiqUniqueJobs::Unlockable
67
61
  alias_method :delete_orig, :delete
68
62
  alias_method :delete, :delete_ext
69
63
  end
@@ -91,7 +85,7 @@ module Sidekiq
91
85
  module UniqueExtension
92
86
  def self.included(base)
93
87
  base.class_eval do
94
- include UnlockMethod
88
+ include SidekiqUniqueJobs::Unlockable
95
89
  alias_method :delete_orig, :delete
96
90
  alias_method :delete, :delete_ext
97
91
  end
@@ -110,7 +104,7 @@ module Sidekiq
110
104
  module UniqueExtension
111
105
  def self.included(base)
112
106
  base.class_eval do
113
- include UnlockMethod
107
+ include SidekiqUniqueJobs::Unlockable
114
108
  alias_method :clear_orig, :clear
115
109
  alias_method :clear, :clear_ext
116
110
  end
@@ -129,7 +123,7 @@ module Sidekiq
129
123
  module UniqueExtension
130
124
  def self.included(base)
131
125
  base.class_eval do
132
- include UnlockMethod
126
+ include SidekiqUniqueJobs::Unlockable
133
127
  if base.method_defined?(:clear)
134
128
  alias_method :clear_orig, :clear
135
129
  alias_method :clear, :clear_ext
@@ -12,9 +12,9 @@ module Sidekiq
12
12
  worker.jid = job['jid']
13
13
  worker.bid = job['bid'] if worker.respond_to?(:bid=)
14
14
  execute_job(worker, job['args'])
15
- unlock(job['unique_digest'], job['jid']) if Sidekiq::Testing.fake?
15
+ unlock(job) if Sidekiq::Testing.fake?
16
16
  end
17
- end
17
+ end unless Sidekiq::Testing.respond_to?(:server_middleware)
18
18
 
19
19
  # Pop out a single job and perform it
20
20
  def perform_one
@@ -24,15 +24,19 @@ module Sidekiq
24
24
  worker.jid = job['jid']
25
25
  worker.bid = job['bid'] if worker.respond_to?(:bid=)
26
26
  execute_job(worker, job['args'])
27
- unlock(job['unique_digest'], job['jid']) if Sidekiq::Testing.fake?
28
- end
27
+ unlock(job) if Sidekiq::Testing.fake?
28
+ end unless Sidekiq::Testing.respond_to?(:server_middleware)
29
29
 
30
30
  # Clear all jobs for this worker
31
31
  def clear
32
32
  jobs.each do |job|
33
- unlock(job['unique_digest'], job['jid']) if Sidekiq::Testing.fake?
33
+ unlock(job) if Sidekiq::Testing.fake?
34
34
  end
35
- jobs.clear
35
+ # if Sidekiq::VERSION >= '4'
36
+ # Queues.jobs[queue].clear
37
+ # else
38
+ jobs.clear
39
+ # end
36
40
  end
37
41
 
38
42
  def execute_job(worker, args)
@@ -53,10 +57,7 @@ module Sidekiq
53
57
 
54
58
  module Testing
55
59
  def clear_all_ext
56
- Sidekiq.redis do |c|
57
- unique_keys = c.keys("#{SidekiqUniqueJobs.config.unique_prefix}:*")
58
- c.del(*unique_keys) unless unique_keys.empty?
59
- end
60
+ SidekiqUniqueJobs::Util.del('*', 1000, false)
60
61
  clear_all_orig
61
62
  end
62
63
  end
@@ -65,3 +66,4 @@ module Sidekiq
65
66
  include Overrides
66
67
  end
67
68
  end
69
+
@@ -2,25 +2,46 @@ module SidekiqUniqueJobs
2
2
  module Unlockable
3
3
  module_function
4
4
 
5
- # rubocop:disable MethodLength
6
- def unlock(unique_key, jid, redis_pool = nil)
7
- result = Scripts.call(:release_lock, redis_pool,
8
- keys: [unique_key],
9
- argv: [jid])
5
+ def unlock(item)
6
+ unlock_by_key(item[UNIQUE_DIGEST_KEY], item[JID_KEY])
7
+ end
8
+
9
+ def unlock_by_key(unique_key, jid, redis_pool = nil)
10
+ Scripts.call(:release_lock, redis_pool, keys: [unique_key], argv: [jid]) do |result|
11
+ after_unlock(result, __method__)
12
+ end
13
+ end
14
+
15
+ def unlock_by_jid(jid, redis_pool = nil)
16
+ Scripts.call(:release_lock, redis_pool, keys: [unique_key], argv: [jid]) do |result|
17
+ after_unlock(result, __method__)
18
+ end
19
+ end
20
+
21
+ def unlock_by_arguments(worker_class, unique_arguments = {})
22
+ Scripts.call(:release_lock, redis_pool, keys: [unique_key], argv: [jid]) do |result|
23
+ after_unlock(result, __method__)
24
+ end
25
+ end
26
+
27
+ def after_unlock(result, calling_method)
10
28
  case result
11
29
  when 1
12
- Sidekiq.logger.debug { "successfully unlocked #{unique_key}" }
30
+ logger.debug { "successfully unlocked #{unique_key}" }
13
31
  true
14
32
  when 0
15
- Sidekiq.logger.debug { "expiring lock #{unique_key} is not owned by #{jid}" }
33
+ logger.debug { "expiring lock #{unique_key} is not owned by #{jid}" }
16
34
  false
17
35
  when -1
18
- Sidekiq.logger.debug { "#{unique_key} is not a known key" }
36
+ logger.debug { "#{unique_key} is not a known key" }
19
37
  false
20
38
  else
21
- fail "#{__method__} returned an unexpected value (#{result})"
39
+ fail "#{calling_method} returned an unexpected value (#{result})"
22
40
  end
23
41
  end
24
- # rubocop:enable MethodLength
42
+
43
+ def logger
44
+ Sidekiq.logger
45
+ end
25
46
  end
26
47
  end
@@ -2,28 +2,38 @@ module SidekiqUniqueJobs
2
2
  module Util
3
3
  SCAN_PATTERN ||= '*'.freeze
4
4
  DEFAULT_COUNT ||= 1_000
5
+ KEYS_METHOD ||= 'keys'.freeze
6
+ SCAN_METHOD ||= 'scan'.freeze
5
7
 
6
8
  module_function
7
9
 
8
- def keys(pattern = SCAN_PATTERN, count: DEFAULT_COUNT)
9
- scan(pattern, count: count)
10
+ def keys(pattern = SCAN_PATTERN, count = DEFAULT_COUNT)
11
+ send("keys_by_#{redis_keys_method}", pattern, count)
10
12
  end
11
13
 
12
- def del_by(pattern = SCAN_PATTERN, count:, dry_run: true)
14
+ def del(pattern = SCAN_PATTERN, count = 0, dry_run = true)
13
15
  logger.debug { "Deleting keys by: #{pattern}" }
14
- keys, time = timed { scan(pattern, count: count) }
16
+ keys, time = timed { keys(pattern, count) }
15
17
  logger.debug { "#{keys.size} matching keys found in #{time} sec." }
16
18
  keys = dry_run(keys)
17
19
  logger.debug { "#{keys.size} matching keys after postprocessing" }
18
20
  unless dry_run
19
21
  logger.debug { "deleting #{keys}..." }
20
- _, time = timed { del(keys) }
22
+ _, time = timed { batch_delete(keys) }
21
23
  logger.debug { "Deleted in #{time} sec." }
22
24
  end
23
25
  keys.size
24
26
  end
25
27
 
26
- def del(keys)
28
+ def keys_by_scan(pattern, count)
29
+ connection { |conn| conn.scan_each(match: prefix(pattern), count: count).to_a }
30
+ end
31
+
32
+ def keys_by_keys(pattern, count)
33
+ connection { |conn| conn.keys(prefix(pattern)).to_a }
34
+ end
35
+
36
+ def batch_delete(keys)
27
37
  connection do |conn|
28
38
  keys.each_slice(500) do |chunk|
29
39
  conn.pipelined do
@@ -48,10 +58,6 @@ module SidekiqUniqueJobs
48
58
  [result, elapsed]
49
59
  end
50
60
 
51
- def scan(pattern, count: 1000)
52
- connection { |conn| conn.scan_each(match: prefix(pattern), count: count).to_a }
53
- end
54
-
55
61
  def prefix_keys(keys)
56
62
  keys = Array(keys).flatten.compact
57
63
  keys.map { |key| prefix(key) }
@@ -70,6 +76,14 @@ module SidekiqUniqueJobs
70
76
  SidekiqUniqueJobs.connection(&block)
71
77
  end
72
78
 
79
+ def redis_version
80
+ SidekiqUniqueJobs.redis_version
81
+ end
82
+
83
+ def redis_keys_method
84
+ redis_version >= '2.8' ? SCAN_METHOD : KEYS_METHOD
85
+ end
86
+
73
87
  def logger
74
88
  Sidekiq.logger
75
89
  end
@@ -1,3 +1,3 @@
1
1
  module SidekiqUniqueJobs
2
- VERSION = '4.0.9'
2
+ VERSION = '4.0.10'
3
3
  end
@@ -19,7 +19,6 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'thor', '>= 0'
20
20
  gem.add_development_dependency 'rspec', '~> 3.1'
21
21
  gem.add_development_dependency 'rake'
22
- gem.add_development_dependency 'rspec-sidekiq'
23
22
  gem.add_development_dependency 'rubocop'
24
23
  gem.add_development_dependency 'timecop'
25
24
  gem.add_development_dependency 'yard'
@@ -1,6 +1,6 @@
1
1
  class AnotherUniqueJob
2
2
  include Sidekiq::Worker
3
- sidekiq_options queue: :working, retry: 1, backtrace: 10,
3
+ sidekiq_options queue: :working2, retry: 1, backtrace: 10,
4
4
  unique: :until_executed
5
5
 
6
6
  sidekiq_retries_exhausted do |msg|
@@ -12,6 +12,6 @@ class UntilExecutedJob
12
12
  end
13
13
 
14
14
  def after_unlock
15
- fail 'HELL'
15
+ # NO OP
16
16
  end
17
17
  end
@@ -7,6 +7,6 @@ class WhileExecutingJob
7
7
  end
8
8
 
9
9
  def perform(_)
10
- fail 'HELL'
10
+ # NO OP
11
11
  end
12
12
  end
@@ -251,7 +251,7 @@ RSpec.describe SidekiqUniqueJobs::Client::Middleware do
251
251
  let(:queue) { 'default' }
252
252
  context 'when ordinary_or_locked?' do
253
253
  before do
254
- allow(subject).to receive(:ordinary_or_locked?).and_return(false)
254
+ allow(subject).to receive(:disabled_or_successfully_locked?).and_return(false)
255
255
  end
256
256
 
257
257
  it 'returns nil' do
@@ -8,6 +8,13 @@ RSpec.describe 'When Sidekiq::Testing is enabled' do
8
8
  before do
9
9
  Sidekiq.redis = REDIS
10
10
  Sidekiq.redis(&:flushdb)
11
+ Sidekiq::Testing.server_middleware do |chain|
12
+ chain.add SidekiqUniqueJobs::Server::Middleware
13
+ end if Sidekiq::Testing.respond_to?(:server_middleware)
14
+ end
15
+
16
+ after do
17
+ Sidekiq::Testing.server_middleware(&:clear) if Sidekiq::Testing.respond_to?(:server_middleware)
11
18
  end
12
19
 
13
20
  context 'with unique worker' do
@@ -16,11 +23,19 @@ RSpec.describe 'When Sidekiq::Testing is enabled' do
16
23
  expect(UntilExecutedJob.jobs.size).to eq(0)
17
24
  expect(UntilExecutedJob.perform_async(param)).to_not be_nil
18
25
  expect(UntilExecutedJob.jobs.size).to eq(1)
19
- expect(UntilExecutedJob).to have_enqueued_job(param)
20
26
  expect(UntilExecutedJob.perform_async(param)).to be_nil
21
27
  expect(UntilExecutedJob.jobs.size).to eq(1)
22
28
  end
23
29
 
30
+ # it 'does not push duplicate messages', sidekiq_ver: '>= 4' do
31
+ # param = 'work'
32
+ # expect(UntilExecutedJob.jobs.size).to eq(0)
33
+ # expect(UntilExecutedJob.perform_async(param)).to_not be_nil
34
+ # expect(Sidekiq::Queues['working'].size).to eq(1)
35
+ # expect(UntilExecutedJob.perform_async(param)).to be_nil
36
+ # expect(Sidekiq::Queues['working'].size).to eq(1)
37
+ # end
38
+
24
39
  it 'unlocks jobs after draining a worker' do
25
40
  param = 'work'
26
41
  param2 = 'more work'
@@ -78,6 +93,7 @@ RSpec.describe 'When Sidekiq::Testing is enabled' do
78
93
  expect { UntilExecutedJob.clear }.not_to raise_error
79
94
  end
80
95
 
96
+ # it 'unlocks jobs when all workers are cleared', :focus do
81
97
  it 'unlocks jobs when all workers are cleared' do
82
98
  param = 'work'
83
99
  expect(UntilExecutedJob.jobs.size).to eq(0)
@@ -90,8 +106,8 @@ RSpec.describe 'When Sidekiq::Testing is enabled' do
90
106
  expect(UntilExecutedJob.jobs.size).to eq(0)
91
107
  expect(AnotherUniqueJob.jobs.size).to eq(0)
92
108
  UntilExecutedJob.perform_async(param)
93
- AnotherUniqueJob.perform_async(param)
94
109
  expect(UntilExecutedJob.jobs.size).to eq(1)
110
+ AnotherUniqueJob.perform_async(param)
95
111
  expect(AnotherUniqueJob.jobs.size).to eq(1)
96
112
  end
97
113
 
@@ -121,7 +137,6 @@ RSpec.describe 'When Sidekiq::Testing is enabled' do
121
137
  expect(MyJob.jobs.size).to eq(0)
122
138
  MyJob.perform_async(param)
123
139
  expect(MyJob.jobs.size).to eq(1)
124
- expect(MyJob).to have_enqueued_job(param)
125
140
  MyJob.perform_async(param)
126
141
  expect(MyJob.jobs.size).to eq(2)
127
142
  end
@@ -18,18 +18,18 @@ RSpec.describe SidekiqUniqueJobs::Util do
18
18
  describe '.keys' do
19
19
  end
20
20
 
21
- describe '.del_by' do
21
+ describe '.del' do
22
22
  context 'given a key named "keyz" with value "valz"' do
23
23
  before do
24
24
  set('uniquejobs:keyz', 'valz')
25
25
  end
26
26
 
27
27
  it 'deletes the keys by pattern' do
28
- expect(described_class.del_by('*', count: 100, dry_run: false)).to eq(1)
28
+ expect(described_class.del('*', 100, false)).to eq(1)
29
29
  end
30
30
 
31
31
  it 'deletes the keys by pattern' do
32
- expect(described_class.del_by('keyz', count: 100, dry_run: false)).to eq(1)
32
+ expect(described_class.del('keyz', 100, false)).to eq(1)
33
33
  end
34
34
  end
35
35
  end
data/spec/spec_helper.rb CHANGED
@@ -23,19 +23,27 @@ require 'sidekiq-unique-jobs'
23
23
  require 'sidekiq_unique_jobs/testing'
24
24
  require 'timecop'
25
25
 
26
- require 'rspec-sidekiq'
27
26
  require 'sidekiq/simulator'
28
27
 
29
28
  Sidekiq::Testing.disable!
30
29
  Sidekiq.logger.level = "Logger::#{ENV.fetch('LOGLEVEL') { 'error' }.upcase}".constantize
31
30
 
32
31
  require 'sidekiq/redis_connection'
32
+
33
+ begin
34
+ require 'redis-namespace'
35
+ rescue LoadError
36
+ puts 'Redis Namespace unavailable'
37
+ end
38
+
33
39
  REDIS_URL ||= ENV['REDIS_URL'] || 'redis://localhost/15'.freeze
34
40
  REDIS_NAMESPACE ||= 'unique-test'.freeze
35
- REDIS ||= Sidekiq::RedisConnection.create(url: REDIS_URL, namespace: REDIS_NAMESPACE)
41
+ REDIS_OPTIONS ||= { url: REDIS_URL }
42
+ REDIS_OPTIONS.merge!(namespace: REDIS_NAMESPACE) if defined?(Redis::Namespace)
43
+ REDIS ||= Sidekiq::RedisConnection.create(REDIS_OPTIONS)
36
44
 
37
45
  Sidekiq.configure_client do |config|
38
- config.redis = { url: REDIS_URL, namespace: REDIS_NAMESPACE }
46
+ config.redis = REDIS_OPTIONS
39
47
  end
40
48
 
41
49
  Dir[File.join(File.dirname(__FILE__), 'support', '**', '*.rb')].each { |f| require f }
@@ -55,15 +63,4 @@ RSpec.configure do |config|
55
63
  Kernel.srand config.seed
56
64
  end
57
65
 
58
- RSpec::Sidekiq.configure do |config|
59
- # Clears all job queues before each example
60
- config.clear_all_enqueued_jobs = true
61
-
62
- # Whether to use terminal colours when outputting messages
63
- config.enable_terminal_colours = true
64
-
65
- # Warn when jobs are not enqueued to Redis but to a job array
66
- config.warn_when_jobs_not_processed_by_sidekiq = false
67
- end
68
-
69
66
  Dir[File.join(File.dirname(__FILE__), 'jobs', '**', '*.rb')].each { |f| require f }
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.9
4
+ version: 4.0.10
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-11-14 00:00:00.000000000 Z
11
+ date: 2015-12-12 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: rspec-sidekiq
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rubocop
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +138,7 @@ files:
152
138
  - gemfiles/sidekiq_3.1.gemfile
153
139
  - gemfiles/sidekiq_3.2.gemfile
154
140
  - gemfiles/sidekiq_3.3.gemfile
141
+ - gemfiles/sidekiq_4.0.gemfile
155
142
  - gemfiles/sidekiq_develop.gemfile
156
143
  - lib/sidekiq-unique-jobs.rb
157
144
  - lib/sidekiq/simulator.rb
@@ -309,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
309
296
  version: '0'
310
297
  requirements: []
311
298
  rubyforge_project:
312
- rubygems_version: 2.4.8
299
+ rubygems_version: 2.5.0
313
300
  signing_key:
314
301
  specification_version: 4
315
302
  summary: The unique jobs that were removed from sidekiq