leaderboard 2.0.0 → 2.0.1

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 CHANGED
@@ -1,3 +1,8 @@
1
+ # leaderboard 2.0.1 (2011-11-07)
2
+
3
+ * Allow for only single options to be passed to `leaders`, `around_me` and `ranked_in_list` methods - https://github.com/agoragames/leaderboard/issues/4
4
+ * Added `percentile_for(member)` and `percentile_for_in(leaderboard_name, member)` methods to calculate percentile for a given member
5
+
1
6
  # leaderboard 2.0.0 (2011-08-05)
2
7
 
3
8
  * Change `add_member` to `rank_member` - https://github.com/agoragames/leaderboard/issues/3
data/Gemfile CHANGED
@@ -3,10 +3,11 @@ source "http://rubygems.org"
3
3
  # Add dependencies to develop your gem here.
4
4
  # Include everything needed to run rake, tests, features, etc.
5
5
  group :development do
6
- gem "bundler", "~> 1.0.0"
7
- gem "jeweler", "~> 1.5.2"
8
- gem "rcov", ">= 0"
6
+ gem "bundler"
7
+ gem "jeweler"
8
+ gem "rcov"
9
+ gem "rdoc"
9
10
  end
10
11
 
11
- gem 'redis', "~> 2.2.0"
12
+ gem 'redis'
12
13
 
data/README.rdoc CHANGED
@@ -8,7 +8,7 @@ Builds off ideas proposed in http://blog.agoragames.com/2011/01/01/creating-high
8
8
 
9
9
  Install the gem:
10
10
 
11
- gem "leaderboard", "~> 2.0.0"
11
+ gem "leaderboard", "~> 2.0.1"
12
12
 
13
13
  Make sure your redis server is running! Redis configuration is outside the scope of this README, but
14
14
  check out the Redis documentation, http://redis.io/documentation.
@@ -77,10 +77,10 @@ Get page 1 in the leaderboard:
77
77
  ruby-1.9.2-p180 :025 > highscore_lb.leaders(1)
78
78
  => [{:member=>"member_10", :rank=>1, :score=>10.0}, {:member=>"member_9", :rank=>2, :score=>9.0}, {:member=>"member_8", :rank=>3, :score=>8.0}, {:member=>"member_7", :rank=>4, :score=>7.0}, {:member=>"member_6", :rank=>5, :score=>6.0}, {:member=>"member_5", :rank=>6, :score=>5.0}, {:member=>"member_4", :rank=>7, :score=>4.0}, {:member=>"member_3", :rank=>8, :score=>3.0}, {:member=>"member_2", :rank=>9, :score=>2.0}, {:member=>"member_1", :rank=>10, :score=>1.0}]
79
79
 
80
- You can pass various options to the calls `leaders`, `around_me` and `ranked_in_list`. Valid options are :with_scores, :with_rank, :use_zero_index_for_rank and :page_size.
80
+ You can pass various options to the calls `leaders`, `around_me` and `ranked_in_list`. Valid options are `:with_scores`, `:with_rank`, `:use_zero_index_for_rank` and `:page_size`.
81
81
  Below is an example of retrieving the first page in the leaderboard without ranks:
82
82
 
83
- ruby-1.9.2-p180 :026 > highscore_lb.leaders(1, :with_scores => true, :with_rank => false, :use_zero_index_for_rank => false)
83
+ ruby-1.9.2-p180 :026 > highscore_lb.leaders(1, :with_rank => false)
84
84
  => [{:member=>"member_10", :score=>9.0}, {:member=>"member_9", :score=>7.0}, {:member=>"member_8", :score=>5.0}, {:member=>"member_7", :score=>3.0}, {:member=>"member_6", :score=>1.0}, {:member=>"member_5", :score=>0.0}, {:member=>"member_4", :score=>0.0}, {:member=>"member_3", :score=>0.0}, {:member=>"member_2", :score=>0.0}, {:member=>"member_1", :score=>0.0}]
85
85
 
86
86
  Below is an example of retrieving the first page in the leaderboard without scores or ranks:
@@ -120,6 +120,7 @@ Get rank and score for an arbitrary list of members (e.g. friends):
120
120
  check_member?(member): Check to see whether member is in the leaderboard
121
121
  score_and_rank_for(member): Retrieve the score and rank for a member in a single call
122
122
  remove_members_in_score_range(min_score, max_score): Remove members from the leaderboard within a score range
