dash-bees 0.18

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,164 @@
1
+ require_relative "setup"
2
+
3
+ test DashFu::Bee::RubyGems do
4
+ context "setup" do
5
+ setup { source.setup "gem_name"=>"vanity" }
6
+
7
+ context "metric" do
8
+ subject { source.metric }
9
+
10
+ should "use gem name" do
11
+ assert_equal "RubyGems: vanity", subject.name
12
+ end
13
+
14
+ should "measure totals" do
15
+ assert subject.totals
16
+ end
17
+
18
+ should "capture downloads" do
19
+ assert subject.columns.include?(id: "downloads", label: "Downloads")
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+ context "validation" do
26
+ should "raise error if gem name missing" do
27
+ assert_raise(RuntimeError) { source.setup "gem_name"=>" " }
28
+ end
29
+
30
+ should "create valid source" do
31
+ source.setup "gem_name"=>"vanity"
32
+ assert source.valid?
33
+ end
34
+ end
35
+
36
+
37
+ context "update" do
38
+ setup { source.setup "gem_name"=>"vanity" }
39
+
40
+ should "properly encode gem name" do
41
+ source.setup "gem_name"=>"need&this=encoded"
42
+ source.update rescue nil
43
+ assert_requested :get, "http://rubygems.org/api/v1/gems/need%26this%3Dencoded.json"
44
+ end
45
+
46
+ should "handle 404" do
47
+ stub_request(:get, interactions.first.uri).to_return status: 404
48
+ source.update
49
+ assert_equal "Could not find the Gem vanity", source.last_error
50
+ end
51
+
52
+ should "handle other error" do
53
+ stub_request(:get, interactions.first.uri).to_return status: 500
54
+ source.update
55
+ assert_equal "Last request didn't go as expected, trying again later", source.last_error
56
+ end
57
+
58
+ should "handle invlid document entity" do
59
+ stub_request(:get, interactions.first.uri).to_return body: "Not JSON"
60
+ source.update
61
+ assert_equal "Last request didn't go as expected, trying again later", source.last_error
62
+ end
63
+
64
+ should "capture number of downloads" do
65
+ source.update
66
+ assert_equal({ downloads: 3492 }, source.metric.values)
67
+ end
68
+
69
+ should "not create any activity" do
70
+ source.update
71
+ assert source.activities.empty?
72
+ end
73
+
74
+ context "repeating" do
75
+ setup do
76
+ source.update
77
+ data = JSON.parse(interactions.first.response.body).merge("downloads"=>9040, "version"=>"2.1.0")
78
+ stub_request(:get, interactions.first.uri).to_return body: data.to_json
79
+ source.update
80
+ end
81
+
82
+ should "update version number" do
83
+ assert source.meta.include?(title: "Version", text: "2.1.0")
84
+ end
85
+
86
+ should "capture new number of downloads" do
87
+ assert_equal({ downloads: 9040 }, source.metric.values)
88
+ end
89
+
90
+ should "create activity for new release" do
91
+ assert source.activity
92
+ end
93
+
94
+ context "activity" do
95
+ subject { source.activity }
96
+
97
+ should "should have unique identifier" do
98
+ assert_equal "vanity-2.1.0", subject.uid
99
+ end
100
+
101
+ should "report release number" do
102
+ assert_equal <<-HTML.strip, subject.html
103
+ released <a href=\"http://rubygems.org/gems/vanity/versions/2.1.0\">vanity version 2.1.0</a>.
104
+ HTML
105
+ end
106
+
107
+ should "link to project page" do
108
+ assert_equal "http://rubygems.org/gems/vanity", subject.url
109
+ end
110
+
111
+ should "tag as release" do
112
+ assert_contains subject.tags, "release"
113
+ end
114
+
115
+ should "be valid" do
116
+ subject.validate
117
+ assert subject.valid?
118
+ end
119
+
120
+ context "person" do
121
+ subject { source.activity.person }
122
+
123
+ should "be named Ruby Gems" do
124
+ assert_equal "RubyGems", subject.fullname
125
+ end
126
+
127
+ should "have URL as identity" do
128
+ assert_contains subject.identities, "url:http://rubygems.org/"
129
+ end
130
+
131
+ should "use the Ruby Gem as photo" do
132
+ assert_equal "http://dash-fu.com/images/sources/ruby.png", subject.photo_url
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+
140
+ context "meta" do
141
+ setup { source.setup "gem_name"=>"vanity" }
142
+ subject { source.meta }
143
+
144
+ should "link to project page" do
145
+ assert_contains subject, :title=>"Project", :text=>"vanity", :url=>"http://vanity.labnotes.org"
146
+ end
147
+
148
+ should "include project description" do
149
+ assert_contains subject, :text=>"Mirror, mirror on the wall ..."
150
+ end
151
+
152
+ should "include version number" do
153
+ assert_contains subject, :title=>"Version", :text=>"1.4.0"
154
+ end
155
+
156
+ should "list authors" do
157
+ assert_contains subject, :title=>"Authors", :text=>"Assaf Arkin"
158
+ end
159
+
160
+ should "link to RubyGems page" do
161
+ assert_contains subject, :title=>"Source", :text=>"RubyGems", :url=>"http://rubygems.org/gems/vanity"
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,32 @@
1
+ require "test/unit"
2
+ require "shoulda"
3
+ require "webmock/test_unit"
4
+ require "vcr"
5
+ require "ap"
6
+ require "logger"
7
+ require "nokogiri"
8
+ require "active_support/all"
9
+
10
+ require_relative "helpers/test"
11
+ require_relative "helpers/source"
12
+ require_relative "helpers/person"
13
+ require_relative "helpers/activity"
14
+ require_relative "helpers/metric"
15
+
16
+
17
+ require File.dirname(__FILE__) + "/../lib/dash-fu/bee"
18
+ Dir[File.dirname(__FILE__) + "/../lib/dash-fu/bees/*.rb"].each do |file|
19
+ require file
20
+ end
21
+
22
+
23
+ DashFu::Bee.logger = Logger.new("test/test.log")
24
+ DashFu::Bee.api_keys = YAML.load_file("test/api_keys.yml")
25
+
26
+
27
+ WebMock.disable_net_connect!
28
+ VCR.config do |vcr|
29
+ vcr.cassette_library_dir = File.dirname(__FILE__) + "/cassettes"
30
+ vcr.http_stubbing_library = :webmock
31
+ vcr.default_cassette_options = { record: ENV["RECORD"] ? :new_episodes : :none }
32
+ end
@@ -0,0 +1,934 @@
1
+ # Logfile created on Sun Aug 22 17:23:39 -0700 2010 by logger.rb/22285
2
+ RubyGems: 200 OK
3
+ RubyGems: 500 Server error
4
+ RubyGems: 200 OK
5
+ RubyGems: 500 Server error
6
+ Backtweets: 500 Server error
7
+ Backtweets: 200 OK
8
+ RubyGems: 200 OK
9
+ RubyGems: 500 Server error
10
+ Backtweets: 500 Server error
11
+ Backtweets: 200 OK
12
+ Backtweets: 500 Server error
13
+ Backtweets: 200 OK
14
+ Backtweets: 500 Server error
15
+ Backtweets: 200 OK
16
+ Backtweets: 500 Server error
17
+ Backtweets: 200 OK
18
+ RubyGems: 200 OK
19
+ RubyGems: 500 Server error
20
+ Backtweets: 500 Server Error
21
+ Backtweets: 500 Server Error
22
+ Backtweets: 500 Server Error
23
+ Backtweets: 200 OK
24
+ Backtweets: 500 Server Error
25
+ Backtweets: 200 OK
26
+ Backtweets: 500 Server Error
27
+ Backtweets: 200 OK
28
+ Backtweets: 500 Server Error
29
+ Backtweets: 200 OK
30
+ Backtweets: 500 Server Error
31
+ Backtweets: 200 OK
32
+ Backtweets: 500 Server Error
33
+ Backtweets: 200 OK
34
+ Backtweets: 500 Server Error
35
+ Backtweets: 200 OK
36
+ Backtweets: 500 Server Error
37
+ Backtweets: 200 OK
38
+ Backtweets: 500 Server Error
39
+ Backtweets: 200 OK
40
+ Backtweets: 500 Server Error
41
+ Backtweets: 200 OK
42
+ Backtweets: 500 Server Error
43
+ Backtweets: 200 OK
44
+ Backtweets: 500 Server Error
45
+ Backtweets: 500 Server Error
46
+ Backtweets: 200 OK
47
+ Backtweets: 200 OK
48
+ Backtweets: 500 Server Error
49
+ Backtweets: 500 Server Error
50
+ Backtweets: 200 OK
51
+ Backtweets: 200 OK
52
+ Backtweets: 500 Server Error
53
+ Backtweets: 500 Server Error
54
+ Backtweets: 200 OK
55
+ Backtweets: 200 OK
56
+ Backtweets: 500 Server Error
57
+ Backtweets: 500 Server Error
58
+ Backtweets: 200 OK
59
+ Backtweets: 200 OK
60
+ Backtweets: 500 Server Error
61
+ Backtweets: 500 Server Error
62
+ Backtweets: 200 OK
63
+ Backtweets: 200 OK
64
+ Backtweets: 500 Server Error
65
+ Backtweets: 500 Server Error
66
+ Backtweets: 200 OK
67
+ Backtweets: 200 OK
68
+ Backtweets: 500 Server Error
69
+ Backtweets: 500 Server Error
70
+ Backtweets: 200
71
+ Backtweets: 200
72
+ Backtweets: 500 Server Error
73
+ Backtweets: 500
74
+ Backtweets: 200
75
+ Backtweets: 200
76
+ Backtweets: 500
77
+ Backtweets: 500
78
+ Backtweets: 200
79
+ Backtweets: 200
80
+ Backtweets: 500
81
+ Backtweets: 500
82
+ Backtweets: 200
83
+ Backtweets: 200
84
+ Backtweets: 500
85
+ Backtweets: 500
86
+ Backtweets: 200
87
+ Backtweets: 200
88
+ Backtweets: 500
89
+ Backtweets: 500
90
+ Backtweets: 200
91
+ Backtweets: 200
92
+ Backtweets: 500
93
+ Backtweets: 500
94
+ Backtweets: 200
95
+ Backtweets: 200
96
+ Backtweets: 500
97
+ Backtweets: 500
98
+ Backtweets: 200
99
+ Backtweets: 200
100
+ Backtweets: 500
101
+ Backtweets: 500
102
+ Backtweets: 200
103
+ Backtweets: 200
104
+ Backtweets: 500
105
+ Backtweets: 500
106
+ Backtweets: 200
107
+ Backtweets: 200
108
+ Backtweets: 500
109
+ Backtweets: 500
110
+ Backtweets: 200
111
+ Backtweets: 200
112
+ Backtweets: 500
113
+ Backtweets: 500
114
+ Backtweets: 200
115
+ Backtweets: 200
116
+ Backtweets: 500
117
+ Backtweets: 200
118
+ Backtweets: 500
119
+ Backtweets: 200
120
+ Backtweets: 500
121
+ Backtweets: 200
122
+ Backtweets: 500
123
+ Backtweets: 200
124
+ Backtweets: 500
125
+ Backtweets: 200
126
+ Backtweets: 500
127
+ Backtweets: 200
128
+ Backtweets: 500
129
+ Backtweets: 200
130
+ Backtweets: 500
131
+ Backtweets: 200
132
+ Backtweets: 500
133
+ Backtweets: 200
134
+ Backtweets: 500
135
+ Backtweets: 200
136
+ Backtweets: 500
137
+ Backtweets: 200
138
+ Backtweets: 500
139
+ Backtweets: 200
140
+ Backtweets: 500
141
+ Backtweets: 200
142
+ Backtweets: 500
143
+ Backtweets: 200
144
+ Backtweets: 500
145
+ Backtweets: 500
146
+ Backtweets: 200
147
+ Backtweets: 500
148
+ Backtweets: 200
149
+ RubyGems: 200
150
+ RubyGems: 500
151
+ RubyGems: 200
152
+ RubyGems: 500
153
+ RubyGems: 200
154
+ RubyGems: 500
155
+ RubyGems: 200
156
+ RubyGems: 500
157
+ RubyGems: 200
158
+ RubyGems: 500
159
+ RubyGems: 200
160
+ RubyGems: 500
161
+ Backtweets: 500
162
+ Backtweets: 200
163
+ Backtweets: 500
164
+ Backtweets: 200
165
+ Backtweets: 500
166
+ Backtweets: 200
167
+ Backtweets: 500
168
+ Backtweets: 200
169
+ Backtweets: 500
170
+ Backtweets: 200
171
+ Backtweets: 500
172
+ Backtweets: 200
173
+ Backtweets: 200
174
+ Backtweets: 500
175
+ Backtweets: 200
176
+ Backtweets: 500
177
+ Backtweets: 200
178
+ Backtweets: 500
179
+ Backtweets: 200
180
+ Backtweets: 500
181
+ Backtweets: 200
182
+ Backtweets: 500
183
+ Backtweets: 200
184
+ Backtweets: 500
185
+ Backtweets: 200
186
+ Backtweets: 500
187
+ Backtweets: 200
188
+ Backtweets: 500
189
+ Backtweets: 200
190
+ Backtweets: 500
191
+ Backtweets: 200
192
+ Backtweets: 500
193
+ Backtweets: 200
194
+ Backtweets: 500
195
+ Backtweets: 200
196
+ Backtweets: 500
197
+ Backtweets: 200
198
+ Backtweets: 500
199
+ Backtweets: 200
200
+ Backtweets: 500
201
+ Backtweets: 200
202
+ Backtweets: 500
203
+ Backtweets: 200
204
+ Backtweets: 500
205
+ Backtweets: 200
206
+ Backtweets: 500
207
+ Backtweets: 200
208
+ Backtweets: 500
209
+ Backtweets: 200
210
+ Backtweets: 500
211
+ Backtweets: 200
212
+ Backtweets: 500
213
+ Backtweets: 200
214
+ Backtweets: 500
215
+ Backtweets: 500
216
+ Backtweets: 200
217
+ RubyGems: 200
218
+ RubyGems: 500
219
+ RubyGems: 200
220
+ RubyGems: 500
221
+ RubyGems: 200
222
+ RubyGems: 500
223
+ Backtweets: 500
224
+ Backtweets: 200
225
+ Backtweets: 200
226
+ Backtweets: 500
227
+ RubyGems: 200
228
+ RubyGems: 500
229
+ Backtweets: 500
230
+ Backtweets: 200
231
+ Backtweets: 200
232
+ Backtweets: 500
233
+ RubyGems: 200
234
+ RubyGems: 500
235
+ Backtweets: 500
236
+ Backtweets: 200
237
+ Backtweets: 200
238
+ Backtweets: 500
239
+ RubyGems: 200
240
+ RubyGems: 500
241
+ Backtweets: 500
242
+ Backtweets: 200
243
+ Backtweets: 200
244
+ Backtweets: 500
245
+ RubyGems: 200
246
+ RubyGems: 500
247
+ Backtweets: 500
248
+ Backtweets: 200
249
+ Backtweets: 200
250
+ Backtweets: 500
251
+ RubyGems: 200
252
+ RubyGems: 500
253
+ Backtweets: 500
254
+ Backtweets: 200
255
+ Backtweets: 200
256
+ Backtweets: 500
257
+ RubyGems: 200
258
+ RubyGems: 500
259
+ Backtweets: 500
260
+ Backtweets: 200
261
+ Backtweets: 200
262
+ Backtweets: 500
263
+ RubyGems: 200
264
+ RubyGems: 500
265
+ Backtweets: 500
266
+ Backtweets: 200
267
+ Backtweets: 200
268
+ Backtweets: 500
269
+ RubyGems: 200
270
+ RubyGems: 500
271
+ Backtweets: 500
272
+ Backtweets: 200
273
+ Backtweets: 200
274
+ Backtweets: 500
275
+ RubyGems: 200
276
+ RubyGems: 500
277
+ Backtweets: 500
278
+ Backtweets: 200
279
+ Backtweets: 200
280
+ Backtweets: 500
281
+ RubyGems: 200
282
+ RubyGems: 500
283
+ Backtweets: 500
284
+ Backtweets: 200
285
+ Backtweets: 200
286
+ Backtweets: 500
287
+ RubyGems: 200
288
+ RubyGems: 500
289
+ Backtweets: 500
290
+ Backtweets: 200
291
+ Backtweets: 200
292
+ Backtweets: 500
293
+ RubyGems: 200
294
+ RubyGems: 500
295
+ Backtweets: 500
296
+ Backtweets: 200
297
+ Backtweets: 200
298
+ Backtweets: 500
299
+ RubyGems: 200
300
+ RubyGems: 500
301
+ Backtweets: 500
302
+ Backtweets: 200
303
+ Backtweets: 200
304
+ Backtweets: 500
305
+ RubyGems: 200
306
+ RubyGems: 500
307
+ Backtweets: 500
308
+ Backtweets: 200
309
+ Backtweets: 200
310
+ Backtweets: 500
311
+ RubyGems: 200
312
+ RubyGems: 500
313
+ Backtweets: 500
314
+ Backtweets: 200
315
+ Backtweets: 200
316
+ Backtweets: 500
317
+ RubyGems: 200
318
+ RubyGems: 500
319
+ Backtweets: 500
320
+ Backtweets: 200
321
+ Backtweets: 200
322
+ Backtweets: 500
323
+ RubyGems: 200
324
+ RubyGems: 500
325
+ Backtweets: 200
326
+ Backtweets: 500
327
+ Backtweets: 200
328
+ Backtweets: 500
329
+ Backtweets: 200
330
+ Backtweets: 500
331
+ Backtweets: 200
332
+ Backtweets: 500
333
+ Backtweets: 200
334
+ Backtweets: 500
335
+ Backtweets: 200
336
+ Backtweets: 500
337
+ Backtweets: 200
338
+ Backtweets: 500
339
+ Backtweets: 200
340
+ Backtweets: 500
341
+ Backtweets: 500
342
+ Backtweets: 200
343
+ Backtweets: 200
344
+ Backtweets: 500
345
+ RubyGems: 200
346
+ RubyGems: 500
347
+ Backtweets: 500
348
+ Backtweets: 200
349
+ Backtweets: 200
350
+ Backtweets: 500
351
+ RubyGems: 200
352
+ RubyGems: 500
353
+ Backtweets: 500
354
+ Backtweets: 200
355
+ Backtweets: 200
356
+ Backtweets: 500
357
+ RubyGems: 200
358
+ RubyGems: 500
359
+ Backtweets: 500
360
+ Backtweets: 200
361
+ Backtweets: 200
362
+ Backtweets: 500
363
+ RubyGems: 200
364
+ RubyGems: 500
365
+ Backtweets: 500
366
+ Backtweets: 200
367
+ Backtweets: 200
368
+ Backtweets: 500
369
+ RubyGems: 200
370
+ RubyGems: 500
371
+ Backtweets: 500
372
+ Backtweets: 200
373
+ Backtweets: 200
374
+ Backtweets: 500
375
+ RubyGems: 200
376
+ RubyGems: 500
377
+ Backtweets: 500
378
+ Backtweets: 200
379
+ Backtweets: 200
380
+ Backtweets: 500
381
+ RubyGems: 200
382
+ RubyGems: 500
383
+ Backtweets: 500
384
+ Backtweets: 200
385
+ Backtweets: 200
386
+ Backtweets: 500
387
+ RubyGems: 200
388
+ RubyGems: 500
389
+ Backtweets: 500
390
+ Backtweets: 200
391
+ Backtweets: 200
392
+ Backtweets: 500
393
+ RubyGems: 200
394
+ RubyGems: 500
395
+ Backtweets: 500
396
+ Backtweets: 200
397
+ Backtweets: 200
398
+ Backtweets: 500
399
+ RubyGems: 200
400
+ RubyGems: 500
401
+ Backtweets: 500
402
+ Backtweets: 200
403
+ Backtweets: 200
404
+ Backtweets: 500
405
+ RubyGems: 200
406
+ RubyGems: 500
407
+ Backtweets: 500
408
+ Backtweets: 200
409
+ Backtweets: 200
410
+ Backtweets: 500
411
+ RubyGems: 200
412
+ RubyGems: 500
413
+ Backtweets: 500
414
+ Backtweets: 200
415
+ Backtweets: 200
416
+ Backtweets: 500
417
+ RubyGems: 200
418
+ RubyGems: 500
419
+ Backtweets: 500
420
+ Backtweets: 200
421
+ Backtweets: 200
422
+ Backtweets: 500
423
+ RubyGems: 200
424
+ RubyGems: 500
425
+ Backtweets: 500
426
+ Backtweets: 200
427
+ Backtweets: 200
428
+ Backtweets: 500
429
+ RubyGems: 200
430
+ RubyGems: 500
431
+ Backtweets: 500
432
+ Backtweets: 200
433
+ Backtweets: 200
434
+ Backtweets: 500
435
+ RubyGems: 200
436
+ RubyGems: 500
437
+ Backtweets: 500
438
+ Backtweets: 200
439
+ Backtweets: 200
440
+ Backtweets: 500
441
+ RubyGems: 200
442
+ RubyGems: 500
443
+ Backtweets: 500
444
+ Backtweets: 200
445
+ Backtweets: 200
446
+ Backtweets: 500
447
+ RubyGems: 200
448
+ RubyGems: 500
449
+ Backtweets: 500
450
+ Backtweets: 200
451
+ Backtweets: 200
452
+ Backtweets: 500
453
+ RubyGems: 200
454
+ RubyGems: 500
455
+ Backtweets: 500
456
+ Backtweets: 200
457
+ Backtweets: 200
458
+ Backtweets: 500
459
+ RubyGems: 200
460
+ RubyGems: 500
461
+ Backtweets: 500
462
+ Backtweets: 200
463
+ Backtweets: 200
464
+ Backtweets: 500
465
+ RubyGems: 200
466
+ RubyGems: 500
467
+ Backtweets: 500
468
+ Backtweets: 200
469
+ Backtweets: 200
470
+ Backtweets: 500
471
+ RubyGems: 200
472
+ RubyGems: 500
473
+ Backtweets: 500
474
+ Backtweets: 200
475
+ Backtweets: 200
476
+ Backtweets: 500
477
+ RubyGems: 200
478
+ RubyGems: 500
479
+ Backtweets: 500
480
+ Backtweets: 200
481
+ Backtweets: 200
482
+ Backtweets: 500
483
+ RubyGems: 200
484
+ RubyGems: 500
485
+ Backtweets: 500
486
+ Backtweets: 200
487
+ Backtweets: 200
488
+ Backtweets: 500
489
+ RubyGems: 200
490
+ RubyGems: 500
491
+ Backtweets: 500
492
+ Backtweets: 200
493
+ Backtweets: 200
494
+ Backtweets: 500
495
+ RubyGems: 200
496
+ RubyGems: 500
497
+ Backtweets: 500
498
+ Backtweets: 200
499
+ Backtweets: 200
500
+ Backtweets: 500
501
+ RubyGems: 200
502
+ RubyGems: 500
503
+ Backtweets: 500
504
+ Backtweets: 200
505
+ Backtweets: 200
506
+ Backtweets: 500
507
+ RubyGems: 200
508
+ RubyGems: 500
509
+ Backtweets: 500
510
+ Backtweets: 200
511
+ Backtweets: 200
512
+ Backtweets: 500
513
+ RubyGems: 200
514
+ RubyGems: 500
515
+ Backtweets: 500
516
+ Backtweets: 200
517
+ Backtweets: 200
518
+ Backtweets: 500
519
+ RubyGems: 200
520
+ RubyGems: 500
521
+ Backtweets: 500
522
+ Backtweets: 200
523
+ Backtweets: 200
524
+ Backtweets: 500
525
+ RubyGems: 200
526
+ RubyGems: 500
527
+ Backtweets: 500
528
+ Backtweets: 200
529
+ Backtweets: 200
530
+ Backtweets: 500
531
+ RubyGems: 200
532
+ RubyGems: 500
533
+ Backtweets: 500
534
+ Backtweets: 200
535
+ Backtweets: 200
536
+ Backtweets: 500
537
+ RubyGems: 200
538
+ RubyGems: 500
539
+ Backtweets: 500
540
+ Backtweets: 200
541
+ Backtweets: 200
542
+ Backtweets: 500
543
+ RubyGems: 200
544
+ RubyGems: 500
545
+ Backtweets: 500
546
+ Backtweets: 200
547
+ Backtweets: 200
548
+ Backtweets: 500
549
+ RubyGems: 200
550
+ RubyGems: 500
551
+ Backtweets: 500
552
+ Backtweets: 200
553
+ Backtweets: 200
554
+ Backtweets: 500
555
+ RubyGems: 200
556
+ RubyGems: 500
557
+ Backtweets: 500
558
+ Backtweets: 200
559
+ Backtweets: 200
560
+ Backtweets: 500
561
+ RubyGems: 200
562
+ RubyGems: 500
563
+ Backtweets: 500
564
+ Backtweets: 200
565
+ Backtweets: 200
566
+ Backtweets: 500
567
+ RubyGems: 200
568
+ RubyGems: 500
569
+ Backtweets: 500
570
+ Backtweets: 200
571
+ Backtweets: 200
572
+ Backtweets: 500
573
+ RubyGems: 200
574
+ RubyGems: 500
575
+ Backtweets: 500
576
+ Backtweets: 200
577
+ Backtweets: 200
578
+ Backtweets: 500
579
+ RubyGems: 200
580
+ RubyGems: 500
581
+ Backtweets: 200
582
+ Backtweets: 500
583
+ Backtweets: 200
584
+ Backtweets: 500
585
+ Backtweets: 200
586
+ Backtweets: 500
587
+ Backtweets: 500
588
+ Backtweets: 200
589
+ Backtweets: 500
590
+ Backtweets: 200
591
+ Backtweets: 500
592
+ Backtweets: 200
593
+ Backtweets: 500
594
+ Backtweets: 200
595
+ Backtweets: 500
596
+ Backtweets: 200
597
+ Backtweets: 500
598
+ Backtweets: 200
599
+ Backtweets: 200
600
+ Backtweets: 500
601
+ RubyGems: 200
602
+ RubyGems: 500
603
+ Backtweets: 500
604
+ Backtweets: 200
605
+ Backtweets: 200
606
+ Backtweets: 500
607
+ RubyGems: 200
608
+ RubyGems: 500
609
+ Backtweets: 500
610
+ Backtweets: 200
611
+ Backtweets: 200
612
+ Backtweets: 500
613
+ RubyGems: 200
614
+ RubyGems: 500
615
+ Backtweets: 200
616
+ Backtweets: 500
617
+ Backtweets: 200
618
+ Backtweets: 500
619
+ Backtweets: 200
620
+ Backtweets: 500
621
+ Backtweets: 200
622
+ Backtweets: 500
623
+ Backtweets: 200
624
+ Backtweets: 500
625
+ Backtweets: 200
626
+ Backtweets: 500
627
+ Backtweets: 200
628
+ Backtweets: 500
629
+ Backtweets: 200
630
+ Backtweets: 500
631
+ Backtweets: 500
632
+ Backtweets: 200
633
+ Backtweets: 200
634
+ Backtweets: 500
635
+ RubyGems: 200
636
+ RubyGems: 500
637
+ Backtweets: 500
638
+ Backtweets: 200
639
+ Backtweets: 200
640
+ Backtweets: 500
641
+ RubyGems: 200
642
+ RubyGems: 500
643
+ Backtweets: 500
644
+ Backtweets: 200
645
+ Backtweets: 200
646
+ Backtweets: 500
647
+ RubyGems: 200
648
+ RubyGems: 500
649
+ Backtweets: 500
650
+ Backtweets: 200
651
+ Backtweets: 500
652
+ Backtweets: 200
653
+ Backtweets: 200
654
+ Backtweets: 500
655
+ RubyGems: 200
656
+ RubyGems: 500
657
+ Backtweets: 500
658
+ Backtweets: 200
659
+ Backtweets: 200
660
+ Backtweets: 500
661
+ RubyGems: 200
662
+ RubyGems: 500
663
+ Backtweets: 200
664
+ Backtweets: 500
665
+ Backtweets: 200
666
+ Backtweets: 500
667
+ Backtweets: 200
668
+ Backtweets: 500
669
+ Backtweets: 200
670
+ Backtweets: 500
671
+ Backtweets: 200
672
+ Backtweets: 500
673
+ Backtweets: 200
674
+ Backtweets: 500
675
+ Backtweets: 200
676
+ Backtweets: 500
677
+ Backtweets: 200
678
+ Backtweets: 500
679
+ Backtweets: 500
680
+ Backtweets: 200
681
+ Backtweets: 200
682
+ Backtweets: 500
683
+ RubyGems: 200
684
+ RubyGems: 500
685
+ Backtweets: 500
686
+ Backtweets: 200
687
+ Backtweets: 200
688
+ Backtweets: 500
689
+ RubyGems: 200
690
+ RubyGems: 500
691
+ Backtweets: 500
692
+ Backtweets: 200
693
+ Backtweets: 200
694
+ Backtweets: 500
695
+ RubyGems: 200
696
+ RubyGems: 500
697
+ Backtweets: 500
698
+ Backtweets: 200
699
+ Backtweets: 200
700
+ Backtweets: 500
701
+ RubyGems: 200
702
+ RubyGems: 500
703
+ Backtweets: 500
704
+ Backtweets: 200
705
+ Backtweets: 200
706
+ Backtweets: 500
707
+ RubyGems: 200
708
+ RubyGems: 500
709
+ Backtweets: 500
710
+ Backtweets: 200
711
+ Backtweets: 200
712
+ Backtweets: 500
713
+ RubyGems: 200
714
+ RubyGems: 500
715
+ Backtweets: 500
716
+ Backtweets: 200
717
+ Backtweets: 200
718
+ Backtweets: 500
719
+ RubyGems: 200
720
+ RubyGems: 500
721
+ Backtweets: 500
722
+ Backtweets: 200
723
+ Backtweets: 200
724
+ Backtweets: 500
725
+ RubyGems: 200
726
+ RubyGems: 500
727
+ Backtweets: 500
728
+ Backtweets: 200
729
+ Backtweets: 200
730
+ Backtweets: 500
731
+ RubyGems: 200
732
+ RubyGems: 500
733
+ Backtweets: 500
734
+ Backtweets: 200
735
+ Backtweets: 200
736
+ Backtweets: 500
737
+ RubyGems: 200
738
+ RubyGems: 500
739
+ Backtweets: 500
740
+ Backtweets: 200
741
+ Backtweets: 200
742
+ Backtweets: 500
743
+ RubyGems: 200
744
+ RubyGems: 500
745
+ Backtweets: 500
746
+ Backtweets: 200
747
+ Backtweets: 200
748
+ Backtweets: 500
749
+ RubyGems: 200
750
+ RubyGems: 500
751
+ Backtweets: 500
752
+ Backtweets: 200
753
+ Backtweets: 200
754
+ Backtweets: 500
755
+ RubyGems: 200
756
+ RubyGems: 500
757
+ Backtweets: 500
758
+ Backtweets: 200
759
+ Backtweets: 200
760
+ Backtweets: 500
761
+ RubyGems: 200
762
+ RubyGems: 500
763
+ Backtweets: 500
764
+ Backtweets: 200
765
+ Backtweets: 200
766
+ Backtweets: 500
767
+ RubyGems: 200
768
+ RubyGems: 500
769
+ Backtweets: 500
770
+ Backtweets: 200
771
+ Backtweets: 200
772
+ Backtweets: 500
773
+ RubyGems: 200
774
+ RubyGems: 500
775
+ Backtweets: 500
776
+ Backtweets: 200
777
+ Backtweets: 200
778
+ Backtweets: 500
779
+ RubyGems: 200
780
+ RubyGems: 500
781
+ Backtweets: 500
782
+ Backtweets: 200
783
+ Backtweets: 200
784
+ Backtweets: 500
785
+ RubyGems: 200
786
+ RubyGems: 500
787
+ Backtweets: 500
788
+ Backtweets: 200
789
+ Backtweets: 200
790
+ Backtweets: 500
791
+ RubyGems: 200
792
+ RubyGems: 500
793
+ Backtweets: 500
794
+ Backtweets: 200
795
+ Backtweets: 200
796
+ Backtweets: 500
797
+ RubyGems: 200
798
+ RubyGems: 500
799
+ Backtweets: 500
800
+ Backtweets: 200
801
+ Backtweets: 200
802
+ Backtweets: 500
803
+ RubyGems: 200
804
+ RubyGems: 500
805
+ Backtweets: 500
806
+ Backtweets: 200
807
+ Github: 200
808
+ Github: 500
809
+ RubyGems: 200
810
+ RubyGems: 500
811
+ Backtweets: 500
812
+ Backtweets: 200
813
+ Github: 200
814
+ Github: 500
815
+ RubyGems: 200
816
+ RubyGems: 500
817
+ Backtweets: 500
818
+ Backtweets: 200
819
+ Github: 200
820
+ Github: 500
821
+ RubyGems: 200
822
+ RubyGems: 500
823
+ Backtweets: 500
824
+ Backtweets: 200
825
+ Github: 200
826
+ Github: 500
827
+ RubyGems: 200
828
+ RubyGems: 500
829
+ Backtweets: 500
830
+ Backtweets: 200
831
+ Github: 200
832
+ Github: 500
833
+ RubyGems: 200
834
+ RubyGems: 500
835
+ Backtweets: 500
836
+ Backtweets: 200
837
+ Github: 200
838
+ Github: 500
839
+ RubyGems: 200
840
+ RubyGems: 500
841
+ Backtweets: 500
842
+ Backtweets: 200
843
+ Github: 200
844
+ Github: 500
845
+ RubyGems: 200
846
+ RubyGems: 500
847
+ Backtweets: 500
848
+ Backtweets: 200
849
+ Github: 200
850
+ Github: 500
851
+ RubyGems: 200
852
+ RubyGems: 500
853
+ RubyGems: 200
854
+ RubyGems: 500
855
+ RubyGems: 200
856
+ RubyGems: 500
857
+ RubyGems: 200
858
+ RubyGems: 500
859
+ RubyGems: 200
860
+ RubyGems: 500
861
+ RubyGems: 200
862
+ RubyGems: 500
863
+ RubyGems: 200
864
+ RubyGems: 500
865
+ RubyGems: 200
866
+ RubyGems: 500
867
+ RubyGems: 200
868
+ RubyGems: 500
869
+ RubyGems: 200
870
+ RubyGems: 500
871
+ RubyGems: 200
872
+ RubyGems: 500
873
+ RubyGems: 200
874
+ RubyGems: 500
875
+ RubyGems: 200
876
+ RubyGems: 500
877
+ Backtweets: 500
878
+ Backtweets: 200
879
+ Backtweets: 500
880
+ Backtweets: 200
881
+ Backtweets: 500
882
+ Backtweets: 200
883
+ Backtweets: 500
884
+ Backtweets: 200
885
+ Backtweets: 500
886
+ Backtweets: 200
887
+ Backtweets: 500
888
+ Backtweets: 200
889
+ Backtweets: 500
890
+ Backtweets: 200
891
+ Backtweets: 500
892
+ Backtweets: 200
893
+ Backtweets: 200
894
+ Backtweets: 500
895
+ Backtweets: 200
896
+ Backtweets: 200
897
+ Backtweets: 500
898
+ Backtweets: 200
899
+ Backtweets: 500
900
+ Backtweets: 200
901
+ Backtweets: 500
902
+ Backtweets: 200
903
+ Github: 200
904
+ Github: 500
905
+ Backtweets: 500
906
+ Backtweets: 200
907
+ Github: 200
908
+ Github: 500
909
+ RubyGems: 200
910
+ RubyGems: 500
911
+ Backtweets: 500
912
+ Backtweets: 200
913
+ Github: 200
914
+ Github: 500
915
+ RubyGems: 200
916
+ RubyGems: 500
917
+ Backtweets: 500
918
+ Backtweets: 200
919
+ Github: 200
920
+ Github: 500
921
+ RubyGems: 200
922
+ RubyGems: 500
923
+ Backtweets: 500
924
+ Backtweets: 200
925
+ Github: 200
926
+ Github: 500
927
+ Backtweets: 500
928
+ Backtweets: 200
929
+ Github: 200
930
+ Github: 500
931
+ RubyGems: 200
932
+ RubyGems: 500
933
+ RubyGems: 200
934
+ RubyGems: 500