sidekiq-unique-jobs 2.3.2 → 2.6.5
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 +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +9 -6
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -13
- data/README.md +46 -1
- data/lib/sidekiq-unique-jobs.rb +10 -1
- data/lib/sidekiq-unique-jobs/config.rb +27 -0
- data/lib/sidekiq-unique-jobs/middleware.rb +5 -0
- data/lib/sidekiq-unique-jobs/middleware/client/unique_jobs.rb +3 -6
- data/lib/sidekiq-unique-jobs/middleware/server/unique_jobs.rb +3 -5
- data/lib/sidekiq-unique-jobs/payload_helper.rb +25 -0
- data/lib/sidekiq-unique-jobs/version.rb +1 -1
- data/sidekiq-unique-jobs.gemspec +3 -3
- data/test/helper.rb +0 -1
- data/test/lib/sidekiq/another_test_client.rb +28 -0
- data/test/lib/sidekiq/test_client.rb +48 -23
- metadata +27 -39
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 668f0e7f7a11db5e1ebf8e1d85943911b18c044e
|
4
|
+
data.tar.gz: 337c9f52503823719953a55a38fcae0f8f17a6d5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c0e0c720b227b5eb4b574aaf6064bf27f97e6e79faa253287df3d012bad2248ed098e341379cf9a34f20ba5f744e4f9bdd1dd3dcac79afd995644ce8be185311
|
7
|
+
data.tar.gz: 5a14117bed073f1e222eb44ee86591ce82dcb4660723bca1a138cfc9f45d9e208b47fafc5d454f29ec23d5756933487a83e6471dd6589590b21bb4241d56135f
|
data/.travis.yml
CHANGED
@@ -2,14 +2,17 @@ language: ruby
|
|
2
2
|
rvm:
|
3
3
|
- 1.9.3
|
4
4
|
- jruby-19mode
|
5
|
+
- rbx-19mode
|
6
|
+
- 2.0.0
|
5
7
|
branches:
|
6
8
|
only:
|
7
9
|
- master
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# - sidekiq@librelist.org
|
10
|
+
notifications:
|
11
|
+
email:
|
12
|
+
recipients:
|
13
|
+
- mikael@zoolutions.se
|
13
14
|
matrix:
|
14
15
|
allow_failures:
|
15
|
-
- rvm: jruby-19mode
|
16
|
+
- rvm: jruby-19mode
|
17
|
+
- rvm: rbx-19mode
|
18
|
+
- rvm: 2.0.0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## v2.6.5
|
2
|
+
- via @sax - possibility to set which arguments should be counted as unique - https://github.com/form26/sidekiq-unique-jobs/pull/12
|
3
|
+
- via @eduardosasso - possibility to set which arguments should be counted as unique - https://github.com/form26/sidekiq-unique-jobs/pull/11
|
4
|
+
- via @KensoDev - configuration of default expiration - https://github.com/form26/sidekiq-unique-jobs/pull/9
|
5
|
+
|
1
6
|
## v2.1.0
|
2
7
|
|
3
8
|
Extracted the unique jobs portion from sidekiq main repo since @mperham dropped support for it.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# SidekiqUniqueJobs [](https://travis-ci.org/form26/sidekiq-unique-jobs)
|
2
2
|
|
3
3
|
The missing unique jobs for sidekiq
|
4
4
|
|
@@ -32,6 +32,45 @@ sidekiq_options unique: true, unique_job_expiration: 120 * 60 # 2 hours
|
|
32
32
|
|
33
33
|
Requiring the gem in your gemfile should be sufficient to enable unique jobs.
|
34
34
|
|
35
|
+
### Finer Control over Uniqueness
|
36
|
+
|
37
|
+
Sometimes it is desired to have a finer control over which arguments are used in determining uniqueness of the job, and others may be _transient_. For this use-case, you need to
|
38
|
+
set `SidekiqUniqueJobs::Config.unique_args_enabled` to true in an initializer, and then defined either `unique_args` method, or a ruby proc.
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
SidekiqUniqueJobs::Config.unique_args_enabled = true
|
42
|
+
```
|
43
|
+
|
44
|
+
The method or the proc can return a modified version of args without the transient arguments included, as shown below:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
class UniqueJobWithFilterMethod
|
48
|
+
include Sidekiq::Worker
|
49
|
+
sidekiq_options unique: true,
|
50
|
+
unique_args: :unique_args
|
51
|
+
|
52
|
+
def self.unique_args(name, id, options)
|
53
|
+
[ name, options[:type] ]
|
54
|
+
end
|
55
|
+
|
56
|
+
...
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
class UniqueJobWithFilterProc
|
61
|
+
include Sidekiq::Worker
|
62
|
+
sidekiq_options unique: true,
|
63
|
+
unique_args: ->(args) { [ args.first ] }
|
64
|
+
|
65
|
+
...
|
66
|
+
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
Note that objects passed into workers are converted to JSON *after* running through client middleware. In server
|
71
|
+
middleware, the JSON is passed directly to the worker `#perform` method. So, you may run into issues where the
|
72
|
+
arguments are different when enqueuing than they are when performing. Your `unique_args` method may need to
|
73
|
+
account for this.
|
35
74
|
|
36
75
|
## Contributing
|
37
76
|
|
@@ -40,3 +79,9 @@ Requiring the gem in your gemfile should be sufficient to enable unique jobs.
|
|
40
79
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
41
80
|
4. Push to the branch (`git push origin my-new-feature`)
|
42
81
|
5. Create new Pull Request
|
82
|
+
|
83
|
+
## Contributors
|
84
|
+
|
85
|
+
- @sax
|
86
|
+
- @eduardosasso
|
87
|
+
- @KensoDev
|
data/lib/sidekiq-unique-jobs.rb
CHANGED
@@ -1,2 +1,11 @@
|
|
1
|
+
require 'yaml' if RUBY_VERSION.include?('2.0.0')
|
1
2
|
require 'sidekiq-unique-jobs/middleware'
|
2
|
-
require "sidekiq-unique-jobs/version"
|
3
|
+
require "sidekiq-unique-jobs/version"
|
4
|
+
require "sidekiq-unique-jobs/config"
|
5
|
+
require "sidekiq-unique-jobs/payload_helper"
|
6
|
+
|
7
|
+
module SidekiqUniqueJobs
|
8
|
+
def self.config
|
9
|
+
SidekiqUniqueJobs::Config
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module SidekiqUniqueJobs
|
2
|
+
class Config
|
3
|
+
def self.unique_prefix=(prefix)
|
4
|
+
@unique_prefix = prefix
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.unique_prefix
|
8
|
+
@unique_prefix || "sidekiq_unique"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.unique_args_enabled=(enabled)
|
12
|
+
@unique_args_enabled = enabled
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.unique_args_enabled?
|
16
|
+
@unique_args_enabled || false
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.default_expiration=(expiration)
|
20
|
+
@expiration = expiration
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.default_expiration
|
24
|
+
@expiration || 30 * 60
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -5,6 +5,11 @@ Sidekiq.configure_server do |config|
|
|
5
5
|
require 'sidekiq-unique-jobs/middleware/server/unique_jobs'
|
6
6
|
chain.add SidekiqUniqueJobs::Middleware::Server::UniqueJobs
|
7
7
|
end
|
8
|
+
config.client_middleware do |chain|
|
9
|
+
require 'sidekiq-unique-jobs/middleware/client/unique_jobs'
|
10
|
+
chain.add SidekiqUniqueJobs::Middleware::Client::UniqueJobs
|
11
|
+
end
|
12
|
+
|
8
13
|
end
|
9
14
|
|
10
15
|
Sidekiq.configure_client do |config|
|
@@ -4,17 +4,14 @@ module SidekiqUniqueJobs
|
|
4
4
|
module Middleware
|
5
5
|
module Client
|
6
6
|
class UniqueJobs
|
7
|
-
HASH_KEY_EXPIRATION = 30 * 60
|
8
|
-
|
9
7
|
def call(worker_class, item, queue)
|
10
8
|
|
11
|
-
enabled = worker_class.get_sidekiq_options['unique']
|
9
|
+
enabled = worker_class.get_sidekiq_options['unique'] || item['unique']
|
12
10
|
unique_job_expiration = worker_class.get_sidekiq_options['unique_job_expiration']
|
13
11
|
|
14
12
|
if enabled
|
15
13
|
|
16
|
-
|
17
|
-
payload_hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
|
14
|
+
payload_hash = SidekiqUniqueJobs::PayloadHelper.get_payload(item['class'], item['queue'], item['args'])
|
18
15
|
|
19
16
|
unique = false
|
20
17
|
|
@@ -25,7 +22,7 @@ module SidekiqUniqueJobs
|
|
25
22
|
if conn.get(payload_hash)
|
26
23
|
conn.unwatch
|
27
24
|
else
|
28
|
-
expires_at = unique_job_expiration ||
|
25
|
+
expires_at = unique_job_expiration || SidekiqUniqueJobs::Config.default_expiration
|
29
26
|
expires_at = ((Time.at(item['at']) - Time.now.utc) + expires_at).to_i if item['at']
|
30
27
|
|
31
28
|
unique = conn.multi do
|
@@ -5,14 +5,12 @@ module SidekiqUniqueJobs
|
|
5
5
|
module Server
|
6
6
|
class UniqueJobs
|
7
7
|
def call(*args)
|
8
|
-
logger.info("About to process a job with args #{args.inspect}")
|
9
8
|
yield
|
10
|
-
logger.info("Done processing a job with args #{args.inspect}")
|
11
9
|
ensure
|
12
10
|
item = args[1]
|
13
|
-
|
14
|
-
|
15
|
-
Sidekiq.redis {|conn| conn.del(
|
11
|
+
payload_hash = SidekiqUniqueJobs::PayloadHelper.get_payload(item['class'], item['queue'], item['args'])
|
12
|
+
|
13
|
+
Sidekiq.redis {|conn| conn.del(payload_hash) }
|
16
14
|
end
|
17
15
|
|
18
16
|
protected
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module SidekiqUniqueJobs
|
2
|
+
class PayloadHelper
|
3
|
+
def self.get_payload(klass, queue, *args)
|
4
|
+
args = yield_unique_args(klass, *args) if SidekiqUniqueJobs::Config.unique_args_enabled?
|
5
|
+
md5_arguments = {:class => klass, :queue => queue, :args => args}
|
6
|
+
"#{SidekiqUniqueJobs::Config.unique_prefix}:#{Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.yield_unique_args(klass, args)
|
10
|
+
worker_class = klass.constantize
|
11
|
+
unique_args = worker_class.get_sidekiq_options['unique_args']
|
12
|
+
filtered_args = if unique_args
|
13
|
+
case unique_args
|
14
|
+
when Proc
|
15
|
+
unique_args.call(args)
|
16
|
+
when Symbol
|
17
|
+
worker_class.send(unique_args, *args) if worker_class.respond_to?(unique_args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
filtered_args || args
|
21
|
+
rescue NameError # if we can't instantiate the class, we just fallback to not filtering args
|
22
|
+
args
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/sidekiq-unique-jobs.gemspec
CHANGED
@@ -14,11 +14,11 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.name = "sidekiq-unique-jobs"
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = SidekiqUniqueJobs::VERSION
|
17
|
-
gem.add_dependency 'sidekiq', '
|
17
|
+
gem.add_dependency 'sidekiq', '~> 2.6'
|
18
18
|
gem.add_development_dependency 'minitest', '~> 3'
|
19
19
|
gem.add_development_dependency 'sinatra'
|
20
20
|
gem.add_development_dependency 'slim'
|
21
21
|
gem.add_development_dependency 'rake'
|
22
|
-
gem.add_development_dependency '
|
23
|
-
gem.add_development_dependency '
|
22
|
+
gem.add_development_dependency 'activesupport', '~> 3'
|
23
|
+
gem.add_development_dependency 'simplecov'
|
24
24
|
end
|
data/test/helper.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'sidekiq/worker'
|
3
|
+
require "sidekiq-unique-jobs"
|
4
|
+
require 'sidekiq/scheduled'
|
5
|
+
require 'sidekiq-unique-jobs/middleware/server/unique_jobs'
|
6
|
+
|
7
|
+
class AnotherTestClient < MiniTest::Unit::TestCase
|
8
|
+
describe 'with real redis' do
|
9
|
+
before do
|
10
|
+
Sidekiq.redis = REDIS
|
11
|
+
Sidekiq.redis {|c| c.flushdb }
|
12
|
+
QueueWorker.sidekiq_options :unique => nil, :unique_job_expiration => nil
|
13
|
+
end
|
14
|
+
|
15
|
+
class QueueWorker
|
16
|
+
include Sidekiq::Worker
|
17
|
+
sidekiq_options :queue => 'customqueue'
|
18
|
+
def perform(x)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'does not push duplicate messages when configured for unique only' do
|
23
|
+
QueueWorker.sidekiq_options :unique => true
|
24
|
+
10.times { Sidekiq::Client.push('class' => TestClient::QueueWorker, 'queue' => 'customqueue', 'args' => [1, 2]) }
|
25
|
+
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -19,24 +19,9 @@ class TestClient < MiniTest::Unit::TestCase
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
it 'is able to enqueue after the server middleware completes' do
|
26
|
-
QueueWorker.sidekiq_options :unique => true
|
27
|
-
request_item = {'class' => TestClient::QueueWorker, 'queue' => 'customqueue', 'args' => ["some arg"]}
|
28
|
-
|
29
|
-
Sidekiq::Client.push(request_item.dup)
|
30
|
-
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
31
|
-
|
32
|
-
# Simulate sidekiq processing the job
|
33
|
-
Sidekiq.redis {|c| c.lpop("queue:customqueue")}
|
34
|
-
assert_equal 0, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
35
|
-
|
36
|
-
SidekiqUniqueJobs::Middleware::Server::UniqueJobs.new.call("dummy arg", request_item.dup) {}
|
37
|
-
|
38
|
-
Sidekiq::Client.push(request_item.dup)
|
39
|
-
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
22
|
+
class PlainClass
|
23
|
+
def run(x)
|
24
|
+
end
|
40
25
|
end
|
41
26
|
|
42
27
|
it 'does not push duplicate messages when configured for unique only' do
|
@@ -45,13 +30,17 @@ class TestClient < MiniTest::Unit::TestCase
|
|
45
30
|
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
46
31
|
end
|
47
32
|
|
33
|
+
it 'does not queue duplicates when when calling delay' do
|
34
|
+
10.times { PlainClass.delay(unique: true, queue: 'customqueue').run(1) }
|
35
|
+
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
36
|
+
end
|
37
|
+
|
48
38
|
it 'sets an expiration when provided by sidekiq options' do
|
49
39
|
one_hour_expiration = 60 * 60
|
50
40
|
QueueWorker.sidekiq_options :unique => true, :unique_job_expiration => one_hour_expiration
|
51
41
|
Sidekiq::Client.push('class' => TestClient::QueueWorker, 'queue' => 'customqueue', 'args' => [1, 2])
|
52
42
|
|
53
|
-
|
54
|
-
payload_hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
|
43
|
+
payload_hash = SidekiqUniqueJobs::PayloadHelper.get_payload("TestClient::QueueWorker", "customqueue", [1, 2])
|
55
44
|
actual_expires_at = Sidekiq.redis {|c| c.ttl(payload_hash) }
|
56
45
|
|
57
46
|
assert_in_delta one_hour_expiration, actual_expires_at, 2
|
@@ -63,6 +52,43 @@ class TestClient < MiniTest::Unit::TestCase
|
|
63
52
|
assert_equal 10, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
64
53
|
end
|
65
54
|
|
55
|
+
describe 'when unique_args is defined' do
|
56
|
+
before { SidekiqUniqueJobs::Config.unique_args_enabled = true }
|
57
|
+
after { SidekiqUniqueJobs::Config.unique_args_enabled = false }
|
58
|
+
|
59
|
+
class QueueWorkerWithFilterMethod < QueueWorker
|
60
|
+
sidekiq_options :unique => true, :unique_args => :args_filter
|
61
|
+
|
62
|
+
def self.args_filter(*args)
|
63
|
+
args.first
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class QueueWorkerWithFilterProc < QueueWorker
|
68
|
+
# slightly contrived example of munging args to the worker and removing a random bit.
|
69
|
+
sidekiq_options :unique => true, :unique_args => lambda { |args| a = args.last.dup; a.delete(:random); [ args.first, a ] }
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'does not push duplicate messages based on args filter method' do
|
73
|
+
assert TestClient::QueueWorkerWithFilterMethod.respond_to?(:args_filter)
|
74
|
+
assert_equal :args_filter, TestClient::QueueWorkerWithFilterMethod.get_sidekiq_options['unique_args']
|
75
|
+
|
76
|
+
for i in (0..10).to_a
|
77
|
+
Sidekiq::Client.push('class' => TestClient::QueueWorkerWithFilterMethod, 'queue' => 'customqueue', 'args' => [1, i])
|
78
|
+
end
|
79
|
+
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'does not push duplicate messages based on args filter proc' do
|
83
|
+
assert_kind_of Proc, TestClient::QueueWorkerWithFilterProc.get_sidekiq_options['unique_args']
|
84
|
+
|
85
|
+
10.times do
|
86
|
+
Sidekiq::Client.push('class' => TestClient::QueueWorkerWithFilterProc, 'queue' => 'customqueue', 'args' => [ 1, {:random => rand(), :name => "foobar"} ])
|
87
|
+
end
|
88
|
+
assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
66
92
|
# TODO: If anyone know of a better way to check that the expiration for scheduled
|
67
93
|
# jobs are set around the same time as the scheduled job itself feel free to improve.
|
68
94
|
it 'expires the payload_hash when a scheduled job is scheduled at' do
|
@@ -70,11 +96,10 @@ class TestClient < MiniTest::Unit::TestCase
|
|
70
96
|
QueueWorker.sidekiq_options :unique => true
|
71
97
|
|
72
98
|
at = 15.minutes.from_now
|
73
|
-
expected_expires_at = (Time.at(at) - Time.now.utc) + SidekiqUniqueJobs::
|
99
|
+
expected_expires_at = (Time.at(at) - Time.now.utc) + SidekiqUniqueJobs::Config.default_expiration
|
74
100
|
|
75
101
|
QueueWorker.perform_in(at, 'mike')
|
76
|
-
|
77
|
-
payload_hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
|
102
|
+
payload_hash = SidekiqUniqueJobs::PayloadHelper.get_payload("TestClient::QueueWorker", "customqueue", ['mike'])
|
78
103
|
|
79
104
|
# deconstruct this into a time format we can use to get a decent delta for
|
80
105
|
actual_expires_at = Sidekiq.redis {|c| c.ttl(payload_hash) }
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-unique-jobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.6.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mikael Henriksson
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-03-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sidekiq
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
19
|
+
version: '2.6'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.
|
26
|
+
version: '2.6'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: minitest
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,55 +41,48 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: sinatra
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: slim
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rake
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
84
|
+
name: activesupport
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,27 +90,24 @@ dependencies:
|
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '3'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
98
|
+
name: simplecov
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
103
|
+
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
110
|
+
version: '0'
|
126
111
|
description: The unique jobs that were removed from sidekiq
|
127
112
|
email:
|
128
113
|
- mikael@zoolutions.se
|
@@ -138,39 +123,42 @@ files:
|
|
138
123
|
- README.md
|
139
124
|
- Rakefile
|
140
125
|
- lib/sidekiq-unique-jobs.rb
|
126
|
+
- lib/sidekiq-unique-jobs/config.rb
|
141
127
|
- lib/sidekiq-unique-jobs/middleware.rb
|
142
128
|
- lib/sidekiq-unique-jobs/middleware/client/unique_jobs.rb
|
143
129
|
- lib/sidekiq-unique-jobs/middleware/server/unique_jobs.rb
|
130
|
+
- lib/sidekiq-unique-jobs/payload_helper.rb
|
144
131
|
- lib/sidekiq-unique-jobs/version.rb
|
145
132
|
- sidekiq-unique-jobs.gemspec
|
146
133
|
- test/helper.rb
|
134
|
+
- test/lib/sidekiq/another_test_client.rb
|
147
135
|
- test/lib/sidekiq/test_client.rb
|
148
136
|
homepage: http://mperham.github.com/sidekiq
|
149
137
|
licenses:
|
150
138
|
- LGPL-3.0
|
139
|
+
metadata: {}
|
151
140
|
post_install_message:
|
152
141
|
rdoc_options: []
|
153
142
|
require_paths:
|
154
143
|
- lib
|
155
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
145
|
requirements:
|
158
|
-
- -
|
146
|
+
- - '>='
|
159
147
|
- !ruby/object:Gem::Version
|
160
148
|
version: '0'
|
161
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
150
|
requirements:
|
164
|
-
- -
|
151
|
+
- - '>='
|
165
152
|
- !ruby/object:Gem::Version
|
166
153
|
version: '0'
|
167
154
|
requirements: []
|
168
155
|
rubyforge_project:
|
169
|
-
rubygems_version:
|
156
|
+
rubygems_version: 2.0.2
|
170
157
|
signing_key:
|
171
|
-
specification_version:
|
158
|
+
specification_version: 4
|
172
159
|
summary: The unique jobs that were removed from sidekiq
|
173
160
|
test_files:
|
174
161
|
- test/helper.rb
|
162
|
+
- test/lib/sidekiq/another_test_client.rb
|
175
163
|
- test/lib/sidekiq/test_client.rb
|
176
164
|
has_rdoc:
|