elo_rating 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72c73870b99ccb9fa0eb8d5ada07c4104af74f33
4
- data.tar.gz: f60fde89bad3ca68a36baf083dca5fa112da4a57
3
+ metadata.gz: ff2c8b533bcb1d0c0f97f9808ad584caa6f9ade1
4
+ data.tar.gz: 33e45431d2db490023b0171abd6871d6de086bb2
5
5
  SHA512:
6
- metadata.gz: 059f1564f4fbbc9064660f6ae6be567faed7e3c0787f3340a62718923b4b9f224e69cb6bc8f5281d0834c7559490aa16370f0d45c2119d347fb37bca8eb893a3
7
- data.tar.gz: f2c8fea968c72d13c49f00e77fb7a3934c3afe2f3c05d714ace015f7fbf5c3c113447772ef67cff9c3f92330d53d3cac4ce4dd172d0404349991c7f7a794595b
6
+ metadata.gz: f1d83200efa29b3365cbac274eedfc0b88a16337341b869d848730315b30ddd2d2fa83a88d2711280fcc91faab0cd0ac46afdfa92662434a88f487d1bf1836b1
7
+ data.tar.gz: 4e7834dadbaf1306d954cd6fe4e6a1914ed74057c89f200464fd4ada7af4729579e11d44e4f3430c837233e0a3043294681debbbd44548cadfd437ec7dc4da12
data/.document ADDED
@@ -0,0 +1,3 @@
1
+ README.md
2
+ lib/**/*.rb
3
+ LICENSE
data/README.md CHANGED
@@ -75,7 +75,7 @@ match = EloRating::Match.new
75
75
  match.add_player(rating: 1900, place: 1)
76
76
  match.add_player(rating: 2000, place: 2)
77
77
  match.add_player(rating: 2000, place: 3)
