bowling_score_keeper 0.1.0 → 0.2.0

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: 7583fe6e44a0420476d6f05f90bdb829eb70075f
4
- data.tar.gz: 63f4e174b481d26c7d091518f8be3573a1cb8926
3
+ metadata.gz: 89bb212b1994a2e242e3bf78bcf211796a321f59
4
+ data.tar.gz: 460e5feef2e61fd1b5810e4c6715bd076080a872
5
5
  SHA512:
6
- metadata.gz: c62db684d3a4a51011423bd1e737e360dbd650ed6bf83db915a4b0603703b1f90962738eded8f37246d46663e2c305ec9f6626b066e66400a2bebf8fd95088cf
7
- data.tar.gz: fffc3203ab8a5fbd226b1a902cab34a881acbd40dda8cbba45562ac037bef6fe932012c3b6f78e09e1dbcd2a116dbfa885321630c0a0076dfe5c87d597ef056d
6
+ metadata.gz: 8a0c17810eb8faf470cb7372f6e54dc490463a05c27027126248c63ce69e00fb40ee8d81f3fd122a73c00da826e30b4478f0dc367c18f86dcfe0ba7de93b0c8c
7
+ data.tar.gz: 032621c1828114b089540884edcfd5d6dda6e94f73f55a94d61c7ca6aad132f25383ad140babd13b1cf8d6d46386c260f9a2d6a01b5153044fcaf6c9b974ad5c
data/README.md CHANGED
@@ -8,9 +8,9 @@ Basic implementation of a bowling game score keeper.
8
8
 
9
9
  ## Usage
10
10
 
11
- game = BowlingScoreKeeper.new
12
- game.roll(10)
13
- game.score # 10
11
+ Start the gem from the command line with:
12
+ $ bowling_score_keeper
13
+
14
14
 
15
15
  ## Development
16
16
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bowling_score_keeper'
4
+
5
+ game = BowlingScoreKeeper.new
6
+ game.call
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
19
  f.match(%r{^(test|spec|features)/})
20
20
  end
21
- spec.bindir = "exe"
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.bindir = "bin"
22
+ spec.executables = ["bowling_score_keeper"]
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.15"
@@ -2,33 +2,41 @@ require 'bowling_score_keeper/version'
2
2
  require 'pry'
3
3
 
4
4
  class BowlingScoreKeeper
5
+ attr_accessor :name
5
6
  MAX_ROLL_POINTS = 10
6
7
 
7
8
  def initialize
8
9
  @rolls = []
9
10
  end
10
11
 
12
+ def call
13
+ set_name
14
+
15
+ track_score
16
+ end
17
+
11
18
  def roll(pins)
12
- @rolls << pins
19
+ puts "You knocked #{pins} pins."
20
+ @rolls << pins.to_i
13
21
  end
14
22
 
15
23
  def score
16
- if @rolls.size <= 3
17
- return @rolls.inject(0) { |s, e| s + e }
18
- end
24
+ return score_for_too_few_rolls if too_few_rolls
19
25
 
20
26
  score = 0
21
-
22
27
  first_in_frame = 0
23
- for frame in 0...10
28
+
29
+ 10.times do
24
30
  if(strike?(first_in_frame))
25
- score += MAX_ROLL_POINTS + @rolls[first_in_frame + 1] + @rolls[first_in_frame + 2]
31
+ score += MAX_ROLL_POINTS +
32
+ @rolls[first_in_frame + 1] +
33
+ @rolls[first_in_frame + 2]
26
34
  first_in_frame += 1
27
35
  elsif(spare?(first_in_frame))
28
36
  score += MAX_ROLL_POINTS + @rolls[first_in_frame + 2]
29
37
  first_in_frame += 2
30
38
  else
31
- score += @rolls[first_in_frame] + @rolls[first_in_frame + 1]
39
+ score += @rolls[first_in_frame] + @rolls[first_in_frame + 1]
32
40
  first_in_frame += 2
33
41
  end
34
42
  end
@@ -38,11 +46,50 @@ class BowlingScoreKeeper
38
46
 
39
47
  private
40
48
 
49
+ def set_name
50
+ @name = ''
51
+ while @name.empty?
52
+ puts 'What is your name'
53
+ @name = gets.chomp
54
+ end
55
+ end
56
+
57
+ def track_score
58
+ @value = ''
59
+ while @value.empty?
60
+ puts 'Enter knocked pins:'
61
+ puts 'Type score to see your score, or exit to end the game.'
62
+ @value = gets.chomp
63
+
64
+ case @value
65
+ when 'score'
66
+ puts "Your score is #{score}"
67
+ when 'exit'
68
+ print "Congratulation #{@name},"
69
+ puts "You finished the game with a score of: #{score}"
70
+ exit
71
+ else
72
+ roll(@value)
73
+ end
74
+
75
+ @value = ''
76
+ end
77
+ end
78
+
41
79
  def spare?(first_in_frame)
42
- (@rolls[first_in_frame] + @rolls[first_in_frame + 1]) == MAX_ROLL_POINTS
80
+ (@rolls[first_in_frame] + @rolls[first_in_frame + 1]) ==
81
+ MAX_ROLL_POINTS
43
82
  end
44
83
 
45
84
  def strike?(first_in_frame)
46
85
  @rolls[first_in_frame] == MAX_ROLL_POINTS
47
86
  end
87
+
88
+ def too_few_rolls
89
+ @rolls.size <= 3
90
+ end
91
+
92
+ def score_for_too_few_rolls
93
+ @rolls.inject(0) { |s, e| s + e }
94
+ end
48
95
  end
@@ -1 +1 @@
1
- VERSION = "0.1.0"
1
+ VERSION = "0.2.0"
data/todo.txt CHANGED
@@ -1,6 +1,3 @@
1
- Create version tag
2
- Release as a gem
3
- Add usage details
4
1
  Multiple players mode
5
2
  Fancy output (ASCII graphic)
6
3
  Make it a CLI tool
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bowling_score_keeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mugur (Bud) Chirica
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-15 00:00:00.000000000 Z
11
+ date: 2017-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -83,7 +83,8 @@ dependencies:
83
83
  description: 'Basic implementation of a bowling game score keeper in Ruby '
84
84
  email:
85
85
  - chirica.mugurel@gmail.com
86
- executables: []
86
+ executables:
87
+ - bowling_score_keeper
87
88
  extensions: []
88
89
  extra_rdoc_files: []
89
90
  files:
@@ -96,6 +97,7 @@ files:
96
97
  - LICENSE.txt
97
98
  - README.md
98
99
  - Rakefile
100
+ - bin/bowling_score_keeper
99
101
  - bin/console
100
102
  - bin/setup
101
103
  - bowling_score_keeper.gemspec