leaderboard 2.4.0 → 2.5.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.
@@ -1,4 +1,4 @@
1
1
  class Leaderboard
2
2
  # Leaderboard version
3
- VERSION = '2.4.0'.freeze
3
+ VERSION = '2.5.0'.freeze
4
4
  end
@@ -13,8 +13,8 @@ describe 'Leaderboard' do
13
13
  end
14
14
 
15
15
  it 'should be initialized with defaults' do
16
- @leaderboard.leaderboard_name.should == 'name'
17
- @leaderboard.page_size.should == Leaderboard::DEFAULT_PAGE_SIZE
16
+ @leaderboard.leaderboard_name.should eql('name')
17
+ @leaderboard.page_size.should eql(Leaderboard::DEFAULT_PAGE_SIZE)
18
18
  end
19
19
 
20
20
  it 'should be able to disconnect its connection to Redis' do
@@ -31,14 +31,14 @@ describe 'Leaderboard' do
31
31
 
32
32
  it 'should set the page size to the default page size if passed an invalid value' do
33
33
  some_leaderboard = Leaderboard.new('name', {:page_size => 0})
34
-
34
+
35
35
  some_leaderboard.page_size.should be(Leaderboard::DEFAULT_PAGE_SIZE)
36
36
  some_leaderboard.disconnect
37
37
  end
38
38
 
39
39
  it 'should allow you to delete a leaderboard' do
40
40
  rank_members_in_leaderboard
41
-
41
+
42
42
  @redis_connection.exists('name').should be_true
43
43
  @leaderboard.delete_leaderboard
44
44
  @redis_connection.exists('name').should be_false
@@ -47,7 +47,7 @@ describe 'Leaderboard' do
47
47
  it 'should allow you to pass in an existing redis connection in the initializer' do
48
48
  @leaderboard = Leaderboard.new('name', Leaderboard::DEFAULT_OPTIONS, {:redis_connection => @redis_connection})
49
49
  rank_members_in_leaderboard
50
-
50
+
51
51
  @redis_connection.info["connected_clients"].to_i.should be(1)
52
52
  end
53
53
 
@@ -59,7 +59,7 @@ describe 'Leaderboard' do
59
59
 
60
60
  it 'should return the correct number of members in a given score range' do
61
61
  rank_members_in_leaderboard(5)
62
-
62
+
63
63
  @leaderboard.total_members_in_score_range(2, 4).should be(3)
64
64
  end
65
65
 
@@ -72,59 +72,59 @@ describe 'Leaderboard' do
72
72
 
73
73
  it 'should return the correct score when calling score_for' do
74
74
  rank_members_in_leaderboard(5)
75
-
76
- @leaderboard.score_for('member_4').should == 4
75
+
76
+ @leaderboard.score_for('member_4').should eql(4.0)
77
77
  end
78
78
 
79
79
  it 'should return the correct total pages' do
80
80
  rank_members_in_leaderboard(10)
81
-
81
+
82
82
  @leaderboard.total_pages.should be(1)
83
83
  @leaderboard.total_pages(5).should be(2)
84
-
84
+
85
85
  @redis_connection.flushdb
86
-
86
+
87
87
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE + 1)
88
-
88
+
89
89
  @leaderboard.total_pages.should be(2)
90
90
  end
91
91
 
92
92
  it 'should return the correct list when calling leaders' do
93
93
  rank_members_in_leaderboard(25)
94
-
94
+
95
95
  @leaderboard.total_members.should be(25)
96
96
 
97
97
  leaders = @leaderboard.leaders(1)
98
-
98
+
99
99
  leaders.size.should be(25)
100
- leaders[0][:member].should == 'member_25'
101
- leaders[-2][:member].should == 'member_2'
102
- leaders[-1][:member].should == 'member_1'
100
+ leaders[0][:member].should eql 'member_25'
101
+ leaders[-2][:member].should eql 'member_2'
102
+ leaders[-1][:member].should eql 'member_1'
103
103
  leaders[-1][:score].to_i.should be(1)
