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.

@@ -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/.gitignore CHANGED
@@ -4,3 +4,5 @@
4
4
  .DS_Store
5
5
 
6
6
  Gemfile.lock
7
+
8
+ .ruby-version
@@ -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
- # notifications:
9
- # irc: "irc.freenode.org#sidekiq"
10
- # email:
11
- # recipients:
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
@@ -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
@@ -1,14 +1,2 @@
1
1
  source 'http://rubygems.org'
2
- gemspec
3
-
4
- group :test do
5
- gem 'simplecov', :require => false
6
- end
7
-
8
- group :development do
9
- gem 'activesupport'
10
- gem 'pry'
11
- gem 'pry-doc'
12
- gem 'pry-stack_explorer'
13
- gem 'pry-debugger'
14
- end
2
+ gemspec
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SidekiqUniqueJobs [![Build Status](https://secure.travis-ci.org/form26/sidekiq-unique-jobs.png)](http://travis-ci.org/form26/sidekiq-unique-jobs)
1
+ # SidekiqUniqueJobs [![Build Status](https://travis-ci.org/form26/sidekiq-unique-jobs.png?branch=master)](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
@@ -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
- md5_arguments = {:class => item['class'], :queue => item['queue'], :args => item['args']}
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 || HASH_KEY_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
- md5_arguments = {:class => item['class'], :queue => item['queue'], :args => item['args']}
14
- hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
15
- Sidekiq.redis {|conn| conn.del(hash) }
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
@@ -1,3 +1,3 @@
1
1
  module SidekiqUniqueJobs
2
- VERSION = "2.3.2"
2
+ VERSION = "2.6.5"
3
3
  end
@@ -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', '>= 2.2.0'
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 'actionmailer', '~> 3'
23
- gem.add_development_dependency 'activerecord', '~> 3'
22
+ gem.add_development_dependency 'activesupport', '~> 3'
23
+ gem.add_development_dependency 'simplecov'
24
24
  end
@@ -3,7 +3,6 @@ if ENV.has_key?("SIMPLECOV")
3
3
  require 'simplecov'
4
4
  SimpleCov.start
5
5
  end
6
- require 'pry'
7
6
  require 'minitest/unit'
8
7
  require 'minitest/pride'
9
8
  require 'minitest/autorun'
@@ -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
- # This spec sometimes fails (unless it's the only spec that runs)
23
- # Not sure why, we tried a wide variety of ways to make sure that
24
- # there aren't side effects between tests and it still happens
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
- md5_arguments = {:class => "TestClient::QueueWorker", :queue => "customqueue", :args => [1, 2]}
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::Middleware::Client::UniqueJobs::HASH_KEY_EXPIRATION
99
+ expected_expires_at = (Time.at(at) - Time.now.utc) + SidekiqUniqueJobs::Config.default_expiration
74
100
 
75
101
  QueueWorker.perform_in(at, 'mike')
76
- md5_arguments = {:class => "TestClient::QueueWorker", :queue => "customqueue", :args => ['mike']}
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.3.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: 2012-09-27 00:00:00.000000000 Z
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.2.0
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.2.0
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: actionmailer
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: activerecord
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: '3'
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: '3'
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: 1.8.23
156
+ rubygems_version: 2.0.2
170
157
  signing_key:
171
- specification_version: 3
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: