[#316551] "ensure" hiding actual error — Nit Khair <sentinel.2001@...>

In my main program I have a "begin ensure end".

19 messages 2008/10/01
[#316566] Re: "ensure" hiding actual error — "Robert Klemme" <shortcutter@...> 2008/10/01

2008/10/1 Nit Khair <sentinel.2001@gmx.com>:

[#316570] Re: "ensure" hiding actual error — Nit Khair <sentinel.2001@...> 2008/10/01

Robert Klemme wrote:

[#316579] Re: "ensure" hiding actual error — "Robert Klemme" <shortcutter@...> 2008/10/01

2008/10/1 Nit Khair <sentinel.2001@gmx.com>:

[#316583] Re: "ensure" hiding actual error — Nit Khair <sentinel.2001@...> 2008/10/01

Robert Klemme wrote:

[#316585] Re: "ensure" hiding actual error — "Thomas B." <tpreal@...> 2008/10/01

Nit Khair wrote:

[#316589] Re: "ensure" hiding actual error — "Robert Klemme" <shortcutter@...> 2008/10/01

2008/10/1 Thomas B. <tpreal@gmail.com>:

[#316617] Ordered hash hack for < ruby 1.9? — Ben Johnson <bjohnson@...>

I am having an issue testing my code because hashes don't have a

22 messages 2008/10/01
[#316620] Re: Ordered hash hack for < ruby 1.9? — "Patrick Doyle" <wpdster@...> 2008/10/01

Why not iterate over myhash.keys.sort instead of just myhash.keys?

[#316704] Problem extending (adding methods) to class — Nit Khair <sentinel.2001@...>

I am trying to extend a class developed by someone else (its from the

24 messages 2008/10/02
[#316707] Re: Problem extending (adding methods) to class — Nit Khair <sentinel.2001@...> 2008/10/02

Nit Khair wrote:

[#316723] Is Assignment in a Conditional an Idiom? — worthee@...

Hi

19 messages 2008/10/02

[#316839] class << self — "Patrick Doyle" <wpdster@...>

Sorry if this is a FAQ, but I was just looking at some Ruby code and

14 messages 2008/10/03

[#316847] Making/Compiling Gems on Windows with MinGW — Cayce Balara <house@...>

Whenever I try to install a gem that doesn't have a precompiled binary

11 messages 2008/10/03

[#316907] stream closed (IOError) — "Eric Will" <rakaur@...>

This code:

17 messages 2008/10/05
[#316910] Re: stream closed (IOError) — Yukihiro Matsumoto <matz@...> 2008/10/05

Hi,

[#316920] Re: stream closed (IOError) — "Eric Will" <rakaur@...> 2008/10/05

Line 231 is the @socket.close line. Nothing gets done to the socket

[#316925] Re: stream closed (IOError) — Yukihiro Matsumoto <matz@...> 2008/10/05

Hi,

[#316926] Re: stream closed (IOError) — "Eric Will" <rakaur@...> 2008/10/05

On Sun, Oct 5, 2008 at 11:46 AM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#316927] Re: stream closed (IOError) — Iki Baz Castillo <ibc@...> 2008/10/05

El Domingo, 5 de Octubre de 2008, Eric Will escribi=F3:

[#316968] Ruby lacks atfork : The evil that lives in fork... — John Carter <john.carter@...>

Consider this simple usage of Thread and Process....

12 messages 2008/10/06

[#316978] Concurent (using threads) slower than sequential -doubt — Carlos Ortega <caof2005@...>

Hi Folks.

10 messages 2008/10/06

[#316988] Problem with comparing huge amount of strings — Jan Fischer <janfischer@...>

Hello together,

11 messages 2008/10/06

[#317122] Demand that Obama release his college records! Where is the media? — Micky <guuwwe@...>

Why is it important to see Obama's college records? Because the media

11 messages 2008/10/07

[#317126] Ruby with Oracle forward slash error — Sam Sang <younoeme@...>

Hi,

12 messages 2008/10/07

[#317127] Looking for more Ruby-like way to create an array — Steve Nicholson <ssteve@...>

I'm creating an array that is the result of the members of another array

11 messages 2008/10/07

[#317326] Thread: super should be first line or last line? — "christoforever@..." <christoforever@...>

While playing around with ruby threads I noticed that if you dont call

11 messages 2008/10/10

[#317337] Modular Arithmetic (#179) — Matthew Moss <matt@...>

-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=

15 messages 2008/10/10

[#317395] Automatic ClassLoader (to eliminate 'require') — Alexey Petrushin <axyd80@...>

Hello!

17 messages 2008/10/11
[#317397] Re: Automatic ClassLoader (to eliminate 'require') — Erik Veenstra <erikveen@...> 2008/10/11

module AutoRequire

[#317402] Re: Automatic ClassLoader (to eliminate 'require') — Alexey Petrushin <axyd80@...> 2008/10/11

Thanks! It works! :)

[#317403] Re: Automatic ClassLoader (to eliminate 'require') — "Thomas B." <tpreal@...> 2008/10/11

Alexey Petrushin wrote:

[#317422] Sample for Metaprogramming — relzne@...

Hi.

13 messages 2008/10/11

[#317452] Updating Ruby 1.8.6 to 1.8.6-p287 in Debian 4 — The Neurochild <neurochild@...>

Hi

21 messages 2008/10/12

[#317502] Sorting help — Binh Ly <binh@...>

Hello All,

19 messages 2008/10/12

[#317601] Using DBI and MySQL gems — Owein Herrmann <oherrmann@...>

Quick question:

14 messages 2008/10/13

[#317758] Big endian convention in Ruby — Zangief Ief <z4n9ief@...>

Hello,

18 messages 2008/10/16
[#317767] Re: Big endian convention in Ruby — Robert Klemme <shortcutter@...> 2008/10/16

On 16.10.2008 10:26, Zangief Ief wrote:

[#317772] Re: Big endian convention in Ruby — Zangief Ief <z4n9ief@...> 2008/10/16

Thanks you for you answer.

[#317800] Re: Big endian convention in Ruby — Brian Candler <b.candler@...> 2008/10/16

Zangief Ief wrote:

[#317820] Re: Big endian convention in Ruby — Robert Klemme <shortcutter@...> 2008/10/16

On 16.10.2008 15:25, Brian Candler wrote:

[#317936] Re: Big endian convention in Ruby — Zangief Ief <z4n9ief@...> 2008/10/17

Thank you all for your help.

[#317759] How to go from a ruby script to a working website? — Ralph Wood <esmero@...>

As you've probably guessed by the title, total newbie here.

12 messages 2008/10/16

[#317769] A Ruby block question — David Trasbo <davidtrasbo@...>

I am in need of making a method that accepts a block. It basicly needs

23 messages 2008/10/16
[#317770] Re: A Ruby block question — Stefano Crocco <stefano.crocco@...> 2008/10/16

Alle Thursday 16 October 2008, David Trasbo ha scritto:

[#317773] Re: A Ruby block question — David Trasbo <davidtrasbo@...> 2008/10/16

Stefano Crocco wrote:

[#317779] Re: A Ruby block question — Stefano Crocco <stefano.crocco@...> 2008/10/16

Alle Thursday 16 October 2008, David Trasbo ha scritto:

[#317780] Re: A Ruby block question — David Trasbo <davidtrasbo@...> 2008/10/16

Stefano Crocco wrote:

[#317776] I found way to protect Source Code! :) — Alexey Petrushin <axyd80@...>

Hello!

34 messages 2008/10/16
[#317859] Re: I found way to protect Source Code! :) — Ade Inovica <adrian.teasdale@...> 2008/10/16

Interesting solution. May I also suggest that you try

[#317869] Re: I found way to protect Source Code! :) — Mike Gold <mike.gold.4433@...> 2008/10/16

Ade Inovica wrote:

[#317886] Re: I found way to protect Source Code! :) — Sasha Bee <rubyman77@...> 2008/10/17

Mike Gold wrote:

[#317956] Re: I found way to protect Source Code! :) — "ara.t.howard" <ara.t.howard@...> 2008/10/17

[#317878] instance counter — Pierre Lebrun <anthonylebrun@...>

Please forgive the trite nature of this question, I'm new to ruby and OO

21 messages 2008/10/17
[#317880] Re: instance counter — Tommy Nordgren <tommy.nordgren@...> 2008/10/17

[#317883] Re: instance counter — Mike Gold <mike.gold.4433@...> 2008/10/17

Tommy Nordgren wrote:

[#317903] Re: instance counter — Robert Klemme <shortcutter@...> 2008/10/17

On 17.10.2008 07:19, Mike Gold wrote:

[#317938] Error Exception if script doesn't run — jackster the jackle <johnsheahan@...>

I need to know if my script fails to run for any reason and capture the

20 messages 2008/10/17
[#317941] Re: Error Exception if script doesn't run — Brian Candler <b.candler@...> 2008/10/17

jackster the jackle wrote:

[#317967] Re: Error Exception if script doesn't run — jackster the jackle <johnsheahan@...> 2008/10/17

I notice that any shell commands that I have in the script that fail do

[#317972] Re: Error Exception if script doesn't run — Joel VanderWerf <vjoel@...> 2008/10/17

jackster the jackle wrote:

[#317974] Re: Error Exception if script doesn't run — jackster the jackle <johnsheahan@...> 2008/10/17

It seems to work but not for this command, perhaps since scp gets

[#317979] Re: Error Exception if script doesn't run — Tim Hunter <TimHunter@...> 2008/10/18

jackster the jackle wrote:

[#317992] Re: Error Exception if script doesn't run — jackster the jackle <johnsheahan@...> 2008/10/18

Tim Hunter wrote:

[#317966] Counting — Tom Clarke <thomas.clarke08@...>

How would i go about making Ruby count to say 1000 usin only multiples

18 messages 2008/10/17

[#318286] Trollop 1.10 released — William Morgan <wmorgan-ruby-talk@...>

Trollop version 1.10 has been released!

12 messages 2008/10/22

[#318309] Is there a method_eval or similar thing ? — Nit Khair <sentinel.2001@...>

I have a method called askyesno which takes a string and returns whether

13 messages 2008/10/22

[#318323] What exactly does "rubyish" or "ruby way" mean? — Nit Khair <sentinel.2001@...>

Over the last month I have been reading a lot of blogs, searching, going

12 messages 2008/10/22

[#318509] How to tell if two paths point to the same file? — Kenneth McDonald <kenneth.m.mcdonald@...>

I've tried using File.expand_path to normalize path names, but this

12 messages 2008/10/24

[#318523] RubyMacros 0.1.0 Released — "Caleb Clausen" <vikkous@...>

RubyMacros is a lisp-like macro pre-processor for Ruby. More than just a

15 messages 2008/10/24

[#318552] Join all text files in a folder, with a single line of Ruby code — luisbebop <luisbebop@...>

I did a single line of code in Ruby, which joins all text files in a

26 messages 2008/10/25
[#318556] Re: Join all text files in a folder, with a single line of Ruby code — "William James" <w_a_x_man@...> 2008/10/25

luisbebop wrote:

[#318574] Re: Join all text files in a folder, with a single line of Ruby code — Joel VanderWerf <vjoel@...> 2008/10/25

William James wrote:

[#318607] Re: Join all text files in a folder, with a single line of Ruby code — Nobuyoshi Nakada <nobu@...> 2008/10/26

Hi,

[#318622] Re: Join all text files in a folder, with a single line of Ruby code — Joel VanderWerf <vjoel@...> 2008/10/26

Nobuyoshi Nakada wrote:

[#318640] Re: Join all text files in a folder, with a single line of Ruby code — luisbebop <luisbebop@...> 2008/10/27

> ruby -pe'1' *

[#318641] Re: Join all text files in a folder, with a single line of Ruby code — Joel VanderWerf <vjoel@...> 2008/10/27

luisbebop wrote:

[#318601] Hash.merge_add! extension - how does this code look? — "Greg Hauptmann" <greg.hauptmann.ruby@...>

Hi,

18 messages 2008/10/26
[#318632] Re: Hash.merge_add! extension - how does this code look? — Stefan Rusterholz <apeiros@...> 2008/10/26

Greg Hauptmann wrote:

[#318644] Re: Hash.merge_add! extension - how does this code look? — "Greg Hauptmann" <greg.hauptmann.ruby@...> 2008/10/27

thanks for highlighting this! Is the quickest way to normalise to Array via

[#318655] Re: Hash.merge_add! extension - how does this code look? — Stefan Rusterholz <apeiros@...> 2008/10/27

Greg Hauptmann wrote:

[#318656] Re: Hash.merge_add! extension - how does this code look? — "Greg Hauptmann" <greg.hauptmann.ruby@...> 2008/10/27

I just noticed the code suggested might have a problem when the

[#318721] automatic code conversion from Ruby to C ? — "Axel Etzold" <AEtzold@...>

Dear all,

16 messages 2008/10/27

[#318888] project manager panel in SciTE — Li Chen <chen_li3@...>

Hi all,

14 messages 2008/10/29

[#318896] RubyGems 1.3.1 — Eric Hodel <drbrain@...7.net>

= Announce: RubyGems Release 1.3.1

13 messages 2008/10/29

[#318970] Roguelike project? — Tim Mcd <tmcdowell@...>

Anyone interested in a Roguelike game written in Ruby/Ncurses project?

41 messages 2008/10/30
[#318976] Re: Roguelike project? — Matthew Moss <matt@...> 2008/10/30

> Anyone interested in a Roguelike game written in Ruby/Ncurses project?

[#319050] Re: Roguelike project? — "Michael Fellinger" <m.fellinger@...> 2008/10/31

On Fri, Oct 31, 2008 at 3:42 AM, Matthew Moss <matt@moss.name> wrote:

[#319052] Re: Roguelike project? — Nit Khair <sentinel.2001@...> 2008/10/31

Michael Fellinger wrote:

[#319056] Re: Roguelike project? — "Michael Fellinger" <m.fellinger@...> 2008/10/31

On Sat, Nov 1, 2008 at 1:46 AM, Nit Khair <sentinel.2001@gmx.com> wrote:

[#319287] Re: Roguelike project? — Nit Khair <sentinel.2001@...> 2008/11/03

Michael Fellinger wrote:

[#319393] Re: Roguelike project? — Nit Khair <sentinel.2001@...> 2008/11/04

Nit Khair wrote:

[#319422] Re: Roguelike project? — Nit Khair <sentinel.2001@...> 2008/11/04

Nit Khair wrote:

[#319021] XML builder performance — Xin Zheng <crazygecko@...>

Hi all,

13 messages 2008/10/31

[#319055] How to access to local variables in enclosing scopes? — Yuh-Ruey Chen <maian330@...>

I'm familiar with other popular scripting languages (JS and Python),

34 messages 2008/10/31

[#319094] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...>

The JRuby team is proud to announce the release of FFI for Ruby 1.8.6/7

62 messages 2008/10/31
[#319099] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Thomas Hurst <tom.hurst@...> 2008/11/01

* Charles Oliver Nutter (charles.nutter@sun.com) wrote:

[#319101] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...> 2008/11/01

Thomas Hurst wrote:

[#319113] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...> 2008/11/01

Charles Oliver Nutter wrote:

[#319238] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Sylvain Joyeux <sylvain.joyeux@...> 2008/11/03

On Sat, Nov 01, 2008 at 08:16:39AM +0900, Charles Oliver Nutter wrote:

[#319240] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...> 2008/11/03

Sylvain Joyeux wrote:

[#319390] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Ken Bloom <kbloom@...> 2008/11/04

On Fri, 31 Oct 2008 18:16:39 -0500, Charles Oliver Nutter wrote:

[#319391] Re: [ANN] FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — "Sean O'Halpin" <sean.ohalpin@...> 2008/11/04

On Tue, Nov 4, 2008 at 2:38 PM, Ken Bloom <kbloom@gmail.com> wrote:

[#319395] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Nit Khair <sentinel.2001@...> 2008/11/04

Sean O'halpin wrote:

[#319428] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...> 2008/11/04

Nit Khair wrote:

[#319467] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — "Sean O'Halpin" <sean.ohalpin@...> 2008/11/05

On Tue, Nov 4, 2008 at 7:02 PM, Charles Oliver Nutter

[#319468] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Charles Oliver Nutter <charles.nutter@...> 2008/11/05

Sean O'Halpin wrote:

[#319535] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — "Sean O'Halpin" <sean.ohalpin@...> 2008/11/05

On Wed, Nov 5, 2008 at 4:34 AM, Charles Oliver Nutter

[#319538] Re: FFI 0.1.1 (Foreign Function Interface) for Ruby 1.8.6/7 and 1.9 — Nit Khair <sentinel.2001@...> 2008/11/05

Sean O'halpin wrote:

[SUMMARY] Bowling Scores (#181)

From: Matthew Moss <matt@...>
Date: 2008-10-31 17:00:56 UTC
List: ruby-talk #319053
Calculating bowling scores seems to be trivial, at least until you  
start dealing with the exceptions. Strikes and spares can't be scored  
until at least one ball from the next frame is thrown, and of course  
the next frame's score must include the current frame's score.  
Similarly, strikes and spares in the tenth frame require additional  
balls be thrown, but not counted as an eleventh frame. There are  
simple exceptions, but it's perhaps because it seems too simple a  
problem that some of these exceptions and edge cases are forgotten or  
handled improperly.

I'm going to look at the solution from _Douglas Seifert_; it was well  
documented, easy to read, and passed most of the edge cases I tested  
(i.e. dealing primarily with strikes, spares and the tenth frame).  
Let's look first at the main code and work backwards:

     if __FILE__ == $0
       name, *pins = *ARGV
       game = BowlingGame.new(name)
       pins.inject(game) {|game, p| game.score_roll(p.to_i); game}
       game.print_score_sheet
     end

Inside of the standard "Am I running from command-line?" test, Douglas  
first separates the name argument from all the others, then constructs  
a new `BowlingGame` object for the player. The next line scores each  
roll, though I don't understand the reason for using `inject` over the  
simpler and more typical code which accomplishes the same task:

       pins.each { |p| game.score_roll(p.to_i) }

In any case, once all pins have been scored, the game score sheet is  
displayed.

Now let's look at the `BowlingGame` class, starting with initialization:

     # Create a bowling game for the given named player
     def initialize(name)
       @name = name
       @frames = Array.new(10) { |i| Frame.new(i+1) }
       @working = Array.new
     end

The player's name is remembered, and ten `Frame` objects are  
constructed with appropriate frame numbers. A "working" frame array is  
created, initially empty. The working array will keep references to  
frames when a strike or spare was rolled, until all the bonus pins  
have been counted.

The method `score_roll` is where the bulk of the work is accomplished.  
Each roll's number of pins felled is the parameter.

     # Score a roll of the given number of pins
     def score_roll(pins)

Finding the current frame is simply looking for the first frame that  
isn't finished. Finished frames are those containing strikes, spares,  
or open (i.e. neither a strike or spare, but two balls have been  
scored for the frame).

       # Find the current frame
       frame = @frames.find {|f| !f.finished? }

Next, a quick sanity check against too many reported scores. If all  
frames are finished (i.e. `frame` is nil) and there are no working  
frames (i.e. not waiting on bonus points for a spare or strike), but  
there is still input, then there was too many input values provided.

       # If we have no current frame and nothing is working, we are
       # scoring too many rolls
       if frame.nil? && @working.empty?
         raise "Too many rolls are being scored in this game."
       end

The next part was a little tricky to follow at first, but does make  
sense. We delete any working frames if they're not working... but note  
that the "not working" condition is checked _after_ a call to  
`f.bonus`, which will store the bonus points for working frames (i.e.  
strikes and spares). The call to `bonus` can change the frame's  
working status (which it should do after one bonus roll for spares,  
and two bonus rolls for strikes).

       # Score bonus pins for strikes and spares that are working
       @working.delete_if {|f| f.bonus(pins); !f.working? }

Keep in mind that `@working` needs to be an array, rather than a  
single frame. Two sequential strikes, or a strike followed by a spare,  
leaves two frames waiting for bonus points, so we need the array.

Finally, we score the current round. We skip this part if there is no  
frame (which implies the roll is just for bonus points, as the comment  
suggest). If there is a frame, we call `score_roll` on it, then append  
it to `@working` if it was a strike or a spare and needs bonus points.

       # If we found no current frame, we are in bonus rolls of
       # the tenth frame
       return if !frame

       # Score this ball on the current frame and move it to
       # working if we rolled a spare or strike
       frame.score_roll(pins)
       if frame.spare? || frame.strike?
         @working << frame
       end
     end

That's it for the main game. The rest of `BowlingGame` is quite simple  
and needs little explanation, so I'll pass describing it here, except  
to say that I was pleased to see output more like a typical bowling  
game scoring table:

     John+---+---+---+---+---+---+---+---+---+---+
     | 62| 71|  X| 9-| 8/|  X|  X| 35| 72|5/8|140|
     |  8| 16| 35| 44| 64| 87|105|113|122|140|   |
     +---+---+---+---+---+---+---+---+---+---+---+

In each square, the characters in the top row represent the individual  
rolls (e.g. "62" means two rolls: 6 pins followed by 2 pins). The  
bottom row is the accumulating score. The sizes work out just  
perfectly, since there can never be more than three rolls used per  
frame, and the score is capped at three digits. Highly compact and  
complete.

I don't want to skip out completely on the `Frame` object. Most of it  
is concerned with status information (e.g. methods like `strike?`) and  
display, but let's take a look at the `score_roll` method, since this  
goes hand-in-hand with `BowlingGame#score_roll`.

To start, we keep track of the first roll for a frame in `@first_pin`.

     def score_roll(pins)
       @first_pin ||= pins

For anyone unfamiliar with this little technique, realize that this  
line is the same as:

       @first_pin = @first_pin || pins

When you see that `@first_pin` is initialized with nil (in the  
initializer for `Frame`), you should realize this technique allows us  
to assign a value to `@first_pin` once. After the first assignment, it  
won't change again.

Back to the bowling, note that `@first_pin` is used only to help with  
proper display; it has no direct effect on the scoring process. Let's  
now move onto the rest of `score_roll`, which is a simple state machine.

       if @state.nil?
         @score += pins
         if @score == 10
           @state = :strike
         else
           @state = :incomplete
         end

Our first section of this state machine is when `@state` is nil, which  
is only the case when the frame is first created, before any rolls  
have been scored. In this case, we update the score and change the  
state, either to a strike (when all ten pins have been knocked down)  
or incomplete. Now let's see how to handle the incomplete state.

       elsif @state == :incomplete
         @score += pins
         if @score > 10
           raise "Illegal roll in incomplete frame with score #{@score  
- pins}: #{pins}"
         end
         if @score == 10
           @state = :spare
         else
           @state = :open
         end

Again, we update the score, but also check that the score looks  
reasonable, and throw an exception if not. If the score is now ten,  
it's a spare; it can't be a strike, since to be in the incomplete  
state, it must have score at least one ball prior. If the score is  
other than ten, it's called an open frame (i.e. the frame is finished,  
with a simple score, needing no bonus points).

       end
     end

There are no other states to handle; any other state is ignored.  
Actually, `score_roll` should never be called on frames in any other  
state. An exception here could be used to check that claim, or at  
least sufficient unit tests and/or code coverage tools.

Another error check might be worthwhile, that every pin count passed  
into `score_roll` (originating from the command-line) is strictly  
within the range zero to ten, inclusive. Right now, I can call the  
script like so:

     ruby score.rb -16 6 -16 6

No complaints will be generated; the error check in `score_roll` is  
good, but not sufficient for all cases. Still, this is Ruby Quiz, and  
we're not gonna get too picky about error checking. But it is  
something to keep in mind for the next time you're programming a  
bowling scorekeeper.

An error check I would _not_ include is for incomplete games. I  
thought about such a thing initially, but it's nice to be able to see  
the scorecare for a game in progress.



Great solutions, everyone!  No quiz this week due to work load, but  
will be back next week.



In This Thread

Prev Next