elo 0.0.3.alpha → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -43,18 +43,20 @@ There is more than one way to do it, choose whatever works from your other code:
43
43
  game7 = bob.versus(jane)
44
44
  game7.result = 1 # result is in perspective of bob, so bob wins
45
45
 
46
+ game8 = bob.versus(jane, :result => 0) # jane wins
47
+
46
48
  You can get all kinds of info from a player:
47
49
 
48
- bob.rating # => 1084
50
+ bob.rating # => 1080
49
51
  bob.pro? # => false
50
52
  bob.starter? # => true
51
- bob.games_played # => 7
52
- bob.games # => [ game1, game2, ... game7 ]
53
+ bob.games_played # => 8
54
+ bob.games # => [ game1, game2, ... game8 ]
53
55
 
54
56
  Or get a list of players:
55
57
 
56
58
  Elo::Player.all # => [ bob, jane ]
57
- Elo::Game.all # => [ game1, game2, ... game7 ]
59
+ Elo::Game.all # => [ game1, game2, ... game8 ]
58
60
 
59
61
 
60
62
  == Configuration
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3.alpha
1
+ 0.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{elo}
8
- s.version = "0.0.3.alpha"
8
+ s.version = "0.1.0"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Iain Hecker"]
12
- s.date = %q{2010-03-15}
12
+ s.date = %q{2010-03-18}
13
13
  s.description = %q{The Elo rating system is a method for calculating the relative skill levels of players in two-player games such as cess and Go.}
14
14
  s.email = %q{iain@iain.nl}
15
15
  s.extra_rdoc_files = [
@@ -23,13 +23,19 @@ module Elo
23
23
  # objects to update their scores.
24
24
  def process_result(result)
25
25
  @result = result
26
- one.send(:played, self)
27
- two.send(:played, self)
28
- save
29
- self
26
+ calculate
30
27
  end
31
28
  alias result= process_result
32
29
 
30
+ def calculate
31
+ if result
32
+ one.send(:played, self)
33
+ two.send(:played, self)
34
+ save
35
+ end
36
+ self
37
+ end
38
+
33
39
  # Player +:one+ has won!
34
40
  # This is a shortcut method for setting the score to 1
35
41
  def win
@@ -69,6 +75,10 @@ module Elo
69
75
  @ratings ||= { one => rating_one, two => rating_two }
70
76
  end
71
77
 
78
+ def inspect
79
+ "game"
80
+ end
81
+
72
82
  private
73
83
 
74
84
  # Create an Elo::Rating object for player one
@@ -68,26 +68,30 @@ module Elo
68
68
 
69
69
  # Start a game with another player. At this point, no
70
70
  # result is known and nothing really happens.
71
- def versus(other_player)
72
- Game.new(:one => self, :two => other_player)
71
+ def versus(other_player, options = {})
72
+ Game.new(options.merge(:one => self, :two => other_player)).calculate
73
73
  end
74
74
 
75
75
  # Start a game with another player and set the score
76
76
  # immediately.
77
- def wins_from(other_player)
78
- versus(other_player).win
77
+ def wins_from(other_player, options = {})
78
+ versus(other_player, options).win
79
79
  end
80
80
 
81
81
  # Start a game with another player and set the score
82
82
  # immediately.
83
- def plays_draw(other_player)
84
- versus(other_player).draw
83
+ def plays_draw(other_player, options = {})
84
+ versus(other_player, options).draw
85
85
  end
86
86
 
87
87
  # Start a game with another player and set the score
88
88
  # immediately.
89
- def loses_from(other_player)
90
- versus(other_player).lose
89
+ def loses_from(other_player, options = {})
90
+ versus(other_player, options).lose
91
+ end
92
+
93
+ def inspect
94
+ "player"
91
95
  end
92
96
 
93
97
  private
@@ -27,15 +27,17 @@ describe "Elo" do
27
27
  game7 = bob.versus(jane)
28
28
  game7.result = 1
29
29
 
30
- bob.rating.should == 1084
31
- jane.rating.should == 1409
30
+ game8 = bob.versus(jane, :result => 0)
31
+
32
+ bob.rating.should == 1080
33
+ jane.rating.should == 1412
32
34
  bob.should_not be_pro
33
35
  bob.should be_starter
34
- bob.games_played.should == 7
35
- bob.games.should == [ game1, game2, game3, game4, game5, game6, game7 ]
36
+ bob.games_played.should == 8
37
+ bob.games.should == [ game1, game2, game3, game4, game5, game6, game7, game8 ]
36
38
 
37
39
  Elo::Player.all.should == [ bob, jane ]
38
- Elo::Game.all.should == [ game1, game2, game3, game4, game5, game6, game7 ]
40
+ Elo::Game.all.should == [ game1, game2, game3, game4, game5, game6, game7, game8 ]
39
41
 
40
42
  end
41
43
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elo
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 3
9
- - alpha
10
- version: 0.0.3.alpha
9
+ version: 0.1.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Iain Hecker
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-03-15 00:00:00 +01:00
17
+ date: 2010-03-18 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -89,13 +88,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
88
  version: "0"
90
89
  required_rubygems_version: !ruby/object:Gem::Requirement
91
90
  requirements:
92
- - - ">"
91
+ - - ">="
93
92
  - !ruby/object:Gem::Version
94
93
  segments:
95
- - 1
96
- - 3
97
- - 1
98
- version: 1.3.1
94
+ - 0
95
+ version: "0"
99
96
  requirements: []
100
97
 
101
98
  rubyforge_project: