resque-rate_limited_queue 1.0.3 → 1.0.4
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 +4 -4
- data/.hound.yml +4 -0
- data/.rubocop.yml +46 -0
- data/Guardfile +16 -0
- data/Rakefile +1 -2
- data/lib/resque-rate_limited_queue/version.rb +1 -1
- data/lib/resque/plugins/rate_limited_queue/apis/evernote_queue.rb +1 -0
- data/resque-rate_limited_queue.gemspec +27 -24
- data/spec/apis/angellist_queue_spec.rb +1 -1
- data/spec/apis/evernote_queue_spec.rb +22 -2
- data/spec/apis/twitter_queue_spec.rb +1 -1
- data/spec/rate_limited_un_pause_spec.rb +0 -1
- data/spec/spec_helper.rb +1 -1
- metadata +95 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cab3ff531eddf3677d1dce33e4d8d0a4dc9d515
|
4
|
+
data.tar.gz: 2b916b8dd1515d1fe533ae20115bf45f05d1985a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a33bc20ca9ddb4424c0728dbba292b50df89167697240e2a3edb253ba47dc4a4f5a4eb54fe6b5b38053bb6f0b9f1242007b5aff7aeb41493ff728245ecbd790
|
7
|
+
data.tar.gz: 5bdf3b1ebd1d2860facd9d2630ca79a3cd94f28ca1104430f84c8a4b09c881ba203789db738ea8ae5bb06e6562fb15e6161050026abab739b3ae200388dc3048
|
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
AllCops:
|
3
|
+
Exclude:
|
4
|
+
- 'tmp/**/*'
|
5
|
+
- 'coverage/**/*'
|
6
|
+
- 'spec/dummy/**/*'
|
7
|
+
|
8
|
+
#-------------------------------------------------------------------------------
|
9
|
+
# Project standards
|
10
|
+
#-------------------------------------------------------------------------------
|
11
|
+
StringLiterals:
|
12
|
+
EnforcedStyle: single_quotes
|
13
|
+
Enabled: true
|
14
|
+
|
15
|
+
DotPosition:
|
16
|
+
Description: 'Checks the position of the dot in multi-line method calls.'
|
17
|
+
EnforcedStyle: leading
|
18
|
+
Enabled: true
|
19
|
+
|
20
|
+
Documentation:
|
21
|
+
Description: 'Document classes and non-namespace modules.'
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
FileName:
|
25
|
+
Description: 'Use snake_case for source file names.'
|
26
|
+
Enabled: true
|
27
|
+
|
28
|
+
Style/SymbolArray:
|
29
|
+
Description: 'Use %i or %I for arrays of symbols.'
|
30
|
+
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-i'
|
31
|
+
Enabled: false # Only available in Ruby 2.0+
|
32
|
+
|
33
|
+
Style/ExtraSpacing:
|
34
|
+
Description: 'Do not use unnecessary spacing.'
|
35
|
+
Enabled: true
|
36
|
+
|
37
|
+
Lint/LiteralInInterpolation:
|
38
|
+
Description: 'Avoid interpolating literals in strings'
|
39
|
+
AutoCorrect: true
|
40
|
+
|
41
|
+
#-------------------------------------------------------------------------------
|
42
|
+
# These rules have been relaxed because of existing code
|
43
|
+
# We should tighten these up over time
|
44
|
+
#-------------------------------------------------------------------------------
|
45
|
+
LineLength:
|
46
|
+
Max: 166 # project standard is 120
|
data/Guardfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
guard :rubocop do
|
2
|
+
watch(/.+\.rb$/)
|
3
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
4
|
+
end
|
5
|
+
|
6
|
+
guard(
|
7
|
+
:rspec,
|
8
|
+
all_after_pass: true,
|
9
|
+
all_on_start: true,
|
10
|
+
cmd: 'NO_SIMPLECOV=true bundle exec rspec --fail-fast --format documentation'
|
11
|
+
) do
|
12
|
+
watch(%r{spec/.+_spec\.rb$})
|
13
|
+
watch(%r{lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
14
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
15
|
+
watch(%r{^spec/support/.+\.rb$}) { 'spec' }
|
16
|
+
end
|
data/Rakefile
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -9,6 +9,7 @@ module Resque
|
|
9
9
|
def self.perform(klass, *params)
|
10
10
|
super
|
11
11
|
rescue Evernote::EDAM::Error::EDAMSystemException => e
|
12
|
+
raise unless e.errorCode == Evernote::EDAM::Error::EDAMErrorCode::RATE_LIMIT_REACHED
|
12
13
|
pause_until(Time.now + 60 * e.rateLimitDuration.seconds)
|
13
14
|
rate_limited_requeue(self, klass, *params)
|
14
15
|
end
|
@@ -4,37 +4,40 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'resque-rate_limited_queue/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'resque-rate_limited_queue'
|
8
8
|
spec.version = RateLimitedQueue::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
9
|
+
spec.authors = ['Greg Dowling']
|
10
|
+
spec.email = ['mail@greddowling.com']
|
11
|
+
spec.summary = 'A Resque plugin to help manage jobs that use rate limited apis, pausing when you hit the limits and restarting later.'
|
12
|
+
spec.description = 'A Resque plugin which allows you to create dedicated queues for jobs that use rate limited apis.
|
13
13
|
These queues will pause when one of the jobs hits a rate limit, and unpause after a suitable time period.
|
14
14
|
The rate_limited_queue can be used directly, and just requires catching the rate limit exception and pausing the
|
15
15
|
queue. There are also additional queues provided that already include the pause/rety logic for twitter, angelist
|
16
|
-
and evernote; these allow you to support rate limited apis with minimal changes.
|
16
|
+
and evernote; these allow you to support rate limited apis with minimal changes.'
|
17
17
|
|
18
|
-
spec.homepage =
|
19
|
-
spec.license =
|
18
|
+
spec.homepage = 'http://github.com/pavoni/resque-rate-limited-queue'
|
19
|
+
spec.license = 'MIT'
|
20
20
|
|
21
21
|
spec.files = `git ls-files -z`.split("\x0")
|
22
22
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
|
-
spec.require_paths = [
|
25
|
-
|
26
|
-
spec.add_dependency
|
27
|
-
spec.add_dependency
|
28
|
-
|
29
|
-
spec.add_dependency
|
30
|
-
spec.add_dependency
|
31
|
-
spec.add_dependency
|
32
|
-
|
33
|
-
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
37
|
-
spec.add_development_dependency
|
38
|
-
|
39
|
-
|
24
|
+
spec.require_paths = ['lib']
|
25
|
+
|
26
|
+
spec.add_dependency 'resque', '~> 1.9', '>= 1.9.10'
|
27
|
+
spec.add_dependency 'redis-mutex', '~> 4.0', '>= 4.0.0'
|
28
|
+
|
29
|
+
spec.add_dependency 'angellist_api', '~> 1.0', '>= 1.0.7'
|
30
|
+
spec.add_dependency 'evernote-thrift', '~> 1.25', '>= 1.25.1'
|
31
|
+
spec.add_dependency 'twitter', '~> 5.11', '>= 5.11.0'
|
32
|
+
|
33
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
34
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
35
|
+
spec.add_development_dependency 'rspec', '~> 2.6'
|
36
|
+
spec.add_development_dependency 'simplecov', '~> 0.9.1'
|
37
|
+
spec.add_development_dependency 'gem-release', '~> 0.7'
|
38
|
+
spec.add_development_dependency 'guard', '~> 2.12'
|
39
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.1', '>= 4.1.1'
|
40
|
+
spec.add_development_dependency 'guard-rubocop', '~> 1.2'
|
41
|
+
spec.add_development_dependency 'parser', '~> 2.2.2.5' # To avoid Rubocop parser warnings
|
42
|
+
spec.add_development_dependency 'rubocop', '~> 0.32'
|
40
43
|
end
|
@@ -9,7 +9,17 @@ end
|
|
9
9
|
|
10
10
|
class RateLimitedTestQueueEn
|
11
11
|
def self.perform(succeed)
|
12
|
-
|
12
|
+
fail(
|
13
|
+
Evernote::EDAM::Error::EDAMSystemException,
|
14
|
+
errorCode: Evernote::EDAM::Error::EDAMErrorCode::RATE_LIMIT_REACHED,
|
15
|
+
rateLimitDuration: RateLimitDuration
|
16
|
+
) unless succeed
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class RateLimitedTestQueueOther
|
21
|
+
def self.perform
|
22
|
+
fail(Evernote::EDAM::Error::EDAMSystemException)
|
13
23
|
end
|
14
24
|
end
|
15
25
|
|
@@ -51,6 +61,16 @@ describe Resque::Plugins::RateLimitedQueue::EvernoteQueue do
|
|
51
61
|
.enqueue(RateLimitedTestQueueEn, false)
|
52
62
|
end
|
53
63
|
end
|
64
|
+
|
65
|
+
context 'with exception that is not rate limit' do
|
66
|
+
before do
|
67
|
+
Resque::Plugins::RateLimitedQueue::EvernoteQueue.stub(:rate_limited_requeue)
|
68
|
+
end
|
69
|
+
it 'raises the exception when request fails' do
|
70
|
+
expect do
|
71
|
+
Resque::Plugins::RateLimitedQueue::EvernoteQueue.enqueue(RateLimitedTestQueueOther)
|
72
|
+
end.to raise_error Evernote::EDAM::Error::EDAMSystemException
|
73
|
+
end
|
74
|
+
end
|
54
75
|
end
|
55
76
|
end
|
56
|
-
|
data/spec/spec_helper.rb
CHANGED
@@ -9,7 +9,7 @@ require 'simplecov'
|
|
9
9
|
|
10
10
|
SimpleCov.start
|
11
11
|
|
12
|
-
RSpec.configure do |
|
12
|
+
RSpec.configure do |_config|
|
13
13
|
# Use database 15 for testing so we don't accidentally step on your real data.
|
14
14
|
RedisClassy.redis = Redis.new(db: 15)
|
15
15
|
unless RedisClassy.keys.empty?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-rate_limited_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Dowling
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: resque
|
@@ -166,6 +166,96 @@ dependencies:
|
|
166
166
|
- - "~>"
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: 0.9.1
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: gem-release
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - "~>"
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0.7'
|
176
|
+
type: :development
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - "~>"
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0.7'
|
183
|
+
- !ruby/object:Gem::Dependency
|
184
|
+
name: guard
|
185
|
+
requirement: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '2.12'
|
190
|
+
type: :development
|
191
|
+
prerelease: false
|
192
|
+
version_requirements: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - "~>"
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '2.12'
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: guard-rspec
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - "~>"
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '4.1'
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: 4.1.1
|
207
|
+
type: :development
|
208
|
+
prerelease: false
|
209
|
+
version_requirements: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - "~>"
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '4.1'
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: 4.1.1
|
217
|
+
- !ruby/object:Gem::Dependency
|
218
|
+
name: guard-rubocop
|
219
|
+
requirement: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - "~>"
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: '1.2'
|
224
|
+
type: :development
|
225
|
+
prerelease: false
|
226
|
+
version_requirements: !ruby/object:Gem::Requirement
|
227
|
+
requirements:
|
228
|
+
- - "~>"
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: '1.2'
|
231
|
+
- !ruby/object:Gem::Dependency
|
232
|
+
name: parser
|
233
|
+
requirement: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - "~>"
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: 2.2.2.5
|
238
|
+
type: :development
|
239
|
+
prerelease: false
|
240
|
+
version_requirements: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - "~>"
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: 2.2.2.5
|
245
|
+
- !ruby/object:Gem::Dependency
|
246
|
+
name: rubocop
|
247
|
+
requirement: !ruby/object:Gem::Requirement
|
248
|
+
requirements:
|
249
|
+
- - "~>"
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0.32'
|
252
|
+
type: :development
|
253
|
+
prerelease: false
|
254
|
+
version_requirements: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - "~>"
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '0.32'
|
169
259
|
description: |-
|
170
260
|
A Resque plugin which allows you to create dedicated queues for jobs that use rate limited apis.
|
171
261
|
These queues will pause when one of the jobs hits a rate limit, and unpause after a suitable time period.
|
@@ -179,8 +269,11 @@ extensions: []
|
|
179
269
|
extra_rdoc_files: []
|
180
270
|
files:
|
181
271
|
- ".gitignore"
|
272
|
+
- ".hound.yml"
|
182
273
|
- ".rspec"
|
274
|
+
- ".rubocop.yml"
|
183
275
|
- Gemfile
|
276
|
+
- Guardfile
|
184
277
|
- LICENSE.txt
|
185
278
|
- README.md
|
186
279
|
- Rakefile
|
@@ -231,4 +324,3 @@ test_files:
|
|
231
324
|
- spec/rate_limited_queue_spec.rb
|
232
325
|
- spec/rate_limited_un_pause_spec.rb
|
233
326
|
- spec/spec_helper.rb
|
234
|
-
has_rdoc:
|