tennis 0.3.0 → 0.4.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: 4cae2bc8246ef286862dcaf50932dc0c6163fabb
4
- data.tar.gz: 1a45d035f3c072e9e81ba11c55c235205dc0d74b
3
+ metadata.gz: a4965dfe7cf8388b7e4fd98dcca47d60f970fe61
4
+ data.tar.gz: 0cbe367e8353bfd785c806c699dea34afd7952ce
5
5
  SHA512:
6
- metadata.gz: 9be5f61f35b63d700bab8a3a5460326b8c7b5aaa22599b10db2385166d0b67bfa4d7a968de09f577d26f64e4776011bb7a43ae8c04dd16878fb12bc230775c7f
7
- data.tar.gz: 9d4f9ac6eef4d75d9982e6ce9af31f029ae1acc13e4a1051d0c40f000d48b374b59adca29cd40caf62c450b6ce181bdee9ec5cd388995bc5914cfc8ad5a81450
6
+ metadata.gz: e7df702d79a93dc6cef85d1a016d9c4049e4eb6d0d9e94ee168e75ec3e47feeb0c37066ef04c9ba15388d9b65347633aa32b282b3c4ec4c2ea38c1519ae44bea
7
+ data.tar.gz: 3468b6ba2e86653b1414ba007a6a2b163d336f2c8231a57fc9f4ba24a355d6cac85ec910cb08025950ea3ecde14555351b35351fb40adb8013e325637bb3844e
data/Makefile CHANGED
@@ -1,15 +1,16 @@
1
1
 
2
- VERSION=0.3.0
2
+ # NOTE: this needs to be changed in lib/tennis/version.rb at the same time!
3
+ VERSION=0.4.0
3
4
 
4
5
  all:
5
- rake spec
6
+ bundle exec rake spec
6
7
 
7
8
  build:
8
- gem build tennis.gemspec
9
+ bundle exec gem build tennis.gemspec
9
10
 
10
11
  irb:
11
- irb -Ilib -rtennis
12
+ bundle exec irb -Ilib -rtennis
12
13
 
13
14
  # to push to rubygems
14
15
  push:
15
- gem push tennis-$(VERSION).gem
16
+ bundle exec gem push tennis-$(VERSION).gem
@@ -7,28 +7,67 @@ class Tennis
7
7
  # sets_won/lost is an array: [sets won/lost by 0, sets won/lost by 1]
8
8
  # games_won/lost is an array: [games won/lost by 0, games won/lost by 1]
9
9
 
10
+ # representation of defaults:
11
+ #
12
+ # p0-<reason> means player 0 won, e.g. p0-win-by-forfeit
13
+ # p1-<reason> means player 1 won
14
+ #
15
+ # the reason is ignored for the purposes of this gem.
16
+ # possible reason fields are: win-by-forfeit, win-by-retired, win-by-no-show
17
+ #
18
+
10
19
  attr_reader :winner, :sets_won, :sets_lost, :games_won, :games_lost
11
20
 
12
21
  def initialize(score)
13
- # dfh -> default win for home player(0)
14
- # dfa -> default win for away player(1)
22
+ # check if it's a default first:
23
+ if score =~ /^p/
24
+ process_default(score)
25
+ @default = true
26
+ return
27
+ end
28
+ @default = false
15
29
  process_score(score)
16
30
  end
17
31
 
18
32
  # to_s
19
33
  # return the score in string format
20
34
  def to_s
21
- @score.map{|set| set.join('-') }.join(', ')
35
+ @default ? "Default" : @score.map{|set| set.join('-') }.join(', ')
22
36
  end
23
37
 
24
38
  # flip score ( P1-P2 to P2-P1)
25
39
  # returns the flipped score as a string
26
40
  def flipped
27
- @score.map{|set| set.reverse.join('-') }.join(', ')
41
+ @default ? "Default" : @score.map{|set| set.reverse.join('-') }.join(', ')
42
+ end
43
+
44
+ def score
45
+ @default ? "Default" : @score
46
+ end
47
+
48
+ def default?
49
+ @default
28
50
  end
29
51
 
30
52
  private
31
53
 
54
+ def process_default(default)
55
+ @score = default
56
+ if default =~ /p0-win/
57
+ # process as 6-0, 6-0
58
+ @winner = 0
59
+ @sets_won, @sets_lost = [[2, 0], [0, 2]]
60
+ @games_won, @games_lost = [[12, 0], [0, 12]]
61
+ elsif default =~ /p1-win/
62
+ # process as 0-6, 0-6
63
+ @winner = 1
64
+ @sets_won, @sets_lost = [[0, 2], [2, 0]]
65
+ @games_won, @games_lost = [[0, 12], [12, 0]]
66
+ else
67
+ raise "Invalid default score report: '#{default}'"
68
+ end
69
+ end
70
+
32
71
  def process_score(score, best_of=3)
33
72
  begin
34
73
  sets = score.split(/,/)
@@ -1,3 +1,4 @@
1
1
  class Tennis
2
- VERSION = "0.3.0"
2
+ # NOTE: this needs to be changed in the Makefile at the same time!
3
+ VERSION = "0.4.0"
3
4
  end
@@ -32,10 +32,24 @@ describe Tennis, "#scores" do
32
32
  expect(score.winner).to eq 0
33
33
  end
34
34
 
35
+ it "finds the winner properly in three sets with last set to 7-5" do
36
+ score = Tennis.new("6-4, 6-7, 7-5")
37
+ expect(score.winner).to eq 0
38
+ end
39
+
40
+ it "finds the winner properly in three sets with last set to 8-6" do
41
+ score = Tennis.new("6-4, 6-7, 8-6")
42
+ expect(score.winner).to eq 0
43
+ end
44
+
35
45
  it "report error is the last set is off by more than 2" do
36
46
  expect { Tennis.new("6-4, 6-7, 18-15") }.to raise_error
37
47
  end
38
48
 
49
+ it "report error is the last set is off by more than 2" do
50
+ expect { Tennis.new("6-4, 6-7, 8-7") }.to raise_error
51
+ end
52
+
39
53
  it "reports incomplete match score (set 1-1)" do
40
54
  expect { Tennis.new("6-4,4-6") }.to raise_error
41
55
  end
@@ -118,3 +132,26 @@ describe Tennis, "#games_lost" do
118
132
  end
119
133
  end
120
134
  end
135
+
136
+ describe Tennis, "#defaults" do
137
+ it "finds the winner properly in a default" do
138
+ score = Tennis.new("p0-win-by-something")
139
+ expect(score.winner).to eq 0
140
+ expect(score.sets_won).to eq [2, 0]
141
+ expect(score.games_won).to eq [12, 0]
142
+ expect(score.to_s).to eq "Default"
143
+ end
144
+
145
+ it "finds the winner properly in a default" do
146
+ score = Tennis.new("p1-win-by-something")
147
+ expect(score.winner).to eq 1
148
+ expect(score.sets_won).to eq [0, 2]
149
+ expect(score.games_won).to eq [0, 12]
150
+ expect(score.to_s).to eq "Default"
151
+ end
152
+
153
+ it "reports some error in a bad default" do
154
+ expect { Tennis.new("p2-blah") }.to raise_error
155
+ end
156
+
157
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tennis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rohan Katyal
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-02 00:00:00.000000000 Z
12
+ date: 2015-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler