sidekiq-unique-jobs 4.0.9 → 4.0.10

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.

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