sidekiq-rate-limiter 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: eed802823e01b40545973fe5e2ddd21c5fa85002
4
- data.tar.gz: 33ffa14b502ca8872d1573752c0e3eab5fc9799e
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzYyZTNjZTE0YjQzMjQzNzMzZWJlOWU3Y2VkY2ZhNmVlYzQxZTQ1Ng==
5
+ data.tar.gz: !binary |-
6
+ ZjA1MjIyNzEzNzU0NWRkMzMxMzE2YWJkZWZiODM5YmY3MTM2MzY4Yg==
5
7
  SHA512:
6
- metadata.gz: ae5a1738821693e8a9bde19b9495cdbf4e87fd9ec7d20457460ec42a76c327cac522db118032178e833b2c83ec7328b89d0f75d19bac2f0fd6c34c0d4bbd30a3
7
- data.tar.gz: 79e48fc5d5b222bdb3e1bc0cedb0b4a9b32372508ef284b4f246fd8c235c5cbaedf1d80f3d9e9048241bbcf2e3f3ade04756284a8169e6d4f49f508d30706e7a
8
+ metadata.gz: !binary |-
9
+ MzdmZTI5NThhY2VhY2MxNmFlMTg5NGUwNjFjM2ZkZjA3ZDQ5NjQ4NTY0MTA2
10
+ MTc0YTEwMDFjODA1Y2Y2MDBmNDQwNGM1MTc5OTE3ZmRiNWQzN2E2ZjBiMGEw
11
+ NDQ1MzA3NTQ1MjdmYjdkMjA4OTY5OGM0NjU4OWMwNDA4MDkzNGI=
12
+ data.tar.gz: !binary |-
13
+ ZWZlNzNhOTg0MzRkZmYyYWYzM2U2ZDhlMzgwMjQ0MmJlNjQ5NzdkOTMwNWNh
14
+ NmMyOTBmNTMwNzQ4NWUwZmRmOWY3NmNhM2E5ZjMzNmZiMmQyYWNhMmE4YmQ3
15
+ YjNjYjMxNDRmZGFkZWIxOTgxNWVjYmEzOGZkOWNlYmVlZjVjNDQ=
data/.gitignore CHANGED
@@ -5,3 +5,7 @@ pkg/
5
5
  coverage/
6
6
  *.swp
7
7
  spec/support/redis/
8
+ dump.rdb
9
+ .pryrc
10
+ .byebug_history
11
+ *.gemfile.lock
data/.simplecov CHANGED
@@ -1,12 +1,6 @@
1
- unless ENV['COVERAGE'] == 'false'
2
- require 'simplecov-rcov'
1
+ require 'coveralls'
3
2
 
4
- class SimpleCov::Formatter::MergedFormatter
5
- def format(result)
6
- SimpleCov::Formatter::HTMLFormatter.new.format(result)
7
- SimpleCov::Formatter::RcovFormatter.new.format(result)
8
- end
9
- end
10
-
11
- SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
3
+ Coveralls.wear! do
4
+ add_filter "vendor"
5
+ add_filter "spec"
12
6
  end
@@ -1,4 +1,20 @@
1
1
  language: ruby
2
+ cache: bundler
3
+ sudo: false
2
4
  rvm:
3
- - 2.0.0
4
- - 1.9.3
5
+ - 2.3.0
6
+ - 2.2.4
7
+ - 2.1.8
8
+
9
+ gemfile:
10
+ - 'gemfiles/sidekiq_2.gemfile'
11
+ - 'gemfiles/sidekiq_3.gemfile'
12
+ - 'gemfiles/sidekiq_4.gemfile'
13
+
14
+ deploy:
15
+ provider: rubygems
16
+ api_key:
17
+ secure: "VX48kpd9UySMWSDMwjxaNZy14RW1usU7eFLGNeohjCzxUsCywn+mS5/IZHl56vDXWJp7JwnboDiIa74hGV86PcSEM7kr+DAZO33iCazMNTpoWDiH1iJfj0jZbO2rOvx0rGI9fGYcC9xfyKQ37hVb13Eo0bnKa0YX30HArnx7EFo="
18
+ on:
19
+ tags: true
20
+ all_branches: true
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
  gemspec
data/README.md CHANGED
@@ -1,13 +1,16 @@
1
1
  sidekiq-rate-limiter