123
+ percentile_for(member): Calculate the percentile for a given member
123
124
  merge_leaderboards(destination, keys, options = {:aggregate => :min}): Merge leaderboards given by keys with this leaderboard into destination
124
125
  intersect_leaderboards(destination, keys, options = {:aggregate => :min}): Intersect leaderboards given by keys with this leaderboard into destination
125
126
 
@@ -178,6 +179,16 @@ Average time to request an arbitrary page from the leaderboard:
178
179
  == Future Ideas
179
180
 
180
181
  * Bulk insert
182
+
183
+ == Ports
184
+
185
+ The following ports have been made of the leaderboard gem.
186
+
187
+ * Java: https://github.com/agoragames/java-leaderboard
188
+ * NodeJS: https://github.com/omork/node-leaderboard
189
+ * PHP: https://github.com/agoragames/php-leaderboard
190
+ * Python: https://github.com/agoragames/python-leaderboard
191
+ * Scala: https://github.com/agoragames/scala-leaderboard
181
192
 
182
193
  == Contributing to leaderboard
183
194
 
data/Rakefile CHANGED
@@ -40,8 +40,8 @@ Rcov::RcovTask.new do |test|
40
40
  test.verbose = true
41
41
  end
42
42
 
43
- require 'rake/rdoctask'
44
- Rake::RDocTask.new do |rdoc|
43
+ require 'rdoc/task'
44
+ RDoc::Task.new do |rdoc|
45
45
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
46
 
47
47
  rdoc.rdoc_dir = 'rdoc'
@@ -89,5 +89,5 @@ task :stop do
89
89
  end
90
90
 
91
91
  task :test_rubies do
92
- system "rvm 1.8.7@leaderboard_gem,1.9.2@leaderboard_gem rake test"
92
+ system "rvm 1.8.7@leaderboard_gem,1.9.2@leaderboard_gem do rake test"
93
93
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.0.1
data/leaderboard.gemspec CHANGED
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{leaderboard}
8
- s.version = "2.0.0"
7
+ s.name = "leaderboard"
8
+ s.version = "2.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{David Czarnecki}]
12
- s.date = %q{2011-08-17}
13
- s.description = %q{Leaderboards backed by Redis in Ruby}
14
- s.email = %q{dczarnecki@agoragames.com}
11
+ s.authors = ["David Czarnecki"]
12
+ s.date = "2011-11-07"
13
+ s.description = "Leaderboards backed by Redis in Ruby"
14
+ s.email = "dczarnecki@agoragames.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -32,11 +32,11 @@ Gem::Specification.new do |s|
32
32
  "test/test.conf",
33
33
  "test/test_leaderboard.rb"
34
34
  ]
