bowling_score 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9093cf9fa2cb65cee1c551098f845f4d9e77ade8
4
- data.tar.gz: 0f2f109de09c915dc150878aff286fe9c8b6bf56
3
+ metadata.gz: c6e8e32b7b3d9cac7e1b6a52b725fbf39524cce8
4
+ data.tar.gz: 34777190ba17aedbefeb51ff5dc2d004343e5d52
5
5
  SHA512:
6
- metadata.gz: b5e2ae43c9a0f73a4fd1da3a1d25ff091bfc7e3a14d57c6199db16de898c04bf688fb2596f9713bd38dc04ee193845716e75f7a5cc9da20e24f69d25a5d63798
7
- data.tar.gz: 13b2807760221a47366f7c19e2b965addd6bafda43b4a523c268d9939875bce59b21df009287a5f0b683feac620a61e76c7c95aad5864bc6c8317c19f2be5dea
6
+ metadata.gz: 838700075ec3fff31cf3b8b3839442d9f23463cf4602d6a8830eca6805f69be30a4ebf893d252be51f0df6f4c3779ea29befc4bc2bfd2cac669613a17eea5d47
7
+ data.tar.gz: 01eff0f00f09359dac9dec803260e5d1bce2cf682017a22c6617d43c1378b2217d1899c813722ef5e9e7a29c5fd16b136b1e95840b30662729f31b918f7ae37a
data/README.md CHANGED
@@ -4,3 +4,24 @@ This gem supports score calculation for a bowling game given a string of comma s
4
4
  of integer. The scoring rule is based on http://bowling.about.com/od/rulesofthegame/a/bowlingscoring.htm and
5
5
  https://en.wikipedia.org/wiki/Ten-pin_bowling#Scoring. The calculation consider the rules for strike and spare
6
6
  rewarding.
7
+
8
+ ## Installation
9
+
10
+ [sudo] gem install bowling_score
11
+
12
+ ## Usage
13
+
14
+ ```ruby
15
+ require 'bowling_score'
16
+
17
+ scores = '1,2,3,4,5,5,10,2,4'
18
+ calculator = BowlingScore::ScoreCalculator.new(scores)
19
+ calculator.calculate
20
+ # result: 52
21
+ ```
22
+
23
+ ## TODO
24
+
25
+ * ScoresToFramesConvertor - to convert array of integers into frames based on rules, and validate the format and validity of the array of scores.
26
+ * ScoreBoard Class - as a data structure to hold frames and responsibility to provide score status per frame and adding score to board.
27
+ * ScoreCalculator - to take ScoreBoard Class and iterate by Frames.
@@ -15,8 +15,8 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0")
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.executables = spec.files.grep('^bin/') { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep('^(test|spec|features)/')
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_development_dependency 'bundler', '~> 1.7'
@@ -8,12 +8,14 @@ module BowlingScore
8
8
  end
9
9
 
10
10
  def calculate
11
+ @current_frame = 0
11
12
  _calculate_from_frame(0)
12
13
  end
13
14
 
14
15
  private
15
16
 
16
17
  def _calculate_from_frame(index)
18
+ @current_frame += 1
17
19
  return 0 if _out_of_range?(index)
18
20
  return _rewarded_frame(index) unless _without_bonus?(index)
19
21
  _unrewarded_frame(index)
@@ -31,7 +33,7 @@ module BowlingScore
31
33
 
32
34
  def _out_of_range?(index)
33
35
  return true unless @scores[index]
34
- index >= BowlingScore::NUMBER_OF_FRAME
36
+ @current_frame > BowlingScore::NUMBER_OF_FRAME
35
37
  end
36
38
 
37
39
  def _rewarded_frame(index)
@@ -1,4 +1,4 @@
1
1
  # Versioning
2
2
  module BowlingScore
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
@@ -107,6 +107,30 @@ describe BowlingScore::ScoreCalculator do
107
107
  end
108
108
  end
109
109
 
110
+ context 'with 1,2,3,4,5,5' do
111
+ it 'returns 20' do
112
+ test_array = [1, 2, 3, 4, 5, 5]
113
+ subject.instance_variable_set(:@scores, test_array)
114
+ expect(subject.calculate).to eq(20)
115
+ end
116
+ end
117
+
118
+ context 'with 9,1,10,8,0,2' do
119
+ it 'returns 48' do
120
+ test_array = [9, 1, 10, 8, 0, 2]
121
+ subject.instance_variable_set(:@scores, test_array)
122
+ expect(subject.calculate).to eq(48)
123
+ end
124
+ end
125
+
126
+ context 'with 10,0,0,9,1,0,0,8,2,0,0,7,3,0,0,6,4,0,0' do
127
+ it 'returns 50' do
128
+ test_array = [10, 0, 0, 9, 1, 0, 0, 8, 2, 0, 0, 7, 3, 0, 0, 6, 4, 0, 0]
129
+ subject.instance_variable_set(:@scores, test_array)
130
+ expect(subject.calculate).to eq(50)
131
+ end
132
+ end
133
+
110
134
  context 'with a single strike' do
111
135
  context 'as the last score' do
112
136
  it 'returns sum of all scores' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bowling_score
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Choi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-08 00:00:00.000000000 Z
11
+ date: 2015-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,8 +84,4 @@ rubygems_version: 2.4.5
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: Bowling score calculator
87
- test_files:
88
- - spec/bowling_score/score_calculator_spec.rb
89
- - spec/bowling_score_spec.rb
90
- - spec/spec_helper.rb
91
- has_rdoc:
87
+ test_files: []