leaderboard 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,9 @@
1
+ # leaderboard 1.0.5 (2011-05-04)
2
+
3
+ * Updated Rakefile to run tests under ruby 1.8.7 and ruby 1.9.2
4
+ * Added `page_size` parameter to `total_pages_in` to allow for checking what if values in that scenario
5
+ * Added `page_size` parameter to `leaders` and `around_me` calls
6
+
1
7
  # leaderboard 1.0.4 (2011-04-26)
2
8
 
3
9
  * Minor bug fix
data/Rakefile CHANGED
@@ -58,7 +58,7 @@ REDIS_LOCATION = ENV['REDIS_LOCATION']
58
58
  task :default => :run
59
59
 
60
60
  desc "Run tests and manage server start/stop"
61
- task :run => [:start, :test, :stop]
61
+ task :run => [:start, :test_rubies, :stop]
62
62
 
63
63
  desc "Run rcov and manage server start/stop"
64
64
  task :rcoverage => [:start, :rcov, :stop]
@@ -87,3 +87,7 @@ task :stop do
87
87
  FileUtils.rm REDIS_PID
88
88
  end
89
89
  end
90
+
91
+ task :test_rubies do
92
+ system "rvm 1.8.7,1.9.2 rake test"
93
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.0.5
data/leaderboard.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{leaderboard}
8
- s.version = "1.0.4"
8
+ s.version = "1.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Czarnecki"]
12
- s.date = %q{2011-04-26}
12
+ s.date = %q{2011-05-04}
13
13
  s.description = %q{Leaderboards backed by Redis in Ruby}
14
14
  s.email = %q{dczarnecki@agoragames.com}