35
- s.homepage = %q{http://github.com/agoragames/leaderboard}
36
- s.licenses = [%q{MIT}]
37
- s.require_paths = [%q{lib}]
38
- s.rubygems_version = %q{1.8.6}
39
- s.summary = %q{Leaderboards backed by Redis in Ruby}
35
+ s.homepage = "http://github.com/agoragames/leaderboard"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.11"
39
+ s.summary = "Leaderboards backed by Redis in Ruby"
40
40
  s.test_files = [
41
41
  "test/helper.rb",
42
42
  "test/test_leaderboard.rb"
@@ -46,21 +46,24 @@ Gem::Specification.new do |s|
46
46
  s.specification_version = 3
47
47
 
48
48
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
- s.add_runtime_dependency(%q<redis>, ["~> 2.2.0"])
50
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
51
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
49
+ s.add_runtime_dependency(%q<redis>, [">= 0"])
50
+ s.add_development_dependency(%q<bundler>, [">= 0"])
51
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
52
52
  s.add_development_dependency(%q<rcov>, [">= 0"])
53
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
53
54
  else
54
- s.add_dependency(%q<redis>, ["~> 2.2.0"])
55
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
56
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
55
+ s.add_dependency(%q<redis>, [">= 0"])
56
+ s.add_dependency(%q<bundler>, [">= 0"])
57
+ s.add_dependency(%q<jeweler>, [">= 0"])
57
58
  s.add_dependency(%q<rcov>, [">= 0"])
59
+ s.add_dependency(%q<rdoc>, [">= 0"])
58
60
  end
59
61
  else
60
- s.add_dependency(%q<redis>, ["~> 2.2.0"])
61
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
62
+ s.add_dependency(%q<redis>, [">= 0"])
63
+ s.add_dependency(%q<bundler>, [">= 0"])
64
+ s.add_dependency(%q<jeweler>, [">= 0"])
63
65
  s.add_dependency(%q<rcov>, [">= 0"])
66
+ s.add_dependency(%q<rdoc>, [">= 0"])
64
67
  end
65
68
  end
66
69
 
data/lib/leaderboard.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'redis'
2
2
 
3
3
  class Leaderboard
4
- VERSION = '2.0.0'.freeze
4
+ VERSION = '2.0.1'.freeze
5
5
 
6
6
  DEFAULT_PAGE_SIZE = 25
7
7
  DEFAULT_OPTIONS = {
@@ -23,7 +23,7 @@ class Leaderboard
23
23
  }
24
24
 
25
25
  attr_reader :leaderboard_name
26
- attr_accessor :page_size
26
+ attr_reader :page_size
27
27
 
28
28
  def initialize(leaderboard_name, options = DEFAULT_OPTIONS, redis_options = DEFAULT_REDIS_OPTIONS)
29
29
  @leaderboard_name = leaderboard_name
@@ -162,16 +162,32 @@ class Leaderboard
162
162
  @redis_connection.zremrangebyscore(leaderboard_name, min_score, max_score)
163
163
  end
164
164
 
165
- def leaders(current_page, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
165
+ def percentile_for(member)
166
+ percentile_for_in(@leaderboard_name, member)
167
+ end
168
+
169
+ def percentile_for_in(leaderboard_name, member)
170
+ responses = @redis_connection.multi do |transaction|
171
+ transaction.zcard(leaderboard_name)
172
+ transaction.zrevrank(leaderboard_name, member)
173
+ end
174
+
175
+ ((responses[0] - responses[1] - 1).to_f / responses[0].to_f * 100).ceil
176
+ end
177
+
178
+ def leaders(current_page, options = {})
166
179
  leaders_in(@leaderboard_name, current_page, options)
167
180
  end
168
181
 
169
- def leaders_in(leaderboard_name, current_page, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
182
+ def leaders_in(leaderboard_name, current_page, options = {})
183
+ leaderboard_options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS.dup
184
+ leaderboard_options.merge!(options)
185
+
170
186
  if current_page < 1
171
187
  current_page = 1
172
188
  end
173
189
 
174
- page_size = validate_page_size(options[:page_size]) || @page_size
190
+ page_size = validate_page_size(leaderboard_options[:page_size]) || @page_size
175
191
 
176
192
  if current_page > total_pages_in(leaderboard_name, page_size)
177
193
  current_page = total_pages_in(leaderboard_name, page_size)
@@ -188,20 +204,23 @@ class Leaderboard
188
204
 
189
205
  raw_leader_data = @redis_connection.zrevrange(leaderboard_name, starting_offset, ending_offset, :with_scores => false)
190
206
  if raw_leader_data
191
- return ranked_in_list_in(leaderboard_name, raw_leader_data, options)
207
+ return ranked_in_list_in(leaderboard_name, raw_leader_data, leaderboard_options)
192
208
  else
193
209
  return []
194
210
  end
195
211
  end
196
212
 
197
- def around_me(member, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
213
+ def around_me(member, options = {})
198
214
  around_me_in(@leaderboard_name, member, options)
199
215
  end
200
216
 
201
- def around_me_in(leaderboard_name, member, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
217
+ def around_me_in(leaderboard_name, member, options = {})
218
+ leaderboard_options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS.dup
219
+ leaderboard_options.merge!(options)
220
+
202
221
  reverse_rank_for_member = @redis_connection.zrevrank(leaderboard_name, member)
203
222
 
204
- page_size = validate_page_size(options[:page_size]) || @page_size
223
+ page_size = validate_page_size(leaderboard_options[:page_size]) || @page_size
205
224
 
206
225
  starting_offset = reverse_rank_for_member - (page_size / 2)
207
226
  if starting_offset < 0
@@ -212,42 +231,47 @@ class Leaderboard
212
231
 
213
232
  raw_leader_data = @redis_connection.zrevrange(leaderboard_name, starting_offset, ending_offset, :with_scores => false)
214
233
  if raw_leader_data
215
- return ranked_in_list_in(leaderboard_name, raw_leader_data, options)
234
+ return ranked_in_list_in(leaderboard_name, raw_leader_data, leaderboard_options)
216
235
  else
217
236
  return []
218
237
  end
219
238
  end
220
239
 
221
- def ranked_in_list(members, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
240
+ def ranked_in_list(members, options = {})
222
241
  ranked_in_list_in(@leaderboard_name, members, options)
223
242
  end
224
243
 
225
- def ranked_in_list_in(leaderboard_name, members, options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
244
+ def ranked_in_list_in(leaderboard_name, members, options = {})
245
+ leaderboard_options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS.dup
246
+ leaderboard_options.merge!(options)
247
+
226
248
  ranks_for_members = []
227
249
 
228
250
  responses = @redis_connection.multi do |transaction|
229
251
  members.each do |member|
230
- transaction.zrevrank(leaderboard_name, member) if options[:with_rank]
231
- transaction.zscore(leaderboard_name, member) if options[:with_scores]
252
+ transaction.zrevrank(leaderboard_name, member) if leaderboard_options[:with_rank]
253
+ transaction.zscore(leaderboard_name, member) if leaderboard_options[:with_scores]
232
254
  end
233
255
  end
234
256
 
235
257
  members.each_with_index do |member, index|
236
258
  data = {}
237
259
  data[:member] = member
238
- if options[:with_scores]
239
- if options[:with_rank]
240
- if options[:use_zero_index_for_rank]
260
+ if leaderboard_options[:with_scores]
261
+ if leaderboard_options[:with_rank]
262
+ if leaderboard_options[:use_zero_index_for_rank]
241
263
  data[:rank] = responses[index * 2]
242
264
  else
243
265
  data[:rank] = responses[index * 2] + 1
244
266
  end
267
+
268
+ data[:score] = responses[index * 2 + 1].to_f
269
+ else
270
+ data[:score] = responses[index].to_f
245
271
  end
246
-
247
- data[:score] = responses[index * 2 + 1].to_f
248
272
  else
249
- if options[:with_rank]
250
- if options[:use_zero_index_for_rank]
273
+ if leaderboard_options[:with_rank]
274
+ if leaderboard_options[:use_zero_index_for_rank]
251
275
  data[:rank] = responses[index]
252
276
  else
253
277
  data[:rank] = responses[index] + 1
@@ -13,7 +13,7 @@ class TestLeaderboard < Test::Unit::TestCase
13
13
  end
14
14
 
15
15
  def test_version
16
- assert_equal '2.0.0', Leaderboard::VERSION
16
+ assert_equal '2.0.1', Leaderboard::VERSION
17
17
  end
18
18
 
19
19
  def test_initialize_with_defaults
@@ -134,7 +134,7 @@ class TestLeaderboard < Test::Unit::TestCase
134
134
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
135
135
 
136
136
  assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.total_members
137
- leaders = @leaderboard.leaders(1, {:with_scores => false, :with_ranks => false})
137
+ leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
138
138
 
139
139
  member_25 = {:member => 'member_25'}
140
140
  assert_equal member_25, leaders[0]
@@ -143,6 +143,41 @@ class TestLeaderboard < Test::Unit::TestCase
143
143
  assert_equal member_1, leaders[24]
144
144
  end
145
145
 
146
+ def test_leaders_with_only_various_options_should_respect_other_defaults
147
+ rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE + 1)
148
+
149
+ leaders = @leaderboard.leaders(1, :page_size => 1)
150
+ assert_equal 1, leaders.size
151
+
152
+ leaders = @leaderboard.leaders(1, :with_rank => false)
153
+ assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
154
+ member_26 = {:member => 'member_26', :score => 26}
155
+ member_25 = {:member => 'member_25', :score => 25}
156
+ member_24 = {:member => 'member_24', :score => 24}
157
+ assert_equal member_26, leaders[0]
158
+ assert_equal member_25, leaders[1]
159
+ assert_equal member_24, leaders[2]
160
+
161
+ leaders = @leaderboard.leaders(1, :with_scores => false)
162
+ assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
163
+ member_26 = {:member => 'member_26', :rank => 1}
164
+ member_25 = {:member => 'member_25', :rank => 2}
165
+ assert_equal member_26, leaders[0]
166
+ assert_equal member_25, leaders[1]
167
+
168
+ leaders = @leaderboard.leaders(1, :with_scores => false, :with_rank => false)
169
+ assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
170
+ member_26 = {:member => 'member_26'}
171
+ member_25 = {:member => 'member_25'}
172
+ assert_equal member_26, leaders[0]
173
+ assert_equal member_25, leaders[1]
174
+
175
+ leaders = @leaderboard.leaders(1, :with_rank => false, :page_size => 1)
176
+ assert_equal 1, leaders.size
177
+ member_26 = {:member => 'member_26', :score => 26}
178
+ assert_equal member_26, leaders[0]
179
+ end
180
+
146
181
  def test_around_me
147
182
  rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
148
183
 
@@ -374,6 +409,16 @@ class TestLeaderboard < Test::Unit::TestCase
374
409
  assert_equal 'member_29', leaders_around_me[2][:member]
375
410
  end
376
411
 
412
+ def test_percentile_for
413
+ rank_members_in_leaderboard(12)
414
+
415
+ assert_equal 0, @leaderboard.percentile_for('member_1')
416
+ assert_equal 9, @leaderboard.percentile_for('member_2')
417
+ assert_equal 17, @leaderboard.percentile_for('member_3')
418
+ assert_equal 25, @leaderboard.percentile_for('member_4')
419
+ assert_equal 92, @leaderboard.percentile_for('member_12')
420
+ end
421
+
377
422
  private
378
423
 
379
424
  def rank_members_in_leaderboard(members_to_add = 5)
metadata CHANGED
@@ -1,68 +1,82 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: leaderboard
3
- version: !ruby/object:Gem::Version
4
- version: 2.0.0
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 2.0.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - David Czarnecki
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-17 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2011-11-07 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: redis
16
- requirement: &70114074547140 !ruby/object:Gem::Requirement
17
+ requirement: &id001 !ruby/object:Gem::Requirement
17
18
  none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 2.2.0
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70114074547140
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: bundler
27
- requirement: &70114074545640 !ruby/object:Gem::Requirement
28
+ requirement: &id002 !ruby/object:Gem::Requirement
28
29
  none: false
29
- requirements:
30
- - - ~>
31
- - !ruby/object:Gem::Version
32
- version: 1.0.0
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *70114074545640
36
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
37
38
  name: jeweler
38
- requirement: &70114074543920 !ruby/object:Gem::Requirement
39
+ requirement: &id003 !ruby/object:Gem::Requirement
39
40
  none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: 1.5.2
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
44
45
  type: :development
45
46
  prerelease: false
46
- version_requirements: *70114074543920
47
- - !ruby/object:Gem::Dependency
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
48
49
  name: rcov
49
- requirement: &70114074539440 !ruby/object:Gem::Requirement
50
+ requirement: &id004 !ruby/object:Gem::Requirement
50
51
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
55
56
  type: :development
56
57
  prerelease: false
57
- version_requirements: *70114074539440
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rdoc
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
58
70
  description: Leaderboards backed by Redis in Ruby
59
71
  email: dczarnecki@agoragames.com
60
72
  executables: []
73
+
61
74
  extensions: []
62
- extra_rdoc_files:
75
+
76
+ extra_rdoc_files:
63
77
  - LICENSE.txt
64
78
  - README.rdoc
65
- files:
79
+ files:
66
80
  - .document
67
81
  - .rvmrc
68
82
  - CHANGELOG.markdown
@@ -78,33 +92,35 @@ files:
78
92
  - test/test.conf
79
93
  - test/test_leaderboard.rb
80
94
  homepage: http://github.com/agoragames/leaderboard
81
- licenses:
95
+ licenses:
82
96
  - MIT
83
97
  post_install_message:
84
98
  rdoc_options: []
85
- require_paths:
99
+
100
+ require_paths:
86
101
  - lib
87
- required_ruby_version: !ruby/object:Gem::Requirement
102
+ required_ruby_version: !ruby/object:Gem::Requirement
88
103
  none: false
89
- requirements:
90
- - - ! '>='
91
- - !ruby/object:Gem::Version
92
- version: '0'
93
- segments:
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 2535082084974160649
108
+ segments:
94
109
  - 0
95
- hash: -2495258638232902776
96
- required_rubygems_version: !ruby/object:Gem::Requirement
110
+ version: "0"
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
112
  none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: "0"
102
117
  requirements: []
118
+
103
119
  rubyforge_project:
104
- rubygems_version: 1.8.6
120
+ rubygems_version: 1.8.11
105
121
  signing_key:
106
122
  specification_version: 3
107
123
  summary: Leaderboards backed by Redis in Ruby
108
- test_files:
124
+ test_files:
109
125
  - test/helper.rb
110
126
  - test/test_leaderboard.rb