104
104
  end
105
105
 
106
106
  it 'should return the correct list when calling members' do
107
107
  rank_members_in_leaderboard(25)
108
-
108
+
109
109
  @leaderboard.total_members.should be(25)
110
110
 
111
111
  members = @leaderboard.members(1)
112
-
112
+
113
113
  members.size.should be(25)
114
- members[0][:member].should == 'member_25'
115
- members[-2][:member].should == 'member_2'
116
- members[-1][:member].should == 'member_1'
114
+ members[0][:member].should eql('member_25')
115
+ members[-2][:member].should eql('member_2')
116
+ members[-1][:member].should eql('member_1')
117
117
  members[-1][:score].to_i.should be(1)
118
118
  end
119
119
 
120
120
  it 'should return the correct number of members when calling leaders with multiple pages' do
121
121
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
122
-
122
+
123
123
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
124
124
 
125
125
  leaders = @leaderboard.leaders(1)
126
126
  leaders.size.should be(@leaderboard.page_size)
127
-
127
+
128
128
  leaders = @leaderboard.leaders(2)
129
129
  leaders.size.should be(@leaderboard.page_size)
130
130
 
@@ -133,10 +133,10 @@ describe 'Leaderboard' do
133
133
 
134
134
  leaders = @leaderboard.leaders(4)
135
135
  leaders.size.should be(1)
136
-
136
+
137
137
  leaders = @leaderboard.leaders(-5)
138
138
  leaders.size.should be(@leaderboard.page_size)
139
-
139
+
140
140
  leaders = @leaderboard.leaders(10)
141
141
  leaders.size.should be(1)
142
142
  end
@@ -150,9 +150,9 @@ describe 'Leaderboard' do
150
150
  members = @leaderboard.send("all_#{method}")
151
151
 
152
152
  members.size.should be(27)
153
- members[0][:member].should == 'member_27'
154
- members[-2][:member].should == 'member_2'
155
- members[-1][:member].should == 'member_1'
153
+ members[0][:member].should eql('member_27')
154
+ members[-2][:member].should eql('member_2')
155
+ members[-1][:member].should eql('member_1')
156
156
  members[-1][:score].to_i.should be(1)
157
157
  end
158
158
  end
@@ -163,67 +163,67 @@ describe 'Leaderboard' do
163
163
  members = @leaderboard.members_from_score_range(10, 15, {:with_scores => false, :with_rank => false})
164
164
 
165
165
  member_15 = {:member => 'member_15'}
166
- members[0].should == member_15
166
+ members[0].should eql(member_15)
167
167
 
168
168
  member_10 = {:member => 'member_10'}
169
- members[5].should == member_10
169
+ members[5].should eql(member_10)
170
170
 
171
171
  members = @leaderboard.members_from_score_range(10, 15, {:with_scores => true, :with_rank => true, :with_member_data => true})
172
172
 
173
173
  member_15 = {:member => 'member_15', :rank => 11, :score => 15.0, :member_data => {'member_name' => 'Leaderboard member 15'}}
174
- members[0].should == member_15
174
+ members[0].should eql(member_15)
175
175
 
176
176
  member_10 = {:member => 'member_10', :rank => 16, :score => 10.0, :member_data => {'member_name' => 'Leaderboard member 10'}}
177
- members[5].should == member_10
177
+ members[5].should eql(member_10)
178
178
  end
179
179
 
180
180
  it 'should allow you to retrieve leaders without scores and ranks' do
181
181
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
182
-
182
+
183
183
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE)
184
184
  leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
185
185
 
186
186
  member_25 = {:member => 'member_25'}
187
- leaders[0].should == member_25
188
-
187
+ leaders[0].should eql(member_25)
188
+
189
189
  member_1 = {:member => 'member_1'}
190
- leaders[24].should == member_1
190
+ leaders[24].should eql(member_1)
191
191
  end
192
192
 
193
193
  it 'should allow you to retrieve leaders with extra data' do
194
194
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
195
-
195
+
196
196
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE)
197
197
  leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false, :with_member_data => true})
198
198
 
199
199
  member_25 = {:member => 'member_25', :member_data => { "member_name" => "Leaderboard member 25" }}
200
- leaders[0].should == member_25
201
-
200
+ leaders[0].should eql(member_25)
201
+
202
202
  member_1 = {:member => 'member_1', :member_data => { "member_name" => "Leaderboard member 1" }}
203
- leaders[24].should == member_1
203
+ leaders[24].should eql(member_1)
204
204
  end
205
205
 
206
206
  it 'should allow you to retrieve optional member data' do
207
207
  @leaderboard.rank_member('member_id', 1, {'username' => 'member_name', 'other_data_key' => 'other_data_value'})
208
208
 
209
- @leaderboard.member_data_for('unknown_member').should == {}
210
- @leaderboard.member_data_for('member_id').should == {'username' => 'member_name', 'other_data_key' => 'other_data_value'}
209
+ @leaderboard.member_data_for('unknown_member').should eql({})
210
+ @leaderboard.member_data_for('member_id').should eql({'username' => 'member_name', 'other_data_key' => 'other_data_value'})
211
211
  end
212
212
 
213
213
  it 'should allow you to update optional member data' do
214
214
  @leaderboard.rank_member('member_id', 1, {'username' => 'member_name'})
215
215
 
216
- @leaderboard.member_data_for('member_id').should == {'username' => 'member_name'}
216
+ @leaderboard.member_data_for('member_id').should eql({'username' => 'member_name'})
217
217
  @leaderboard.update_member_data('member_id', {'other_data_key' => 'other_data_value'})
218
- @leaderboard.member_data_for('member_id').should == {'username' => 'member_name', 'other_data_key' => 'other_data_value'}
218
+ @leaderboard.member_data_for('member_id').should eql({'username' => 'member_name', 'other_data_key' => 'other_data_value'})
219
219
  end
220
220
 
221
221
  it 'should allow you to remove optional member data' do
222
222
  @leaderboard.rank_member('member_id', 1, {'username' => 'member_name'})
223
223
 
224
- @leaderboard.member_data_for('member_id').should == {'username' => 'member_name'}
224
+ @leaderboard.member_data_for('member_id').should eql({'username' => 'member_name'})
225
225
  @leaderboard.remove_member_data('member_id')
226
- @leaderboard.member_data_for('member_id').should == {}
226
+ @leaderboard.member_data_for('member_id').should eql({})
227
227
  end
228
228
 
229
229
  it 'should allow you to call leaders with various options that respect the defaults for the options not passed in' do
@@ -231,90 +231,90 @@ describe 'Leaderboard' do
231
231
 
232
232
  leaders = @leaderboard.leaders(1, :page_size => 1)
233
233
  leaders.size.should be(1)
234
-
234
+
235
235
  leaders = @leaderboard.leaders(1, :with_rank => false)
236
236
  leaders.size.should be(Leaderboard::DEFAULT_PAGE_SIZE)
237
- member_26 = {:member => 'member_26', :score => 26}
238
- member_25 = {:member => 'member_25', :score => 25}
239
- member_24 = {:member => 'member_24', :score => 24}
240
- leaders[0].should == member_26
241
- leaders[1].should == member_25
242
- leaders[2].should == member_24
237
+ member_26 = {:member => 'member_26', :score => 26.0}
238
+ member_25 = {:member => 'member_25', :score => 25.0}
239
+ member_24 = {:member => 'member_24', :score => 24.0}
240
+ leaders[0].should eql(member_26)
241
+ leaders[1].should eql(member_25)
242
+ leaders[2].should eql(member_24)
243
243
 
244
244
  leaders = @leaderboard.leaders(1, :with_scores => false)
245
245
  leaders.size.should be(Leaderboard::DEFAULT_PAGE_SIZE)
246
246
  member_26 = {:member => 'member_26', :rank => 1}
