leaderboard 2.0.0 → 2.0.1

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