leaderboard 2.0.3 → 2.0.4
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.
- data/CHANGELOG.markdown +4 -0
- data/README.markdown +1 -0
- data/Rakefile +2 -6
- data/lib/leaderboard.rb +31 -0
- data/lib/leaderboard/version.rb +1 -1
- data/test/test_helper.rb +15 -0
- data/test/test_leaderboard.rb +16 -12
- data/test/test_rev_leaderboard.rb +16 -12
- metadata +8 -9
- data/.document +0 -5
data/CHANGELOG.markdown
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## leaderboard 2.0.4 (2012-02-29)
|
4
|
+
|
5
|
+
* Added `page_for(member, page_size = DEFAULT_PAGE_SIZE)` and `page_for_in(leaderboard_name, member, page_size = DEFAULT_PAGE_SIZE)` calls to allow you to determine the page where a member falls in the leaderboard
|
6
|
+
|
3
7
|
## leaderboard 2.0.3 (2012-02-22)
|
4
8
|
|
5
9
|
* Added `:reverse => false` to `Leaderboard::DEFAULT_OPTIONS` to support leaderboards sorted from lowest to highest score instead of highest to lowest score. (Thanks @siuying)
|
data/README.markdown
CHANGED
@@ -163,6 +163,7 @@ Get rank and score for an arbitrary list of members (e.g. friends):
|
|
163
163
|
score_and_rank_for(member): Retrieve the score and rank for a member in a single call
|
164
164
|
remove_members_in_score_range(min_score, max_score): Remove members from the leaderboard within a score range
|
165
165
|
percentile_for(member): Calculate the percentile for a given member
|
166
|
+
page_for(member, page_size): Determine the page where a member falls in the leaderboard
|
166
167
|
merge_leaderboards(destination, keys, options = {:aggregate => :min}): Merge leaderboards given by keys with this leaderboard into destination
|
167
168
|
intersect_leaderboards(destination, keys, options = {:aggregate => :min}): Intersect leaderboards given by keys with this leaderboard into destination
|
168
169
|
```
|
data/Rakefile
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
Bundler::GemHelper.install_tasks
|
3
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
4
2
|
require 'rake'
|
5
3
|
require 'rake/testtask'
|
4
|
+
|
6
5
|
Rake::TestTask.new(:test) do |test|
|
7
6
|
test.libs << 'lib' << 'test'
|
8
7
|
test.pattern = 'test/**/test_*.rb'
|
@@ -20,9 +19,6 @@ task :default => :run
|
|
20
19
|
desc "Run tests and manage server start/stop"
|
21
20
|
task :run => [:start, :test, :stop]
|
22
21
|
|
23
|
-
desc "Run rcov and manage server start/stop"
|
24
|
-
task :rcoverage => [:start, :rcov, :stop]
|
25
|
-
|
26
22
|
desc "Start the Redis server"
|
27
23
|
task :start do
|
28
24
|
redis_running = \
|
data/lib/leaderboard.rb
CHANGED
@@ -343,6 +343,37 @@ class Leaderboard
|
|
343
343
|
percentile
|
344
344
|
end
|
345
345
|
end
|
346
|
+
|
347
|
+
# Determine the page where a member falls in the leaderboard.
|
348
|
+
#
|
349
|
+
# @param member [String] Member name.
|
350
|
+
# @param page_size [int] Page size to be used in determining page location.
|
351
|
+
#
|
352
|
+
# @return the page where a member falls in the leaderboard.
|
353
|
+
def page_for(member, page_size = DEFAULT_PAGE_SIZE)
|
354
|
+
page_for_in(@leaderboard_name, member, page_size)
|
355
|
+
end
|
356
|
+
|
357
|
+
# Determine the page where a member falls in the named leaderboard.
|
358
|
+
#
|
359
|
+
# @param leaderboard [String] Name of the leaderboard.
|
360
|
+
# @param member [String] Member name.
|
361
|
+
# @param page_size [int] Page size to be used in determining page location.
|
362
|
+
#
|
363
|
+
# @return the page where a member falls in the leaderboard.
|
364
|
+
def page_for_in(leaderboard_name, member, page_size = DEFAULT_PAGE_SIZE)
|
365
|
+
rank_for_member = @reverse ?
|
366
|
+
@redis_connection.zrank(leaderboard_name, member) :
|
367
|
+
@redis_connection.zrevrank(leaderboard_name, member)
|
368
|
+
|
369
|
+
if rank_for_member.nil?
|
370
|
+
rank_for_member = 0
|
371
|
+
else
|
372
|
+
rank_for_member += 1
|
373
|
+
end
|
374
|
+
|
375
|
+
(rank_for_member.to_f / page_size.to_f).ceil
|
376
|
+
end
|
346
377
|
|
347
378
|
# Retrieve a page of leaders from the leaderboard.
|
348
379
|
#
|
data/lib/leaderboard/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -2,3 +2,18 @@ require 'rubygems'
|
|
2
2
|
require 'test/unit'
|
3
3
|
|
4
4
|
require 'leaderboard'
|
5
|
+
|
6
|
+
class LeaderboardTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_version
|
9
|
+
assert_equal '2.0.4', Leaderboard::VERSION
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def rank_members_in_leaderboard(members_to_add = 5)
|
15
|
+
1.upto(members_to_add) do |index|
|
16
|
+
@leaderboard.rank_member("member_#{index}", index)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/test/test_leaderboard.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class TestLeaderboard <
|
3
|
+
class TestLeaderboard < LeaderboardTest
|
4
4
|
def setup
|
5
5
|
@redis_connection = Redis.new(:host => "127.0.0.1")
|
6
6
|
@leaderboard = Leaderboard.new('name', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1")
|
@@ -11,11 +11,7 @@ class TestLeaderboard < Test::Unit::TestCase
|
|
11
11
|
@leaderboard.disconnect
|
12
12
|
@redis_connection.client.disconnect
|
13
13
|
end
|
14
|
-
|
15
|
-
def test_version
|
16
|
-
assert_equal '2.0.3', Leaderboard::VERSION
|
17
|
-
end
|
18
|
-
|
14
|
+
|
19
15
|
def test_initialize_with_defaults
|
20
16
|
assert_equal 'name', @leaderboard.leaderboard_name
|
21
17
|
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.page_size
|
@@ -456,11 +452,19 @@ class TestLeaderboard < Test::Unit::TestCase
|
|
456
452
|
assert_equal 5.0, @leaderboard.score_for('jones')
|
457
453
|
end
|
458
454
|
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
455
|
+
def test_page_for
|
456
|
+
assert_equal 0, @leaderboard.page_for('jones')
|
457
|
+
|
458
|
+
rank_members_in_leaderboard(20)
|
459
|
+
|
460
|
+
assert_equal 1, @leaderboard.page_for('member_17')
|
461
|
+
assert_equal 1, @leaderboard.page_for('member_11')
|
462
|
+
assert_equal 1, @leaderboard.page_for('member_10')
|
463
|
+
assert_equal 1, @leaderboard.page_for('member_1')
|
464
|
+
|
465
|
+
assert_equal 1, @leaderboard.page_for('member_17', 10)
|
466
|
+
assert_equal 1, @leaderboard.page_for('member_11', 10)
|
467
|
+
assert_equal 2, @leaderboard.page_for('member_10', 10)
|
468
|
+
assert_equal 2, @leaderboard.page_for('member_1', 10)
|
465
469
|
end
|
466
470
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class TestRevLeaderboard <
|
3
|
+
class TestRevLeaderboard < LeaderboardTest
|
4
4
|
def setup
|
5
5
|
@redis_connection = Redis.new(:host => "127.0.0.1")
|
6
6
|
@leaderboard = Leaderboard.new('name', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:reverse => true}), :host => "127.0.0.1")
|
@@ -11,11 +11,7 @@ class TestRevLeaderboard < Test::Unit::TestCase
|
|
11
11
|
@leaderboard.disconnect
|
12
12
|
@redis_connection.client.disconnect
|
13
13
|
end
|
14
|
-
|
15
|
-
def test_version
|
16
|
-
assert_equal '2.0.3', Leaderboard::VERSION
|
17
|
-
end
|
18
|
-
|
14
|
+
|
19
15
|
def test_initialize_with_defaults
|
20
16
|
assert_equal 'name', @leaderboard.leaderboard_name
|
21
17
|
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.page_size
|
@@ -456,11 +452,19 @@ class TestRevLeaderboard < Test::Unit::TestCase
|
|
456
452
|
assert_equal 5.0, @leaderboard.score_for('jones')
|
457
453
|
end
|
458
454
|
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
455
|
+
def test_page_for
|
456
|
+
assert_equal 0, @leaderboard.page_for('jones')
|
457
|
+
|
458
|
+
rank_members_in_leaderboard(20)
|
459
|
+
|
460
|
+
assert_equal 1, @leaderboard.page_for('member_17')
|
461
|
+
assert_equal 1, @leaderboard.page_for('member_11')
|
462
|
+
assert_equal 1, @leaderboard.page_for('member_10')
|
463
|
+
assert_equal 1, @leaderboard.page_for('member_1')
|
464
|
+
|
465
|
+
assert_equal 1, @leaderboard.page_for('member_10', 10)
|
466
|
+
assert_equal 1, @leaderboard.page_for('member_1', 10)
|
467
|
+
assert_equal 2, @leaderboard.page_for('member_17', 10)
|
468
|
+
assert_equal 2, @leaderboard.page_for('member_11', 10)
|
465
469
|
end
|
466
470
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leaderboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &70133210061060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70133210061060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70133210060620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70133210060620
|
36
36
|
description: Leaderboards backed by Redis in Ruby
|
37
37
|
email:
|
38
38
|
- dczarnecki@agoragames.com
|
@@ -40,7 +40,6 @@ executables: []
|
|
40
40
|
extensions: []
|
41
41
|
extra_rdoc_files: []
|
42
42
|
files:
|
43
|
-
- .document
|
44
43
|
- .gitignore
|
45
44
|
- .rvmrc
|
46
45
|
- CHANGELOG.markdown
|
@@ -70,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
69
|
version: '0'
|
71
70
|
segments:
|
72
71
|
- 0
|
73
|
-
hash:
|
72
|
+
hash: 182894351603387394
|
74
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
74
|
none: false
|
76
75
|
requirements:
|
@@ -79,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
78
|
version: '0'
|
80
79
|
segments:
|
81
80
|
- 0
|
82
|
-
hash:
|
81
|
+
hash: 182894351603387394
|
83
82
|
requirements: []
|
84
83
|
rubyforge_project: leaderboard
|
85
84
|
rubygems_version: 1.8.10
|