247
247
  member_25 = {:member => 'member_25', :rank => 2}
248
- leaders[0].should == member_26
249
- leaders[1].should == member_25
248
+ leaders[0].should eql(member_26)
249
+ leaders[1].should eql(member_25)
250
250
 
251
251
  leaders = @leaderboard.leaders(1, :with_scores => false, :with_rank => false)
252
252
  leaders.size.should be(Leaderboard::DEFAULT_PAGE_SIZE)
253
253
  member_26 = {:member => 'member_26'}
254
254
  member_25 = {:member => 'member_25'}
255
- leaders[0].should == member_26
256
- leaders[1].should == member_25
255
+ leaders[0].should eql(member_26)
256
+ leaders[1].should eql(member_25)
257
257
 
258
258
  leaders = @leaderboard.leaders(1, :with_rank => false, :page_size => 1)
259
259
  leaders.size.should be(1)
260
- member_26 = {:member => 'member_26', :score => 26}
261
- leaders[0].should == member_26
260
+ member_26 = {:member => 'member_26', :score => 26.0}
261
+ leaders[0].should eql(member_26)
262
262
  end
263
263
 
264
264
  it 'should return a single member when calling member_at' do
265
265
  rank_members_in_leaderboard(50)
266
- @leaderboard.member_at(1)[:rank].should == 1
267
- @leaderboard.member_at(1)[:score].should == 50.0
268
- @leaderboard.member_at(26)[:rank].should == 26
269
- @leaderboard.member_at(50)[:rank].should == 50
266
+ @leaderboard.member_at(1)[:rank].should eql(1)
267
+ @leaderboard.member_at(1)[:score].should eql(50.0)
268
+ @leaderboard.member_at(26)[:rank].should eql(26)
269
+ @leaderboard.member_at(50)[:rank].should eql(50)
270
270
  @leaderboard.member_at(51).should be_nil
271
- @leaderboard.member_at(1, :with_member_data => true)[:member_data].should == {'member_name' => 'Leaderboard member 50'}
272
- @leaderboard.member_at(1, :use_zero_index_for_rank => true)[:rank].should == 0
271
+ @leaderboard.member_at(1, :with_member_data => true)[:member_data].should eql({'member_name' => 'Leaderboard member 50'})
272
+ @leaderboard.member_at(1, :use_zero_index_for_rank => true)[:rank].should eql(0)
273
273
  end
274
274
 
275
275
  it 'should return the correct information when calling around_me' do
276
276
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
277
277
 
278
278
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
279
-
279
+
280
280
  leaders_around_me = @leaderboard.around_me('member_30')
281
281
  (leaders_around_me.size / 2).should be(@leaderboard.page_size / 2)
282
-
282
+
283
283
  leaders_around_me = @leaderboard.around_me('member_1')
284
284
  leaders_around_me.size.should be(@leaderboard.page_size / 2 + 1)
285
-
285
+
286
286
  leaders_around_me = @leaderboard.around_me('member_76')
287
287
  (leaders_around_me.size / 2).should be(@leaderboard.page_size / 2)
288
288
  end
289
289
 
290
290
  it 'should return the correct information when calling ranked_in_list' do
291
291
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
292
-
292
+
293
293
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE)
294
-
294
+
295
295
  members = ['member_1', 'member_5', 'member_10']
296
296
  ranked_members = @leaderboard.ranked_in_list(members, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
297
-
297
+
298
298
  ranked_members.size.should be(3)
299
299
 
300
300
  ranked_members[0][:rank].should be(25)
301
- ranked_members[0][:score].should == 1
301
+ ranked_members[0][:score].should eql(1.0)
302
302
 
303
303
  ranked_members[1][:rank].should be(21)
304
- ranked_members[1][:score].should == 5
304
+ ranked_members[1][:score].should eql(5.0)
305
305
 
306
306
  ranked_members[2][:rank].should be(16)
307
- ranked_members[2][:score].should == 10
307
+ ranked_members[2][:score].should eql(10.0)
308
308
  end
309
309
 
310
310
  it 'should return the correct information when calling ranked_in_list without scores' do
311
311
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
312
-
312
+
313
313
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE)
314
-
314
+
315
315
  members = ['member_1', 'member_5', 'member_10']