2
2
  ====================
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/enova/sidekiq-rate-limiter.png)](http://travis-ci.org/enova/sidekiq-rate-limiter)
4
+ [![Gem Version](https://badge.fury.io/rb/sidekiq-rate-limiter.svg)](https://rubygems.org/gems/sidekiq-rate-limiter)
5
+ [![Build Status](https://secure.travis-ci.org/enova/sidekiq-rate-limiter.svg?branch=master)](http://travis-ci.org/enova/sidekiq-rate-limiter)
6
+ [![Coverage Status](https://coveralls.io/repos/github/enova/sidekiq-rate-limiter/badge.svg?branch=master)](https://coveralls.io/github/enova/sidekiq-rate-limiter?branch=master)
7
+ [![Dependency Status](https://gemnasium.com/enova/sidekiq-rate-limiter.svg)](https://gemnasium.com/enova/sidekiq-rate-limiter)
5
8
 
6
9
  Redis-backed, per-worker rate limits for job processing.
7
10
 
8
11
  ## Compatibility
9
12
 
10
- sidekiq-rate-limiter is actively tested against MRI versions 2.0.0 and 1.9.3.
13
+ sidekiq-rate-limiter is actively tested against MRI versions 2.1, 2.2, and 2.3.
11
14
 
12
15
  sidekiq-rate-limiter works by using a custom fetch class, the class responsible
13
16
  for pulling work from the queue stored in redis. Consequently you'll want to be
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'sidekiq', '~> 2.0'
4
+
5
+ gemspec path: '../'
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'sidekiq', '~> 3.0'
4
+
5
+ gemspec path: '../'
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'sidekiq', '~> 4.0'
4
+
5
+ gemspec path: '../'
@@ -1,4 +1,5 @@
1
- require 'celluloid'
1
+ require 'sidekiq'
2
+ require 'celluloid' if Sidekiq::VERSION < "4"
2
3
  require 'sidekiq/fetch'
3
4
  require 'redis_rate_limiter'
4
5
 
@@ -12,7 +13,7 @@ module Sidekiq::RateLimiter
12
13
  end
13
14
 
14
15
  def limit(work)
15
- message = JSON.parse(work.message) rescue {}
16
+ message = JSON.parse(work.respond_to?(:message) ? work.message : work.job) rescue {}
16
17
 
17
18
  args = message['args']
18
19
  klass = message['class']
@@ -33,7 +34,7 @@ module Sidekiq::RateLimiter
33
34
  Sidekiq.redis do |conn|
34
35
  lim = Limit.new(conn, options)
35
36
  if lim.exceeded?(klass)
36
- conn.lpush("queue:#{work.queue_name}", work.message)
37
+ conn.lpush("queue:#{work.queue_name}", work.respond_to?(:message) ? work.message : work.job)
37
38
  nil
38
39
  else
39
40
  lim.add(klass)
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module RateLimiter
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.license = 'MIT'
9
9
  s.version = Sidekiq::RateLimiter::VERSION
10
10
  s.platform = Gem::Platform::RUBY
11
- s.authors = ["Blake Thomas", "Enova"]
11
+ s.authors = ["Docady", "Blake Thomas", "Enova"]
12
12
  s.email = ["bwthomas@gmail.com"]
13
13
  s.homepage = "https://github.com/enova/sidekiq-rate-limiter"
14
14
  s.summary = %q{Redis-backed, per-worker rate limits for job processing}
@@ -21,12 +21,12 @@ Gem::Specification.new do |s|
21
21
  s.require_paths = ["lib"]
22
22
 
23
23
  s.add_development_dependency "pry"
24
+ s.add_development_dependency "pry-byebug"
24
25
  s.add_development_dependency "rake"
25
- s.add_development_dependency "rspec"
26
- s.add_development_dependency "simplecov"
27
- s.add_development_dependency "simplecov-rcov"
26
+ s.add_development_dependency "rspec", '~> 3.4'
27
+ s.add_development_dependency "coveralls", '~> 0.8'
28
28
 
29
29
  s.add_dependency "redis"
30
- s.add_dependency "sidekiq", ">= 2.0", "< 4.0"
30
+ s.add_dependency "sidekiq", ">= 2.0", "< 5.0"
31
31
  s.add_dependency "redis_rate_limiter"
32
32
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'sidekiq'
3
3
  require 'sidekiq/api'
4
4
 
5
- describe Sidekiq::RateLimiter::Fetch do
5
+ RSpec.describe Sidekiq::RateLimiter::Fetch do
6
6
  before(:all) do
7
7
  class Job
8
8
  include Sidekiq::Worker
@@ -36,48 +36,58 @@ describe Sidekiq::RateLimiter::Fetch do
36
36
  let(:redis_class) { Sidekiq.redis { |conn| conn.class } }
37
37
 
38
38
  it 'should inherit from Sidekiq::BasicFetch' do
39
- described_class.should < Sidekiq::BasicFetch
39
+ expect(described_class).to be < Sidekiq::BasicFetch
40
40
  end
41
41
 
42
42
  it 'should retrieve work with strict setting' do
43
+ timeout =
44
+ if defined? Sidekiq::BasicFetch::TIMEOUT
45
+ Sidekiq::BasicFetch::TIMEOUT
46
+ else
47
+ Sidekiq::Fetcher::TIMEOUT
48
+ end
49
+
43
50
  fetch = described_class.new options.merge(:strict => true)
44
- fetch.queues_cmd.should eql(["queue:#{queue}", "queue:#{another_queue}", 1])
51
+ expect(fetch.queues_cmd).to eql(["queue:#{queue}", "queue:#{another_queue}", timeout])
45
52
  end
46
53
 
47
54
  it 'should retrieve work', queuing: true do
48
55
  worker.perform_async(*args)
49
- fetch = described_class.new(options)
56
+ fetch = described_class.new(options)
50
57
  work = fetch.retrieve_work
51
- parsed = JSON.parse(work.message)
58
+ parsed = JSON.parse(work.respond_to?(:message) ? work.message : work.job)
52
59
 
53
- work.should_not be_nil
54
- work.queue_name.should eql(queue)
55
- work.acknowledge.should be_nil
60
+ expect(work).not_to be_nil
61
+ expect(work.queue_name).to eql(queue)
62
+ expect(work.acknowledge).to be_nil
56
63
 
57
- parsed.should include(worker.get_sidekiq_options)
58
- parsed.should include("class" => worker.to_s, "args" => args)
59
- parsed.should include("jid", "enqueued_at")
64
+ expect(parsed).to include(worker.get_sidekiq_options)
65
+ expect(parsed).to include("class" => worker.to_s, "args" => args)
66
+ expect(parsed).to include("jid", "enqueued_at")
60
67
 
61
68
  q = Sidekiq::Queue.new(queue)
62
- q.size.should == 0
69
+ expect(q.size).to eq 0
63
70
  end
64
71
 
65
72
  it 'should place rate-limited work at the back of the queue', queuing: true do
66
73
  worker.perform_async(*args)
67
- Sidekiq::RateLimiter::Limit.any_instance.should_receive(:exceeded?).and_return(true)
68
- redis_class.any_instance.should_receive(:lpush).exactly(:once).and_call_original
74
+ expect_any_instance_of(Sidekiq::RateLimiter::Limit).to receive(:exceeded?).and_return(true)
75
+ expect_any_instance_of(redis_class).to receive(:lpush).exactly(:once).and_call_original
69
76
 
70
77
  fetch = described_class.new(options)
71
- fetch.retrieve_work.should be_nil
78
+ expect(fetch.retrieve_work).to be_nil
72
79
 
73
80
  q = Sidekiq::Queue.new(queue)
74
- q.size.should == 1
81
+ expect(q.size).to eq 1
75
82
  end
76
83
 
77
84
  it 'should accept procs for limit, name, and period config keys', queuing: true do
78
85
  proc_worker.perform_async(1,2)
79
86
 
80
- Sidekiq::RateLimiter::Limit.should_receive(:new).with(anything(), {:limit => 2, :interval => 2, :name => "2"}).and_call_original
87
+ expect(Sidekiq::RateLimiter::Limit).
88
+ to receive(:new).
89
+ with(anything(), {:limit => 2, :interval => 2, :name => "2"}).
90
+ and_call_original
81
91
 
82
92
  fetch = described_class.new(options)
83
93
  work = fetch.retrieve_work
@@ -1,20 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sidekiq::RateLimiter, 'server configuration' do
3
+ RSpec.describe Sidekiq::RateLimiter, 'server configuration' do
4
4
  before do
5
- Sidekiq.stub(:server? => true)
5
+ allow(Sidekiq).to receive(:server?).and_return true
6
6
  require 'sidekiq-rate-limiter/server'
7
7
  end
8
8
 
9
9
  it 'should set Sidekiq.options[:fetch] as desired' do
10
10
  Sidekiq.configure_server do |config|
11
- Sidekiq.options[:fetch].should eql(Sidekiq::RateLimiter::Fetch)
11
+ expect(Sidekiq.options[:fetch]).to eql(Sidekiq::RateLimiter::Fetch)
12
12
  end
13
13
  end
14
14
 
15
15
  it 'should inherit from Sidekiq::BasicFetch' do
16
16
  Sidekiq.configure_server do |config|
17
- Sidekiq.options[:fetch].should < Sidekiq::BasicFetch
17
+ expect(Sidekiq.options[:fetch]).to be < Sidekiq::BasicFetch
18
18
  end
19
19
  end
20
20
  end
@@ -45,19 +45,16 @@ Sidekiq.configure_server do |config|
45
45
  end
46
46
  ##
47
47
 
48
- ## Configuring simplecov
49
48
  require 'simplecov'
50
49
 
51
- SimpleCov.start do
52
- add_filter "vendor"
53
- add_filter "spec"
54
- end
55
-
56
50
  require File.expand_path("../../lib/sidekiq-rate-limiter", __FILE__)
57
51
  ##
58
52
 
59
53
  ## Hook to set Sidekiq::Testing mode using rspec tags
60
54
  RSpec.configure do |config|
55
+ config.disable_monkey_patching!
56
+ config.expose_current_running_example_as :example
57
+
61
58
  config.before(:each) do
62
59
  ## Use metadata to determine testing behavior
63
60
  ## for queuing.
metadata CHANGED
@@ -1,132 +1,133 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-rate-limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
+ - Docady
7
8
  - Blake Thomas
8
9
  - Enova
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-05-30 00:00:00.000000000 Z
13
+ date: 2016-02-15 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: pry
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
- - - '>='
19
+ - - ! '>='
19
20
  - !ruby/object:Gem::Version
20
21
  version: '0'
21
22
  type: :development
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
- - - '>='
26
+ - - ! '>='
26
27
  - !ruby/object:Gem::Version
27
28
  version: '0'
28
29
  - !ruby/object:Gem::Dependency
29
- name: rake
30
+ name: pry-byebug
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
- - - '>='
33
+ - - ! '>='
33
34
  - !ruby/object:Gem::Version
34
35
  version: '0'
35
36
  type: :development
36
37
  prerelease: false
37
38
  version_requirements: !ruby/object:Gem::Requirement
38
39
  requirements:
39
- - - '>='
40
+ - - ! '>='
40
41
  - !ruby/object:Gem::Version
41
42
  version: '0'
42
43
  - !ruby/object:Gem::Dependency
43
- name: rspec
44
+ name: rake
44
45
  requirement: !ruby/object:Gem::Requirement
45
46
  requirements:
46
- - - '>='
47
+ - - ! '>='
47
48
  - !ruby/object:Gem::Version
48
49
  version: '0'
49
50
  type: :development
50
51
  prerelease: false
51
52
  version_requirements: !ruby/object:Gem::Requirement
52
53
  requirements:
53
- - - '>='
54
+ - - ! '>='
54
55
  - !ruby/object:Gem::Version
55
56
  version: '0'
56
57
  - !ruby/object:Gem::Dependency
57
- name: simplecov
58
+ name: rspec
58
59
  requirement: !ruby/object:Gem::Requirement
59
60
  requirements:
60
- - - '>='
61
+ - - ~>
61
62
  - !ruby/object:Gem::Version
62
- version: '0'
63
+ version: '3.4'
63
64
  type: :development
64
65
  prerelease: false
65
66
  version_requirements: !ruby/object:Gem::Requirement
66
67
  requirements:
67
- - - '>='
68
+ - - ~>
68
69
  - !ruby/object:Gem::Version
69
- version: '0'
70
+ version: '3.4'
70
71
  - !ruby/object:Gem::Dependency
71
- name: simplecov-rcov
72
+ name: coveralls
72
73
  requirement: !ruby/object:Gem::Requirement
73
74
  requirements:
74
- - - '>='
75
+ - - ~>
75
76
  - !ruby/object:Gem::Version
76
- version: '0'
77
+ version: '0.8'
77
78
  type: :development
78
79
  prerelease: false
79
80
  version_requirements: !ruby/object:Gem::Requirement
80
81
  requirements:
81
- - - '>='
82
+ - - ~>
82
83
  - !ruby/object:Gem::Version
83
- version: '0'
84
+ version: '0.8'
84
85
  - !ruby/object:Gem::Dependency
85
86
  name: redis
86
87
  requirement: !ruby/object:Gem::Requirement
87
88
  requirements:
88
- - - '>='
89
+ - - ! '>='
89
90
  - !ruby/object:Gem::Version
90
91
  version: '0'
91
92
  type: :runtime
92
93
  prerelease: false
93
94
  version_requirements: !ruby/object:Gem::Requirement
94
95
  requirements:
95
- - - '>='
96
+ - - ! '>='
96
97
  - !ruby/object:Gem::Version
97
98
  version: '0'
98
99
  - !ruby/object:Gem::Dependency
99
100
  name: sidekiq
100
101
  requirement: !ruby/object:Gem::Requirement
101
102
  requirements:
102
- - - '>='
103
+ - - ! '>='
103
104
  - !ruby/object:Gem::Version
104
105
  version: '2.0'
105
106
  - - <
106
107
  - !ruby/object:Gem::Version
107
- version: '4.0'
108
+ version: '5.0'
108
109
  type: :runtime
109
110
  prerelease: false
110
111
  version_requirements: !ruby/object:Gem::Requirement
111
112
  requirements:
112
- - - '>='
113
+ - - ! '>='
113
114
  - !ruby/object:Gem::Version
114
115
  version: '2.0'
115
116
  - - <
116
117
  - !ruby/object:Gem::Version
117
- version: '4.0'
118
+ version: '5.0'
118
119
  - !ruby/object:Gem::Dependency
119
120
  name: redis_rate_limiter
120
121
  requirement: !ruby/object:Gem::Requirement
121
122
  requirements:
122
- - - '>='
123
+ - - ! '>='
123
124
  - !ruby/object:Gem::Version
124
125
  version: '0'
125
126
  type: :runtime
126
127
  prerelease: false
127
128
  version_requirements: !ruby/object:Gem::Requirement
128
129
  requirements:
129
- - - '>='
130
+ - - ! '>='
130
131
  - !ruby/object:Gem::Version
131
132
  version: '0'
132
133
  description: Redis-backed, per-worker rate limits for job processing
@@ -145,6 +146,9 @@ files:
145
146
  - LICENSE
146
147
  - README.md
147
148
  - Rakefile
149
+ - gemfiles/sidekiq_2.gemfile
150
+ - gemfiles/sidekiq_3.gemfile
151
+ - gemfiles/sidekiq_4.gemfile
148
152
  - lib/sidekiq-rate-limiter.rb
149
153
  - lib/sidekiq-rate-limiter/fetch.rb
150
154
  - lib/sidekiq-rate-limiter/server.rb
@@ -164,22 +168,18 @@ require_paths:
164
168
  - lib
165
169
  required_ruby_version: !ruby/object:Gem::Requirement
166
170
  requirements:
167
- - - '>='
171
+ - - ! '>='
168
172
  - !ruby/object:Gem::Version
169
173
  version: '0'
170
174
  required_rubygems_version: !ruby/object:Gem::Requirement
171
175
  requirements:
172
- - - '>='
176
+ - - ! '>='
173
177
  - !ruby/object:Gem::Version
174
178
  version: '0'
175
179
  requirements: []
176
180
  rubyforge_project: nowarning
177
- rubygems_version: 2.0.14
181
+ rubygems_version: 2.4.5
178
182
  signing_key:
179
183
  specification_version: 4
180
184
  summary: Redis-backed, per-worker rate limits for job processing
181
- test_files:
182
- - spec/sidekiq-rate-limiter/fetch_spec.rb
183
- - spec/sidekiq-rate-limiter/server_spec.rb
184
- - spec/spec_helper.rb
185
- - spec/support/redis/.keep
185
+ test_files: []