sidekiq-rate-limiter 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: []