316
316
  ranked_members = @leaderboard.ranked_in_list(members, {:with_scores => false, :with_rank => true, :use_zero_index_for_rank => false})
317
-
317
+
318
318
  ranked_members.size.should be(3)
319
319
  ranked_members[0][:rank].should be(25)
320
320
  ranked_members[1][:rank].should be(21)
@@ -323,45 +323,45 @@ describe 'Leaderboard' do
323
323
 
324
324
  it 'should allow you to remove members' do
325
325
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
326
-
326
+
327
327
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE)
328
-
328
+
329
329
  @leaderboard.remove_member('member_1')
330
-
330
+
331
331
  @leaderboard.total_members.should be(Leaderboard::DEFAULT_PAGE_SIZE - 1)
332
332
  @leaderboard.rank_for('member_1').should be_nil
333
333
  end
334
334
 
335
335
  it 'should allow you to change the score for a member' do
336
- @leaderboard.rank_member('member_1', 5)
337
- @leaderboard.score_for('member_1').should == 5
336
+ @leaderboard.rank_member('member_1', 5)
337
+ @leaderboard.score_for('member_1').should eql(5.0)
338
338
 
339
- @leaderboard.change_score_for('member_1', 5)
340
- @leaderboard.score_for('member_1').should == 10
339
+ @leaderboard.change_score_for('member_1', 5)
340
+ @leaderboard.score_for('member_1').should eql(10.0)
341
341
 
342
- @leaderboard.change_score_for('member_1', -5)
343
- @leaderboard.score_for('member_1').should == 5
342
+ @leaderboard.change_score_for('member_1', -5)
343
+ @leaderboard.score_for('member_1').should eql(5.0)
344
344
  end
345
345
 
346
346
  it 'should allow you to check if a member exists' do
347
347
  @leaderboard.rank_member('member_1', 10)
348
-
348
+
349
349
  @leaderboard.check_member?('member_1').should be_true
350
350
  @leaderboard.check_member?('member_2').should be_false
351
351
  end
352
352
 
353
353
  it 'should allow you to change the page size and have that reflected in the size of the result set' do
354
354
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
355
-
355
+
356
356
  @leaderboard.page_size = 5
357
-
357
+
358
358
  @leaderboard.total_pages.should be(5)
359
359
  @leaderboard.leaders(1).size.should be(5)
360
360
  end
361
361
 
362
362
  it 'should not allow you to set the page size to an invalid page size' do
363
363
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
364
-
364
+
365
365
  @leaderboard.page_size = 0
366
366
  @leaderboard.total_pages.should be(1)
367
367
  @leaderboard.leaders(1).size.should be(Leaderboard::DEFAULT_PAGE_SIZE)
@@ -369,18 +369,18 @@ describe 'Leaderboard' do
369
369
 
370
370
  it 'should return the correct information when calling score_and_rank_for' do
371
371
  rank_members_in_leaderboard
372
-
372
+
373
373
  data = @leaderboard.score_and_rank_for('member_1')
374
- data[:member].should == 'member_1'
375
- data[:score].should == 1
376
- data[:rank].should == 5
374
+ data[:member].should eql('member_1')
375
+ data[:score].should eql(1.0)
376
+ data[:rank].should eql(5)
377
377
  end
378
378
 
379
379
  it 'should allow you to remove members in a given score range' do
380
380
  rank_members_in_leaderboard
381
-
381
+
382
382
  @leaderboard.total_members.should be(5)
383
-
383
+
384
384
  @leaderboard.rank_member('cheater_1', 100)
385
385
  @leaderboard.rank_member('cheater_2', 101)
386
386
  @leaderboard.rank_member('cheater_3', 102)
@@ -388,9 +388,9 @@ describe 'Leaderboard' do
388
388
  @leaderboard.total_members.should be(8)
389
389
 
390
390
  @leaderboard.remove_members_in_score_range(100, 102)
391
-
391
+
392
392
  @leaderboard.total_members.should be(5)
393
-
393
+
394
394
  leaders = @leaderboard.leaders(1)
395
395
  leaders.each do |leader|
396
396
  leader[:score].should be < 100
@@ -400,24 +400,24 @@ describe 'Leaderboard' do
400
400
  it 'should allow you to merge leaderboards' do
401
401
  foo = Leaderboard.new('foo', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
402
402
  bar = Leaderboard.new('bar', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
403
-
403
+
404
404
  foo.rank_member('foo_1', 1)
405
405
  foo.rank_member('foo_2', 2)
406
406
  bar.rank_member('bar_1', 3)
407
407
  bar.rank_member('bar_2', 4)
408
408
  bar.rank_member('bar_3', 5)
409
-
409
+
410
410
  foobar_keys = foo.merge_leaderboards('foobar', ['bar'])
411
411
  foobar_keys.should be(5)
412
-
412
+
413
413
  foobar = Leaderboard.new('foobar', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
414
414
  foobar.total_members.should be(5)
415
-
415
+
416
416
  first_leader_in_foobar = foobar.leaders(1).first
417
- first_leader_in_foobar[:rank].should == 1
418
- first_leader_in_foobar[:member].should == 'bar_3'
419
- first_leader_in_foobar[:score].should == 5
420
-
417
+ first_leader_in_foobar[:rank].should eql(1)
418
+ first_leader_in_foobar[:member].should eql('bar_3')
419
+ first_leader_in_foobar[:score].should eql(5.0)
420
+
421
421
  foo.disconnect
422
422
  bar.disconnect
423
423
  foobar.disconnect
@@ -426,25 +426,25 @@ describe 'Leaderboard' do
426
426
  it 'should allow you to intersect leaderboards' do
427
427
  foo = Leaderboard.new('foo', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
428
428
  bar = Leaderboard.new('bar', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
429
-
429
+
430
430
  foo.rank_member('foo_1', 1)
431
431
  foo.rank_member('foo_2', 2)
432
432
  foo.rank_member('bar_3', 6)
433
433
  bar.rank_member('bar_1', 3)
434
434
  bar.rank_member('foo_1', 4)
435
435
  bar.rank_member('bar_3', 5)
436
-
437
- foobar_keys = foo.intersect_leaderboards('foobar', ['bar'], {:aggregate => :max})
436
+
437
+ foobar_keys = foo.intersect_leaderboards('foobar', ['bar'], {:aggregate => :max})
438
438
  foobar_keys.should be(2)
439
-
439
+
440
440
  foobar = Leaderboard.new('foobar', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1", :db => 15)
441
441
  foobar.total_members.should be(2)
442
-
442
+
443
443
  first_leader_in_foobar = foobar.leaders(1).first
444
- first_leader_in_foobar[:rank].should == 1
445
- first_leader_in_foobar[:member].should == 'bar_3'
446
- first_leader_in_foobar[:score].should == 6
447
-
444
+ first_leader_in_foobar[:rank].should eql(1)
445
+ first_leader_in_foobar[:member].should eql('bar_3')
446
+ first_leader_in_foobar[:score].should eql(6.0)
447
+
448
448
  foo.disconnect
449
449
  bar.disconnect
450
450
  foobar.disconnect
@@ -452,14 +452,14 @@ describe 'Leaderboard' do
452
452
 
453
453
  it 'should respect the with_scores option in the massage_leader_data method' do
454
454
  rank_members_in_leaderboard(25)
455
-
455
+
456
456
  @leaderboard.total_members.should be(25)
457
457
 
458
458
  leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
459
459
  leaders[0][:member].should_not be_nil
460
460
  leaders[0][:score].should be_nil
461
461
  leaders[0][:rank].should be_nil
462
-
462
+
463
463
  @leaderboard.page_size = 25
464
464
  leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
465
465
  leaders.size.should be(25)
@@ -469,7 +469,7 @@ describe 'Leaderboard' do
469
469
  leaders[0][:member].should_not be_nil
470
470
  leaders[0][:score].should_not be_nil
471
471
  leaders[0][:rank].should_not be_nil
472
-
472
+
473
473
  @leaderboard.page_size = 25
474
474
  leaders = @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
475
475
  leaders.size.should be(25)
@@ -477,14 +477,14 @@ describe 'Leaderboard' do
477
477
 
478
478
  it 'should return the correct number of pages when calling total_pages_in page size option' do
479
479
  rank_members_in_leaderboard(25)
480
-
480
+
481
481
  @leaderboard.total_pages_in(@leaderboard.leaderboard_name).should be(1)
482
482
  @leaderboard.total_pages_in(@leaderboard.leaderboard_name, 5).should be(5)
483
483
  end
484
484
 
485
485
  it 'should return the correct number of members when calling leaders with a page_size option' do
486
486
  rank_members_in_leaderboard(25)
487
-
487
+
488
488
  @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 5})).size.should be(5)
489
489
  @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 10})).size.should be(10)
