resque-rate_limited 1.1.0

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.
@@ -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