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 +5 -0
- data/Gemfile +5 -4
- data/README.rdoc +14 -3
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/leaderboard.gemspec +23 -20
- data/lib/leaderboard.rb +45 -21
- data/test/test_leaderboard.rb +47 -2
- metadata +68 -52
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"
|
7
|
-
gem "jeweler"
|
8
|
-
gem "rcov"
|
6
|
+
gem "bundler"
|
7
|
+
gem "jeweler"
|
8
|
+
gem "rcov"
|
9
|
+
gem "rdoc"
|
9
10
|
end
|
10
11
|
|
11
|
-
gem 'redis'
|
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.
|
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
|
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, :
|
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 '
|
44
|
-
|
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.
|
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 =
|
8
|
-
s.version = "2.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 = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
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 =
|
36
|
-
s.licenses = [
|
37
|
-
s.require_paths = [
|
38
|
-
s.rubygems_version =
|
39
|
-
s.summary =
|
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>, ["
|
50
|
-
s.add_development_dependency(%q<bundler>, ["
|
51
|
-
s.add_development_dependency(%q<jeweler>, ["
|
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>, ["
|
55
|
-
s.add_dependency(%q<bundler>, ["
|
56
|
-
s.add_dependency(%q<jeweler>, ["
|
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>, ["
|
61
|
-
s.add_dependency(%q<bundler>, ["
|
62
|
-
s.add_dependency(%q<jeweler>, ["
|
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.
|
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
|
-
|
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
|
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 =
|
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(
|
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,
|
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 =
|
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 =
|
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(
|
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,
|
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 =
|
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 =
|
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
|
231
|
-
transaction.zscore(leaderboard_name, member) if
|
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
|
239
|
-
if
|
240
|
-
if
|
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
|
250
|
-
if
|
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
|
data/test/test_leaderboard.rb
CHANGED
@@ -13,7 +13,7 @@ class TestLeaderboard < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_version
|
16
|
-
assert_equal '2.0.
|
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, :
|
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
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2011-11-07 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: redis
|
16
|
-
requirement: &
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: bundler
|
27
|
-
requirement: &
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
37
38
|
name: jeweler
|
38
|
-
requirement: &
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
44
45
|
type: :development
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
48
49
|
name: rcov
|
49
|
-
requirement: &
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
55
56
|
type: :development
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
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
|
-
|
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
|
-
|
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
|
-
|
93
|
-
segments:
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 2535082084974160649
|
108
|
+
segments:
|
94
109
|
- 0
|
95
|
-
|
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:
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: "0"
|
102
117
|
requirements: []
|
118
|
+
|
103
119
|
rubyforge_project:
|
104
|
-
rubygems_version: 1.8.
|
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
|