490
490
  @leaderboard.leaders(2, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 10})).size.should be(10)
@@ -493,35 +493,35 @@ describe 'Leaderboard' do
493
493
 
494
494
  it 'should return the correct number of members when calling around_me with a page_size options' do
495
495
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
496
-
496
+
497
497
  leaders_around_me = @leaderboard.around_me('member_30', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 3}))
498
498
  leaders_around_me.size.should be(3)
499
- leaders_around_me[0][:member].should == 'member_31'
500
- leaders_around_me[2][:member].should == 'member_29'
499
+ leaders_around_me[0][:member].should eql('member_31')
500
+ leaders_around_me[2][:member].should eql('member_29')
501
501
  end
502
502
 
503
503
  it 'should return the correct information when calling percentile_for' do
504
504
  rank_members_in_leaderboard(12)
505
-
506
- @leaderboard.percentile_for('member_1').should == 0
507
- @leaderboard.percentile_for('member_2').should == 9
508
- @leaderboard.percentile_for('member_3').should == 17
509
- @leaderboard.percentile_for('member_4').should == 25
510
- @leaderboard.percentile_for('member_12').should == 92
505
+
506
+ @leaderboard.percentile_for('member_1').should eql(0)
507
+ @leaderboard.percentile_for('member_2').should eql(9)
508
+ @leaderboard.percentile_for('member_3').should eql(17)
509
+ @leaderboard.percentile_for('member_4').should eql(25)
510
+ @leaderboard.percentile_for('member_12').should eql(92)
511
511
  end
512
512
 
513
513
  it 'should not throw an exception when calling around_me with a member not in the leaderboard' do
514
514
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
515
-
515
+
516
516
  leaders_around_me = @leaderboard.around_me('jones', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 3}))
517
517
  leaders_around_me.size.should be(0)
518
518
  end
519
519
 
520
520
  it 'should not throw an exception when calling score_and_rank_for with a member not in the leaderboard' do
521
521
  score_and_rank_for_member = @leaderboard.score_and_rank_for('jones')
522
-
523
- score_and_rank_for_member[:member].should == 'jones'
524
- score_and_rank_for_member[:score].should == 0.0
522
+
523
+ score_and_rank_for_member[:member].should eql('jones')
524
+ score_and_rank_for_member[:score].should eql(0.0)
525
525
  score_and_rank_for_member[:rank].should be_nil
526
526
  end
527
527
 
@@ -542,9 +542,9 @@ describe 'Leaderboard' do
542
542
  end
543
543
 
544
544
  it 'should allow you to change the score for a member not in the leaderboard' do