15
15
  s.extra_rdoc_files = [
data/lib/leaderboard.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'redis'
2
2
 
3
3
  class Leaderboard
4
- VERSION = '1.0.4'.freeze
4
+ VERSION = '1.0.5'.freeze
5
5
 
6
6
  DEFAULT_PAGE_SIZE = 25
7
7
  DEFAULT_REDIS_HOST = 'localhost'
@@ -60,8 +60,9 @@ class Leaderboard
60
60
  total_pages_in(@leaderboard_name)
61
61
  end
62
62
 
63
- def total_pages_in(leaderboard_name)
64
- (total_members_in(leaderboard_name) / @page_size.to_f).ceil
63
+ def total_pages_in(leaderboard_name, page_size = nil)
64
+ page_size ||= @page_size.to_f
65
+ (total_members_in(leaderboard_name) / page_size.to_f).ceil
65
66
  end
66
67
 
67
68
  def total_members_in_score_range(min_score, max_score)
@@ -124,27 +125,29 @@ class Leaderboard
124
125
  @redis_connection.zremrangebyscore(leaderboard_name, min_score, max_score)
125
126
  end
126
127
 
127
- def leaders(current_page, with_scores = true, with_rank = true, use_zero_index_for_rank = false)
128
- leaders_in(@leaderboard_name, current_page, with_scores, with_rank, use_zero_index_for_rank)
128
+ def leaders(current_page, with_scores = true, with_rank = true, use_zero_index_for_rank = false, page_size = nil)
129
+ leaders_in(@leaderboard_name, current_page, with_scores, with_rank, use_zero_index_for_rank, page_size)
129
130
  end
130
131
 
131
- def leaders_in(leaderboard_name, current_page, with_scores = true, with_rank = true, use_zero_index_for_rank = false)
132
+ def leaders_in(leaderboard_name, current_page, with_scores = true, with_rank = true, use_zero_index_for_rank = false, page_size = nil)
132
133
  if current_page < 1
133
134
  current_page = 1
134
135
  end
135
136
 
136
- if current_page > total_pages_in(leaderboard_name)
137
- current_page = total_pages_in(leaderboard_name)
137
+ page_size ||= @page_size
138
+
139
+ if current_page > total_pages_in(leaderboard_name, page_size)
140
+ current_page = total_pages_in(leaderboard_name, page_size)
138
141
  end
139
142
 
140
143
  index_for_redis = current_page - 1
141
144
 
142
- starting_offset = (index_for_redis * @page_size)
145
+ starting_offset = (index_for_redis * page_size)
143
146
  if starting_offset < 0
144
147
  starting_offset = 0
145
148
  end
146
149
 
147
- ending_offset = (starting_offset + @page_size) - 1
150
+ ending_offset = (starting_offset + page_size) - 1
148
151
 
149
152
  raw_leader_data = @redis_connection.zrevrange(leaderboard_name, starting_offset, ending_offset, :with_scores => with_scores)
150
153
  if raw_leader_data
@@ -154,19 +157,21 @@ class Leaderboard
154
157
  end
155
158
  end
156
159
 
157
- def around_me(member, with_scores = true, with_rank = true, use_zero_index_for_rank = false)
158
- around_me_in(@leaderboard_name, member, with_scores, with_rank, use_zero_index_for_rank)
160
+ def around_me(member, with_scores = true, with_rank = true, use_zero_index_for_rank = false, page_size = nil)
161
+ around_me_in(@leaderboard_name, member, with_scores, with_rank, use_zero_index_for_rank, page_size)
159
162
  end
160
163
 
161
- def around_me_in(leaderboard_name, member, with_scores = true, with_rank = true, use_zero_index_for_rank = false)
164
+ def around_me_in(leaderboard_name, member, with_scores = true, with_rank = true, use_zero_index_for_rank = false, page_size = nil)
162
165
  reverse_rank_for_member = @redis_connection.zrevrank(leaderboard_name, member)
163
166
 
164
- starting_offset = reverse_rank_for_member - (@page_size / 2)
167
+ page_size ||= @page_size
168
+
169
+ starting_offset = reverse_rank_for_member - (page_size / 2)
165
170
  if starting_offset < 0
166
171
  starting_offset = 0
167
172
  end
168
-
169
- ending_offset = (starting_offset + @page_size) - 1
173
+
174
+ ending_offset = (starting_offset + page_size) - 1
170
175
 
171
176
  raw_leader_data = @redis_connection.zrevrange(leaderboard_name, starting_offset, ending_offset, :with_scores => with_scores)
172
177
  if raw_leader_data
@@ -11,7 +11,7 @@ class TestLeaderboard < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  def test_version
14
- assert_equal '1.0.4', Leaderboard::VERSION
14
+ assert_equal '1.0.5', Leaderboard::VERSION
15
15
  end
16
16
 
17
17
  def test_initialize_with_defaults
@@ -274,6 +274,31 @@ class TestLeaderboard < Test::Unit::TestCase
274
274
  assert_equal 25, leaders.size
275
275
  end
276
276
 
277
+ def test_total_pages_in_with_new_page_size
278
+ add_members_to_leaderboard(25)
279
+
280
+ assert_equal 1, @leaderboard.total_pages_in(@leaderboard.leaderboard_name)
281
+ assert_equal 5, @leaderboard.total_pages_in(@leaderboard.leaderboard_name, 5)
282
+ end
283
+
284
+ def test_leaders_call_with_new_page_size
285
+ add_members_to_leaderboard(25)
286
+
287
+ assert_equal 5, @leaderboard.leaders(1, true, true, false, 5).size
288
+ assert_equal 10, @leaderboard.leaders(1, true, true, false, 10).size
289
+ assert_equal 10, @leaderboard.leaders(2, true, true, false, 10).size
290
+ assert_equal 5, @leaderboard.leaders(3, true, true, false, 10).size
291
+ end
292
+
293
+ def test_around_me_call_with_new_page_size
294
+ add_members_to_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
295
+
296
+ leaders_around_me = @leaderboard.around_me('member_30', true, true, false, 3)
297
+ assert_equal 3, leaders_around_me.size
298
+ assert_equal 'member_31', leaders_around_me[0][:member]
299
+ assert_equal 'member_29', leaders_around_me[2][:member]
300
+ end
301
+
277
302
  private
278
303
 
279
304
  def add_members_to_leaderboard(members_to_add = 5)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leaderboard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 4
10
- version: 1.0.4
9
+ - 5
10
+ version: 1.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Czarnecki
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-26 00:00:00 -04:00
18
+ date: 2011-05-04 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency