dash-bees 0.18

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