545
- @leaderboard.score_for('jones').should == 0.0
545
+ @leaderboard.score_for('jones').should eql(0.0)
546
546
  @leaderboard.change_score_for('jones', 5)
547
- @leaderboard.score_for('jones').should == 5.0
547
+ @leaderboard.score_for('jones').should eql(5.0)
548
548
  end
549
549
 
550
550
  it 'should return the correct page when calling page_for a given member in the leaderboard' do
@@ -566,7 +566,7 @@ describe 'Leaderboard' do
566
566
  it 'should set an expire on the leaderboard' do
567
567
  rank_members_in_leaderboard
568
568
 
569
- @leaderboard.expire_leaderboard(3)
569
+ @leaderboard.expire_leaderboard(3)
570
570
  @redis_connection.ttl(@leaderboard.leaderboard_name).tap do |ttl|
571
571
  ttl.should be > 1
572
572
  ttl.should be <= 3
@@ -587,35 +587,55 @@ describe 'Leaderboard' do
587
587
  @leaderboard.total_members.should be(0)
588
588
  @leaderboard.rank_members('member_1', 1, 'member_10', 10)
589
589
  @leaderboard.total_members.should be(2)
590
- @leaderboard.leaders(1).first[:member].should == 'member_10'
590
+ @leaderboard.leaders(1).first[:member].should eql('member_10')
591
591
  end
592
592
 
593
593
  it 'should allow you to rank multiple members with an array' do
594
594
  @leaderboard.total_members.should be(0)
595
595
  @leaderboard.rank_members(['member_1', 1, 'member_10', 10])
596
596
  @leaderboard.total_members.should be(2)
597
- @leaderboard.leaders(1).first[:member].should == 'member_10'
597
+ @leaderboard.leaders(1).first[:member].should eql('member_10')
598
598
  end
599
599
 
600
600
  it 'should allow you to set reverse after creating a leaderboard to see results in highest-to-lowest or lowest-to-highest order' do
601
601
  rank_members_in_leaderboard(25)
602
602
 
603
603
  leaders = @leaderboard.leaders(1)
604
-
604
+
605
605
  leaders.size.should be(25)
606
- leaders[0][:member].should == 'member_25'
607
- leaders[-2][:member].should == 'member_2'
608
- leaders[-1][:member].should == 'member_1'
606
+ leaders[0][:member].should eql('member_25')
607
+ leaders[-2][:member].should eql('member_2')
608
+ leaders[-1][:member].should eql('member_1')
609
609
  leaders[-1][:score].to_i.should be(1)
610
610
 
611
611
  @leaderboard.reverse = true
612
612
 
613
613
  leaders = @leaderboard.leaders(1)
614
-
614
+
615
615
  leaders.size.should be(25)
616
- leaders[0][:member].should == 'member_1'
617
- leaders[-2][:member].should == 'member_24'
618
- leaders[-1][:member].should == 'member_25'
616
+ leaders[0][:member].should eql('member_1')
617
+ leaders[-2][:member].should eql('member_24')
618
+ leaders[-1][:member].should eql('member_25')
619
619
  leaders[-1][:score].to_i.should be(25)
620
620
  end
621
+
622
+ it 'should allow you to retrieve a given set of members from the leaderboard in a rank range' do
623
+ rank_members_in_leaderboard(25)
624
+
625
+ members = @leaderboard.members_from_rank_range(5, 9)
626
+ members.size.should be(5)
627
+ members[0][:member].should eql('member_21')
628
+ members[0][:score].to_i.should be(21)
629
+ members[4][:member].should eql('member_17')
630
+
631
+ members = @leaderboard.members_from_rank_range(1, 1)
632
+ members.size.should be(1)
633
+ members[0][:member].should eql('member_25')
634
+
635
+ members = @leaderboard.members_from_rank_range(-1, 26)
636
+ members.size.should be(25)
637
+ members[0][:member].should eql('member_25')
638
+ members[0][:score].to_i.should be(25)
639
+ members[24][:member].should eql('member_1')
640
+ end
621
641
  end