resque-rate_limited 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'resque/rate_limited'
3
+
4
+ class RateLimitedTestQueue
5
+ end
6
+
7
+ describe Resque::Plugins::RateLimited::UnPause do
8
+ describe 'perform' do
9
+ it 'unpauses the queue' do
10
+ RateLimitedTestQueue.should_receive(:un_pause)
11
+ Resque::Plugins::RateLimited::UnPause.perform(RateLimitedTestQueue)
12
+ end
13
+ end
14
+
15
+ describe 'enqueue' do
16
+ before { Resque.stub(:respond_to?).and_return(true) }
17
+ context 'with no queue defined' do
18
+ it 'does not queue the job' do
19
+ Resque.should_not_receive(:enqueue_at_with_queue)
20
+ Resque::Plugins::RateLimited::UnPause.enqueue(Time.now, RateLimitedTestQueue)
21
+ end
22
+ end
23
+
24
+ context 'with queue defined' do
25
+ before { Resque::Plugins::RateLimited::UnPause.queue = :queue_name }
26
+ it 'queues the job' do
27
+ Resque.should_receive(:enqueue_at_with_queue).with(
28
+ :queue_name,
29
+ nil,
30
+ Resque::Plugins::RateLimited::UnPause,
31
+ RateLimitedTestQueue
32
+ )
33
+
34
+ Resque::Plugins::RateLimited::UnPause.enqueue(nil, RateLimitedTestQueue)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe 'class_from_string' do
40
+ it 'converts unqualified classes' do
41
+ expect(Resque::Plugins::RateLimited::UnPause.class_from_string(RateLimitedTestQueue.to_s))
42
+ .to eq(RateLimitedTestQueue)
43
+ end
44
+ it 'converts qualified classes' do
45
+ expect(Resque::Plugins::RateLimited::UnPause.class_from_string(Resque::Plugins::RateLimited::UnPause.to_s))
46
+ .to eq(Resque::Plugins::RateLimited::UnPause)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'rspec'
5
+ require 'redis-classy'
6
+ require 'redis-mutex'
7
+
8
+ require 'simplecov'
9
+
10
+ SimpleCov.start
11
+
12
+ RSpec.configure do |_config|
13
+ # Use database 15 for testing so we don't accidentally step on your real data.
14
+ RedisClassy.redis = Redis.new(db: 15)
15
+ unless RedisClassy.keys.empty?
16
+ abort '[ERROR]: Redis database 15 not empty! If you are sure, run "rake flushdb" beforehand.'
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,326 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resque-rate_limited
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Greg Dowling
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: resque
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.9.10
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.9'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.9.10
33
+ - !ruby/object:Gem::Dependency
34
+ name: redis-mutex
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 4.0.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 4.0.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: angellist_api
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.0'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.0.7
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.0.7
73
+ - !ruby/object:Gem::Dependency
74
+ name: evernote-thrift
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.25'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.25.1
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.25'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.25.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: twitter
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '5.11'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 5.11.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '5.11'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 5.11.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: rake
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '10'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '10'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rspec
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '2'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '2'
141
+ - !ruby/object:Gem::Dependency
142
+ name: simplecov
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ - !ruby/object:Gem::Dependency
156
+ name: rubocop
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: reek
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '4'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '4'
183
+ - !ruby/object:Gem::Dependency
184
+ name: listen
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '3.0'
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '3.1'
193
+ type: :development
194
+ prerelease: false
195
+ version_requirements: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '3.0'
200
+ - - "<"
201
+ - !ruby/object:Gem::Version
202
+ version: '3.1'
203
+ - !ruby/object:Gem::Dependency
204
+ name: guard
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '2'
210
+ type: :development
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: '2'
217
+ - !ruby/object:Gem::Dependency
218
+ name: guard-rspec
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: '4'
224
+ type: :development
225
+ prerelease: false
226
+ version_requirements: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - "~>"
229
+ - !ruby/object:Gem::Version
230
+ version: '4'
231
+ - !ruby/object:Gem::Dependency
232
+ name: guard-rubocop
233
+ requirement: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '1'
238
+ type: :development
239
+ prerelease: false
240
+ version_requirements: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '1'
245
+ - !ruby/object:Gem::Dependency
246
+ name: gem-release
247
+ requirement: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ type: :development
253
+ prerelease: false
254
+ version_requirements: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ description: |-
260
+ A Resque plugin which allows you to create dedicated queues for jobs that use rate limited apis.
261
+ These queues will pause when one of the jobs hits a rate limit, and unpause after a suitable time period.
262
+ The rate_limited can be used directly, and just requires catching the rate limit exception and pausing the
263
+ queue. There are also additional queues provided that already include the pause/rety logic for twitter, angelist
264
+ and evernote; these allow you to support rate limited apis with minimal changes.
265
+ email:
266
+ - mail@greddowling.com
267
+ executables: []
268
+ extensions: []
269
+ extra_rdoc_files: []
270
+ files:
271
+ - ".gitignore"
272
+ - ".hound.yml"
273
+ - ".rspec"
274
+ - ".rubocop.yml"
275
+ - Gemfile
276
+ - Guardfile
277
+ - LICENSE.txt
278
+ - README.md
279
+ - Rakefile
280
+ - lib/resque-rate_limited/version.rb
281
+ - lib/resque/plugins/rate_limited/apis/angellist_queue.rb
282
+ - lib/resque/plugins/rate_limited/apis/base_api_queue.rb
283
+ - lib/resque/plugins/rate_limited/apis/evernote_queue.rb
284
+ - lib/resque/plugins/rate_limited/apis/twitter_queue.rb
285
+ - lib/resque/plugins/rate_limited/rate_limited.rb
286
+ - lib/resque/plugins/rate_limited/rate_limited_un_pause.rb
287
+ - lib/resque/rate_limited.rb
288
+ - resque-rate_limited.gemspec
289
+ - spec/apis/angellist_queue_spec.rb
290
+ - spec/apis/evernote_queue_spec.rb
291
+ - spec/apis/twitter_queue_spec.rb
292
+ - spec/rate_limited_spec.rb
293
+ - spec/rate_limited_un_pause_spec.rb
294
+ - spec/spec_helper.rb
295
+ homepage: http://github.com/Xenapto/resque-rate_limited
296
+ licenses:
297
+ - MIT
298
+ metadata: {}
299
+ post_install_message:
300
+ rdoc_options: []
301
+ require_paths:
302
+ - lib
303
+ required_ruby_version: !ruby/object:Gem::Requirement
304
+ requirements:
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: '0'
308
+ required_rubygems_version: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: '0'
313
+ requirements: []
314
+ rubyforge_project:
315
+ rubygems_version: 2.6.7
316
+ signing_key:
317
+ specification_version: 4
318
+ summary: A Resque plugin to help manage jobs that use rate limited apis, pausing when
319
+ you hit the limits and restarting later.
320
+ test_files:
321
+ - spec/apis/angellist_queue_spec.rb
322
+ - spec/apis/evernote_queue_spec.rb
323
+ - spec/apis/twitter_queue_spec.rb
324
+ - spec/rate_limited_spec.rb
325
+ - spec/rate_limited_un_pause_spec.rb
326
+ - spec/spec_helper.rb