78
- match.updated_ratings # => [1973, 1997, 1931]
78
+ match.updated_ratings # => [1931, 1997, 1973]
79
79
  ```
80
80
 
81
81
  This is calculated as if the first player beat both of the other players and the second player beat the third.
@@ -184,7 +184,7 @@ Thanks to:
184
184
 
185
185
  * Divergent Informatics for their [multiplayer Elo
186
186
  calculator](http://elo.divergentinformatics.com/) used to verify calculations used in the development of this gem
187
- * [Ian Hecker](https://github.com/iain) for the original [Elo](https://github.com/iain/elo).
187
+ * [Ian Hecker](https://github.com/iain) for the original [Elo](https://github.com/iain/elo) gem.
188
188
 
189
189
  ## License
190
190
 
data/lib/elo_rating.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "elo_rating/version"
1
+ require 'elo_rating/version'
2
2
  require 'elo_rating/match'
3
3
  # :main: README.md
4
4
 
@@ -1,3 +1,4 @@
1
1
  module EloRating
2
- VERSION = "0.4.0"
2
+ # Gem version
3
+ VERSION = "1.0.0"
3
4
  end
@@ -4,19 +4,22 @@ describe EloRating do
4
4
  after(:each) do
5
5
  EloRating::k_factor = 24
6
6
  end
7
+
7
8
  describe '::k_factor' do
8
9
  it 'defaults to 24' do
9
10
  expect(EloRating::k_factor).to eql(24)
10
11
  end
11
12
  end
13
+
12
14
  describe '::k_factor=' do
13
15
  it 'sets the K-factor to an integer' do
14
16
  EloRating::k_factor = 10
15
17
  expect(EloRating::k_factor).to eql(10)
16
18
  end
17
19
  end
20
+
18
21
  describe '::set_k_factor' do
19
- it 'takes a block to determine the K-factor based on a player\'s rating' do
22
+ it "takes a block to determine the K-factor based on a player's rating" do
20
23
  EloRating::set_k_factor do |rating|
21
24
  if rating && rating > 1000
22
25
  15
@@ -26,7 +29,8 @@ describe EloRating do
26
29
  end
27
30
  expect(EloRating::k_factor(1001)).to eql 15
28
31
  end
29
- context 'given a block that doesn\'t handle nil ratings' do
32
+
33
+ context "given a block that doesn't handle nil ratings" do
30
34
  it 'raises an error' do
31
35
  expect do
32
36
  EloRating::set_k_factor do |rating|
@@ -36,20 +40,24 @@ describe EloRating do
36
40
  end
37
41
  end
38
42
  end
43
+
39
44
  describe '.expected_score' do
40
- it 'returns the odds of a player winning given their rating and their opponent\'s rating' do
45
+ it "returns the odds of a player winning given their rating and their opponent's rating" do
41
46
  expect(EloRating.expected_score(1200, 1000)).to be_within(0.0001).of(0.7597)
42
47
  end
43
48
  end
49
+
44
50
  describe '.rating_adjustment' do
45
51
  it 'returns the amount a rating should change given an expected score and an actual score' do
46
52
  expect(EloRating.rating_adjustment(0.75, 0)).to be_within(0.0001).of(-18.0)
47
53
  end
54
+
48
55
  it 'uses the K-factor' do
49
56
  expect(EloRating).to receive(:k_factor).and_return(24)
50
57
 
51
58
  EloRating.rating_adjustment(0.75, 0)
52
59
  end
60
+
53
61
  context 'custom numeric k-factor' do
54
62
  it 'uses the custom k-factor' do
55
63
  EloRating::k_factor = 10
@@ -57,6 +65,7 @@ describe EloRating do
57
65
  expect(EloRating.rating_adjustment(0.75, 0)).to be_within(0.0001).of(-7.5)
58
66
  end
59
67
  end
68
+
60
69
  context 'custom k-factor function' do
61
70
  it 'calls the function with the provided rating to determine the k-factor' do
62
71
  EloRating::set_k_factor do |rating|
@@ -75,6 +84,7 @@ describe EloRating do
75
84
  expect(EloRating.rating_adjustment(0.75, 0, rating: 2500)).to be_within(0.0001).of(-12.0)
76
85
  end
77
86
  end
87
+
78
88
  context 'provided with a nonce numeric k-factor' do
79
89
  it 'uses the provided k-factor' do
80
90
  expect(EloRating.rating_adjustment(0.75, 0, k_factor: 24)).to be_within(0.0001).of(-18.0)
data/spec/match_spec.rb CHANGED
@@ -10,6 +10,7 @@ describe EloRating::Match do
10
10
  expect(match.updated_ratings).to eql [1988, 2012]
11
11
  end
12
12
  end
13
+
13
14
  context 'match with 3 players and one winner' do
14
15
  it 'returns the updated ratings of all the players' do
15
16
  match = EloRating::Match.new
@@ -19,6 +20,7 @@ describe EloRating::Match do
19
20
  expect(match.updated_ratings).to eql [1931, 1985, 1985]
20
21
  end
21
22
  end
23
+
22
24
  context 'ranked game with 3 players' do
23
25
  it 'returns the updated ratings of all the players' do
24
26
  match = EloRating::Match.new
@@ -28,6 +30,7 @@ describe EloRating::Match do
28
30
  expect(match.updated_ratings).to eql [1931, 1997, 1973]
29
31
  end
30
32
  end
33
+
31
34
  context 'custom K-factor function' do
32
35
  it 'uses the custom K-factor function' do
33
36
  EloRating::set_k_factor do |rating|
@@ -42,6 +45,7 @@ describe EloRating::Match do
42
45
  EloRating::k_factor = 24
43
46
  end
44
47
  end
48
+
45
49
  context 'multiple winners specified' do
46
50
  it 'raises an error' do
47
51
  match = EloRating::Match.new
@@ -50,6 +54,7 @@ describe EloRating::Match do
50
54
  expect { match.updated_ratings }.to raise_error ArgumentError
51
55
  end
52
56
  end
57
+
53
58
  context 'place specified for one player but not all' do
54
59
  it 'raises an error' do
55
60
  match = EloRating::Match.new
@@ -68,12 +73,14 @@ describe EloRating::Match do
68
73
 
69
74
  match.add_player(rating: 2000)
70
75
  end
71
- it 'appends the new player to the match\'s player' do
76
+
77
+ it "appends the new player to the match's player" do
72
78
  match = EloRating::Match.new
73
79
  match.add_player(rating: 2000)
74
80
 
75
81
  expect(match.players.size).to eql 1
76
82
  end
83
+
77
84
  it 'returns the match itself so multiple calls can be chained' do
78
85
  match = EloRating::Match.new
79
86
  match.add_player(rating: 1000).add_player(rating: 2000)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elo_rating
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Holder
@@ -88,6 +88,7 @@ executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
+ - ".document"
91
92
  - ".gitignore"
92
93
  - Gemfile
93
94
  - LICENSE