skillz 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9668abe2cc46fea6d1be7f4d83d010b3b448db83
4
+ data.tar.gz: 7d43232d6d2350c5ec6837abd1308c4b9f56e926
5
+ SHA512:
6
+ metadata.gz: e3a2d5f7ef1721ca20c7a508ecaa3de5cdd49248aba75dd625568de26dfbef4ddf6ec41593f70774aa33a8fe86ef5c795ecf8e8e0e5b1a82b8a9e533d0e01115
7
+ data.tar.gz: 3efb7706bf2a463910c45ff20948c680990928394310bffa93e7813daa876a25a4635e426a2a8dd39fe20532610f14221a8b6a4c4b9b27cb147e150211895c96
@@ -0,0 +1 @@
1
+ skillz
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p195
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-19mode
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+ gem "activesupport"
3
+
4
+ group :development do
5
+ gem "rspec"
6
+ gem "rdoc"
7
+ gem "bundler"
8
+ gem "simplecov"
9
+ gem "jeweler"
10
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 frausto
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,50 @@
1
+ # Skillz
2
+
3
+ Skillz is a Competitive Ranking System based upon others such as [TrueSkill](http://research.microsoft.com/en-us/projects/trueskill/details.aspx) among others.
4
+
5
+ ## Getting Started
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'skillz'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install skillz
18
+
19
+ ## Usage
20
+
21
+ example
22
+
23
+ # create players where 30 is their average score
24
+ # 4 is the level of uncertainty of their skill
25
+ # and the last is how long its been since their last match
26
+ # skill_level defaults to 25, and uncertainty defaults to skill_level/3
27
+ # if no last played time is given it ignores it
28
+
29
+ p1 = Skillz::Player.new(30, 4, Time.now - 4.days)
30
+ p2 = Skillz::Player.new(30, 4, Time.now - 20.days)
31
+ p3 = Skillz::Player.new
32
+ p4 = Skillz::Player.new
33
+
34
+ # create teams with the players you want in each, and their ranking
35
+ # as the second argument
36
+
37
+ team1 = Skillz::Team.new([p1, p2], 1)
38
+ team2 = Skillz::Team.new([p3, p4], 2)
39
+
40
+ Skillz::Match.score(Skillz::Team.new([p1, p2], 1), Skillz::Team.new([p2], 2))
41
+ # players are now update with their new skill_level and uncertainty_in_skill_level
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create new Pull Request
50
+ 6. Feel satisfied.
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "skillz"
18
+ gem.homepage = "http://github.com/frausto/skillz"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A ruby library implementing a competitive ranking system based on trueskill}
21
+ gem.description = %Q{A ruby library implementing a competitive ranking system based on trueskill and other similar systems. Built to address issues such as cheating, tournaments, team-play, matching, etc.. }
22
+ gem.email = "nrfrausto@gmail.com"
23
+ gem.authors = ["frausto"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rdoc/task'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "skillz #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,11 @@
1
+ require 'active_support/all'
2
+ require 'skillz/player'
3
+ require 'skillz/team'
4
+ require 'skillz/match'
5
+
6
+ module Skillz
7
+ INITIAL_SKILL_LEVEL = 25.0
8
+ UNCERTAINTY = INITIAL_SKILL_LEVEL/3.0
9
+ BETA = UNCERTAINTY*0.5
10
+ end
11
+
@@ -0,0 +1,39 @@
1
+ module Skillz
2
+ class Match
3
+
4
+ def self.score(*teams)
5
+ #set initial values
6
+ teams.each{|t| t.uncertainty; t.skill_level}
7
+
8
+ teams.each do |team1|
9
+ omega = 0.0
10
+ delta = 0.0
11
+ teams.each do |team2|
12
+ next if team1 == team2
13
+
14
+ ciq = Math.sqrt(team1.uncertainty + team2.uncertainty + (2*Skillz::BETA*Skillz::BETA))
15
+ piq = 1.0/(1+Math.exp((team2.skill_level-team1.skill_level)/ciq))
16
+ sigsq_to_ciq = team1.uncertainty/ciq
17
+
18
+ s = 0.0
19
+ if team2.rank > team1.rank
20
+ s = 1.0
21
+ elsif team2.rank == team1.rank
22
+ s = 0.5
23
+ end
24
+
25
+ omega += sigsq_to_ciq * (s-piq)
26
+ gamma = Math.sqrt(team1.uncertainty)/ciq
27
+ delta += gamma*sigsq_to_ciq/ciq*piq*(1-piq)
28
+ end
29
+
30
+ team1.players.map do |player|
31
+ uncertainty_squared = player.uncertainty_in_skill_level**2
32
+ player.skill_level += uncertainty_squared/team1.uncertainty * omega
33
+ player.uncertainty_in_skill_level *= Math.sqrt([1 - uncertainty_squared / team1.uncertainty * delta, 0.0001].max)
34
+ player
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ module Skillz
2
+ class Player
3
+
4
+ attr_accessor :skill_level, :uncertainty_in_skill_level
5
+
6
+ def initialize(skill_level=nil, uncertainty=nil, last_match_time=nil)
7
+ @skill_level = skill_level || Skillz::INITIAL_SKILL_LEVEL
8
+ @uncertainty_in_skill_level = uncertainty || Skillz::UNCERTAINTY
9
+ if last_match_time
10
+ days = (Time.now - last_match_time).to_i / (24 * 60 * 60)
11
+ time_decay = 1 + -Math.exp((days * -1.0)/365)
12
+ time_decay *= [[uncertainty_in_skill_level, 4].max, 10].min
13
+ @uncertainty_in_skill_level += time_decay
14
+ end
15
+ end
16
+
17
+ def adjusted_skill_level
18
+ @skill_level - @uncertainty_in_skill_level
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module Skillz
2
+ class Team
3
+
4
+ attr_accessor :rank, :players
5
+
6
+ def initialize(players, rank=nil)
7
+ @players = players
8
+ @rank = rank if rank.present?
9
+ end
10
+
11
+ def skill_level
12
+ @score ||= @players.map(&:skill_level).sum
13
+ end
14
+
15
+ def uncertainty
16
+ @uncertainty_squared ||= begin
17
+ @players.map do |player|
18
+ player.uncertainty_in_skill_level * player.uncertainty_in_skill_level
19
+ end.sum
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,71 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "skillz"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["frausto"]
12
+ s.date = "2013-08-16"
13
+ s.description = "A ruby library implementing a competitive ranking system based on trueskill and other similar systems. Built to address issues such as cheating, tournaments, team-play, matching, etc.. "
14
+ s.email = "nrfrausto@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".ruby-gemset",
21
+ ".ruby-version",
22
+ ".travis.yml",
23
+ "Gemfile",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/skillz.rb",
29
+ "lib/skillz/match.rb",
30
+ "lib/skillz/player.rb",
31
+ "lib/skillz/team.rb",
32
+ "skillz.gemspec",
33
+ "spec/skillz/match_spec.rb",
34
+ "spec/skillz/player_spec.rb",
35
+ "spec/skillz/team_spec.rb",
36
+ "spec/spec_helper.rb"
37
+ ]
38
+ s.homepage = "http://github.com/frausto/skillz"
39
+ s.licenses = ["MIT"]
40
+ s.require_paths = ["lib"]
41
+ s.rubygems_version = "2.0.3"
42
+ s.summary = "A ruby library implementing a competitive ranking system based on trueskill"
43
+
44
+ if s.respond_to? :specification_version then
45
+ s.specification_version = 4
46
+
47
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
49
+ s.add_development_dependency(%q<rspec>, [">= 0"])
50
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
51
+ s.add_development_dependency(%q<bundler>, [">= 0"])
52
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
53
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
54
+ else
55
+ s.add_dependency(%q<activesupport>, [">= 0"])
56
+ s.add_dependency(%q<rspec>, [">= 0"])
57
+ s.add_dependency(%q<rdoc>, [">= 0"])
58
+ s.add_dependency(%q<bundler>, [">= 0"])
59
+ s.add_dependency(%q<simplecov>, [">= 0"])
60
+ s.add_dependency(%q<jeweler>, [">= 0"])
61
+ end
62
+ else
63
+ s.add_dependency(%q<activesupport>, [">= 0"])
64
+ s.add_dependency(%q<rspec>, [">= 0"])
65
+ s.add_dependency(%q<rdoc>, [">= 0"])
66
+ s.add_dependency(%q<bundler>, [">= 0"])
67
+ s.add_dependency(%q<simplecov>, [">= 0"])
68
+ s.add_dependency(%q<jeweler>, [">= 0"])
69
+ end
70
+ end
71
+
@@ -0,0 +1,151 @@
1
+ require 'spec_helper'
2
+
3
+ describe Skillz::Match do
4
+ describe 'skill_level' do
5
+ it "two new players play each other" do
6
+ p1 = Skillz::Player.new
7
+ p2 = Skillz::Player.new
8
+
9
+ p1.skill_level.should == 25
10
+ p2.skill_level.should == 25
11
+
12
+ Skillz::Match.score(Skillz::Team.new([p1], 1), Skillz::Team.new([p2], 2))
13
+
14
+ p1.skill_level.round(7).should == 27.6352314
15
+ p2.skill_level.round(7).should == 22.3647686
16
+ end
17
+
18
+ it "high level loses to low level player" do
19
+ p1 = Skillz::Player.new(30)
20
+ p2 = Skillz::Player.new(10)
21
+
22
+ p1.skill_level.should == 30
23
+ p2.skill_level.should == 10
24
+
25
+ Skillz::Match.score(Skillz::Team.new([p1], 2), Skillz::Team.new([p2], 1))
26
+
27
+ p1.skill_level.round(7).should == 25.6770186
28
+ p2.skill_level.round(7).should == 14.3229814
29
+ end
30
+
31
+
32
+ it "low level loses to high level player" do
33
+ p1 = Skillz::Player.new(30)
34
+ p2 = Skillz::Player.new(10)
35
+
36
+ p1.skill_level.should == 30
37
+ p2.skill_level.should == 10
38
+
39
+ Skillz::Match.score(Skillz::Team.new([p1], 1), Skillz::Team.new([p2], 2))
40
+
41
+ p1.skill_level.round(7).should == 30.9474814
42
+ p2.skill_level.round(7).should == 9.0525186
43
+ end
44
+ end
45
+
46
+ describe 'uncertainty_in_skill_level' do
47
+ it "one ceratin player beats uncertain player" do
48
+ p1 = Skillz::Player.new(25, 2.3)
49
+ p2 = Skillz::Player.new(25, 10)
50
+
51
+ p1.skill_level.should == 25
52
+ p2.skill_level.should == 25
53
+ p1.uncertainty_in_skill_level.should == 2.3
54
+ p2.uncertainty_in_skill_level.should == 10
55
+
56
+ Skillz::Match.score(Skillz::Team.new([p1], 1), Skillz::Team.new([p2], 2))
57
+
58
+ p1.skill_level.round(7).should == 25.2235335
59
+ p2.skill_level.round(7).should == 20.7744132
60
+ p1.uncertainty_in_skill_level.round(7).should == 2.2978876
61
+ p2.uncertainty_in_skill_level.round(7).should == 9.2146587
62
+ end
63
+
64
+ it "one unceratin player beats certain player" do
65
+ p1 = Skillz::Player.new(25, 2.3)
66
+ p2 = Skillz::Player.new(25, 10)
67
+
68
+ p1.skill_level.should == 25
69
+ p2.skill_level.should == 25
70
+ p1.uncertainty_in_skill_level.should == 2.3
71
+ p2.uncertainty_in_skill_level.should == 10
72
+
73
+ Skillz::Match.score(Skillz::Team.new([p1], 2), Skillz::Team.new([p2], 1))
74
+
75
+ p1.skill_level.round(7).should == 24.7764665
76
+ p2.skill_level.round(7).should == 29.2255868
77
+ p1.uncertainty_in_skill_level.round(7).should == 2.2978876
78
+ p2.uncertainty_in_skill_level.round(7).should == 9.2146587
79
+ end
80
+
81
+
82
+ it "uncertain high level loses to certain low level player" do
83
+ p1 = Skillz::Player.new(30, 9.9)
84
+ p2 = Skillz::Player.new(10, 3)
85
+
86
+ p1.uncertainty_in_skill_level.should == 9.9
87
+ p2.uncertainty_in_skill_level.should == 3
88
+ p1.skill_level.should == 30
89
+ p2.skill_level.should == 10
90
+
91
+ Skillz::Match.score(Skillz::Team.new([p1], 2), Skillz::Team.new([p2], 1))
92
+
93
+ p1.skill_level.round(7).should == 23.0607762
94
+ p2.skill_level.round(7).should == 10.6372106
95
+ p1.uncertainty_in_skill_level.round(7).should == 9.5156031
96
+ p2.uncertainty_in_skill_level.round(7).should == 2.9968199
97
+ end
98
+
99
+
100
+ it "uncertain high level wins against certain low level" do
101
+ p1 = Skillz::Player.new(30, 9.9)
102
+ p2 = Skillz::Player.new(10, 3)
103
+
104
+ p1.uncertainty_in_skill_level.should == 9.9
105
+ p2.uncertainty_in_skill_level.should == 3
106
+ p1.skill_level.should == 30
107
+ p2.skill_level.should == 10
108
+
109
+ Skillz::Match.score(Skillz::Team.new([p1], 1), Skillz::Team.new([p2], 2))
110
+
111
+ p1.skill_level.round(7).should == 31.2933587
112
+ p2.skill_level.round(7).should == 9.8812343
113
+ p1.uncertainty_in_skill_level.round(7).should == 9.5156031
114
+ p2.uncertainty_in_skill_level.round(7).should == 2.9968199
115
+ end
116
+
117
+ it "certain high level loses to uncertain low level player" do
118
+ p1 = Skillz::Player.new(30, 3)
119
+ p2 = Skillz::Player.new(10, 9.9)
120
+
121
+ p1.uncertainty_in_skill_level.should == 3
122
+ p2.uncertainty_in_skill_level.should == 9.9
123
+ p1.skill_level.should == 30
124
+ p2.skill_level.should == 10
125
+
126
+ Skillz::Match.score(Skillz::Team.new([p1], 2), Skillz::Team.new([p2], 1))
127
+
128
+ p1.skill_level.round(7).should == 29.3627894
129
+ p2.skill_level.round(7).should == 16.9392238
130
+ p1.uncertainty_in_skill_level.round(7).should == 2.9968199
131
+ p2.uncertainty_in_skill_level.round(7).should == 9.5156031
132
+ end
133
+
134
+ it "certain high level wins against uncertain low level player" do
135
+ p1 = Skillz::Player.new(30, 3)
136
+ p2 = Skillz::Player.new(10, 9.9)
137
+
138
+ p1.uncertainty_in_skill_level.should == 3
139
+ p2.uncertainty_in_skill_level.should == 9.9
140
+ p1.skill_level.should == 30
141
+ p2.skill_level.should == 10
142
+
143
+ Skillz::Match.score(Skillz::Team.new([p1], 1), Skillz::Team.new([p2], 2))
144
+
145
+ p1.skill_level.round(7).should == 30.1187657
146
+ p2.skill_level.round(7).should == 8.7066413
147
+ p1.uncertainty_in_skill_level.round(7).should == 2.9968199
148
+ p2.uncertainty_in_skill_level.round(7).should == 9.5156031
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Skillz::Player do
4
+ it "should increase uncertainty based on when the last match was played" do
5
+ now = Time.now
6
+ Time.stub(:now => now)
7
+ Skillz::Player.new(25, 4, now - 60.days).uncertainty_in_skill_level.round(7).should == 4.6063338
8
+ Skillz::Player.new(25, 4, now - 10.days).uncertainty_in_skill_level.round(7).should == 4.1081014
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Skillz::Team do
4
+ end
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'skillz'
5
+
6
+ RSpec.configure do |config|
7
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: skillz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - frausto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jeweler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: 'A ruby library implementing a competitive ranking system based on trueskill
98
+ and other similar systems. Built to address issues such as cheating, tournaments,
99
+ team-play, matching, etc.. '
100
+ email: nrfrausto@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files:
104
+ - LICENSE.txt
105
+ - README.md
106
+ files:
107
+ - .ruby-gemset
108
+ - .ruby-version
109
+ - .travis.yml
110
+ - Gemfile
111
+ - LICENSE.txt
112
+ - README.md
113
+ - Rakefile
114
+ - VERSION
115
+ - lib/skillz.rb
116
+ - lib/skillz/match.rb
117
+ - lib/skillz/player.rb
118
+ - lib/skillz/team.rb
119
+ - skillz.gemspec
120
+ - spec/skillz/match_spec.rb
121
+ - spec/skillz/player_spec.rb
122
+ - spec/skillz/team_spec.rb
123
+ - spec/spec_helper.rb
124
+ homepage: http://github.com/frausto/skillz
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 2.0.3
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: A ruby library implementing a competitive ranking system based on trueskill
148
+ test_files: []