<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Bowling Game Kata in Ruby</title>
    <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Bowling Game Kata in Ruby</title>
      <description>&lt;p&gt;I have not really used Ruby much. I&amp;#8217;ve written a few tutorials, messed around with RSpec and Test::Unit and even Rails a bit, but I really don&amp;#8217;t know Ruby that well. I get Ruby (the &lt;span class="caps"&gt;MOP&lt;/span&gt;, instances, blocks, open classes, ...) but there&amp;#8217;s a difference between understanding that stuff and using it day-to-day.&lt;/p&gt;


	&lt;p&gt;Last night we had a Dojo in Oklahoma City and I wanted to get refreshed with RSpec, so I decided to jump in and do the bowling game kata. I did not follow uncle bob&amp;#8217;s lead exactly. For one, I went ahead and stored two throws for each frame. While what he ends up with is a bit shorter, it bothers me a little bit. I&amp;#8217;ve also seen people surprised by how bob stores his scores, so in a sense it violates the law of least astonishment.&lt;/p&gt;


	&lt;p&gt;That&amp;#8217;s neither here nor there, I got it working just fine &amp;#8211; though handling strikes was a bit more difficult because I decided to store two rolls instead of one (so clearly, there&amp;#8217;s no best answer, just ones that suck for different reasons).&lt;/p&gt;


	&lt;p&gt;After my first go around, I had a single spec with examples all under a single describe (what&amp;#8217;s that term they&amp;#8217;d use for what the describe expression creates?). I added several examples for partial scores, to make sure I was handling incomplete games correctly. I restructured those a bit and tried to make the names a bit more clear, not sure if I was successful.&lt;/p&gt;


	&lt;p&gt;In my original version I started with a frame in the score method as a local variable, but it quickly got converted to an index, and the index was mostly passed around after that. The approach was very c-esque. I didn&amp;#8217;t like that index all over the place, so I tried to remove it by refactoring. It took several false starts before I bit the bullet and simply duplicated each of the methods, one at a time, using parallel development. The old version using an index, the new one use a 1-based frame number. After I got that working with frames, I removed most of the methods using an index, except for a few.&lt;/p&gt;


	&lt;p&gt;What follows is the spec file and the ruby class. If you read the names of some of the examples, you might think I used to bowl in league, I did. My average was a paltry 158, my best game ever a 248. Best split I ever picked up? 4, 6, 7, 10.&lt;/p&gt;


	&lt;p&gt;Comments welcome.&lt;/p&gt;


	&lt;p&gt;&lt;i&gt;&lt;b&gt;bowling_score_card_spec.rb&lt;/i&gt;&lt;/b&gt;
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bowling_score_card&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="ident"&gt;describe&lt;/span&gt; &lt;span class="constant"&gt;BowlingScoreCard&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="ident"&gt;before&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:each&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="attribute"&gt;@bowling_game_scorer&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;BowlingScoreCard&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;roll&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
        &lt;span class="attribute"&gt;@bowling_game_scorer&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;roll_many&lt;/span&gt; &lt;span class="ident"&gt;count&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
        &lt;span class="ident"&gt;count&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;times&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;score_should_be&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
        &lt;span class="attribute"&gt;@bowling_game_scorer&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;score&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;should&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score 0&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;describe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Scores for Complete Games&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score 0 for an all gutter game&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should show 20 for an all 1 game&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score game with single spare correctly&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;17&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score game with single strike correctly&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;17&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;24&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score a dutch-200, spare-strike, correclty&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;times&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
                &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
                &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="keyword"&gt;end&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;

            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;200&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score a dutch-200, strike-spare, correctly&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;times&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
                &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
                &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="keyword"&gt;end&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;200&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;should score all 5's game as 150&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;21&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;150&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score a perfect game correctly&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;12&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;300&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should not count a 0, 10 roll as a strike&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;18&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;29&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;describe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Scoring for open games&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score just an open frame&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;7&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score just a spare&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score partial game with spare and following frame only&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score an opening turkey correctly&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll_many&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;60&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;describe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Scoring open game starting with a srike&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="ident"&gt;before&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:each&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score partial game with only strike&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score partial game with strike and half-open frame&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;18&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score partial game with strike and open frame&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;6&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;28&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score partial game with strike and spare&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;7&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;30&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;describe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Open game starting with two Strikes&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
        &lt;span class="ident"&gt;before&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:each&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should have a score of 30&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;30&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score correctly with following non-mark&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;42&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;

        &lt;span class="ident"&gt;it&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;should score correclty with third frame open&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;
            &lt;span class="ident"&gt;roll&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;
            &lt;span class="ident"&gt;score_should_be&lt;/span&gt; &lt;span class="number"&gt;48&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;


	&lt;p&gt;&lt;i&gt;&lt;b&gt;bowling_score_card.rb&lt;/i&gt;&lt;/b&gt;
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;BowlingScoreCard&lt;/span&gt;
    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;initialize&lt;/span&gt;
        &lt;span class="attribute"&gt;@rolls&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[]&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;roll&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
        &lt;span class="attribute"&gt;@rolls&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="ident"&gt;value&lt;/span&gt;
        &lt;span class="attribute"&gt;@rolls&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;first_throw_is_strike?&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;score&lt;/span&gt;
        &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;..&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;inject&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;score&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;score&lt;/span&gt; &lt;span class="punct"&gt;+=&lt;/span&gt; &lt;span class="ident"&gt;score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="ident"&gt;strike_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;is_strike_at?&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="ident"&gt;spare_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;is_spare_at?&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;open_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;first_throw_is_strike?&lt;/span&gt;
        &lt;span class="ident"&gt;is_first_throw_in_frame?&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="attribute"&gt;@rolls&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;last&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_first_throw_in_frame?&lt;/span&gt;
        &lt;span class="attribute"&gt;@rolls&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;length&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;odd?&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;open_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;first_throw_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;second_throw_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;);&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;spare_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;open_score_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;first_throw_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;next_frame&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;))&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;strike_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;score&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;open_score_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;open_score_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;next_frame&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;))&lt;/span&gt;
        &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;is_strike_at?&lt;/span&gt; &lt;span class="ident"&gt;next_frame&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
            &lt;span class="ident"&gt;score&lt;/span&gt; &lt;span class="punct"&gt;+=&lt;/span&gt; &lt;span class="ident"&gt;first_throw_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;next_frame&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;next_frame&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)))&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
        &lt;span class="ident"&gt;score&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;next_frame&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;frame&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_spare_at?&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;open_score_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="ident"&gt;is_strike_at?&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_strike_at?&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;first_throw_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;first_throw_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;score_at_throw&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;index_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;))&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;second_throw_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="ident"&gt;score_at_throw&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;index_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;index_for&lt;/span&gt; &lt;span class="ident"&gt;frame&lt;/span&gt;
        &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;frame&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;*&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;score_at_throw&lt;/span&gt; &lt;span class="ident"&gt;index&lt;/span&gt;
        &lt;span class="attribute"&gt;@rolls&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;length&lt;/span&gt; &lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;index&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="attribute"&gt;@rolls&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 13:37:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5144dc80-1acc-4f58-9c87-60971b35354b</guid>
      <author>Brett Schuchert</author>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby</link>
      <category>Schuchert's Scattered Synapses </category>
      <category>Ruby</category>
      <category>bowling</category>
      <category>kata</category>
      <category>RSpec</category>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by iPhone contacts backup</title>
      <description>&lt;p&gt;If you hide it. will the code run very well? it is worth thinking twice.&lt;/p&gt;</description>
      <pubDate>Sun, 15 Jan 2012 01:35:27 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7e705029-4f14-4ce2-bb3d-b5703adea637</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-197901</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Orya Maqbool Jan Columns</title>
      <description>&lt;p&gt;After my first go around, I had a single spec with examples all under a single describe (what&#8217;s that term they&#8217;d use for what the describe expression creates?). I added several examples for partial scores, to make sure I was handling incomplete games correctly. I restructured those a bit and tried to make the names a bit more clear, not sure if I was successful.&lt;/p&gt;</description>
      <pubDate>Sun, 08 Jan 2012 00:51:21 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:21bc3e6a-f3ce-4254-a614-e53e8e717e9b</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-196002</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Ashley Bowling</title>
      <description>&lt;p&gt;gooood article&lt;/p&gt;</description>
      <pubDate>Sat, 15 Oct 2011 14:37:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:93c0dcd0-bbb2-441e-9949-471fcf9ea4aa</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-157157</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Christian</title>
      <description>&lt;p&gt;asas df+9s9s9sss&lt;/p&gt;</description>
      <pubDate>Mon, 10 Oct 2011 23:22:15 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:aca9b96a-260b-4364-b2e4-75f1fb59d762</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-153983</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by moncler</title>
      <description>&lt;p&gt;asdfs d9gh8f7h7f74f444&lt;/p&gt;</description>
      <pubDate>Mon, 10 Oct 2011 23:04:30 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bcc8e5d6-ec17-4784-b730-891d94096ed3</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-153961</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Louboutins</title>
      <description>&lt;p&gt;asdas df+8s99s9sss&lt;/p&gt;</description>
      <pubDate>Mon, 10 Oct 2011 23:00:30 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1ac2ae40-6ad0-43c1-a314-ad63ec293637</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-153939</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by job description</title>
      <description>&lt;p&gt;Frequently &lt;a href="http://jobdescriptionforprojectmanager.com/" rel="nofollow"&gt;Project Manager Job Description&lt;/a&gt; I am searching the great info is visible in &lt;a href="http://legalsecretaryjobdescription.net/ " rel="nofollow"&gt;Legal Secretary Job Description&lt;/a&gt; this blog and using the nice technology in this blog &lt;a href="http://medicaltranscriptionistjobdescription.com/" rel="nofollow"&gt;Medical Transcriptionist Job Description&lt;/a&gt; This is really superb info is visible in this blog and really great technology in this blog and using &lt;a href="http://jobdescriptionforparalegal.com/" rel="nofollow"&gt;Paralegal Job Description&lt;/a&gt; the nice services in this blog&lt;/p&gt;</description>
      <pubDate>Mon, 03 Oct 2011 03:12:52 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:84cab9e9-c685-4d64-815a-b25181085546</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-149439</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by sales territory mapping</title>
      <description>&lt;p&gt;I didn&amp;#8217;t know that this is possible in Ruby.  I have to try this out.&lt;/p&gt;</description>
      <pubDate>Sun, 19 Jun 2011 16:35:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:dd0b891d-d6e3-4daa-aede-f5b4d58f95bc</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-112625</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by commission predators</title>
      <description>&lt;p&gt;What a wonderful article! And are doing well on the whole, but their work also has shortcomings.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Jun 2011 11:29:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:36f590a9-67a3-479d-8250-cc626eb14985</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-111807</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by deadbeat millionaire</title>
      <description>&lt;p&gt;I visited this page first time and found it Very Good Job of acknowledgment and a marvelous source of info&#8230;&amp;#8230;...Thanks Admin!&lt;/p&gt;</description>
      <pubDate>Fri, 17 Jun 2011 10:34:12 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2bc6be9c-d2fb-4a01-96ee-5631d68f407f</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-111769</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by lose thigh</title>
      <description>&lt;p&gt;great ruby discussion&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Sun, 12 Jun 2011 21:09:12 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1855419b-42cf-4368-8a94-edf1f6d1bf10</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-110389</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Christian louboutin shoes on sale</title>
      <description>&lt;p&gt;What a wonderful article!
And are doing well on the whole, but their work also has shortcomings.&lt;/p&gt;</description>
      <pubDate>Fri, 10 Jun 2011 21:38:48 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:02d1b77c-975f-437d-89cf-2f51e03e8e1f</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-109863</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by beats by dr dre headphones</title>
      <description>&lt;p&gt;For people that adore music, i 
suggest the &lt;a href="http://www.drebeatsstudio.com/powerbeats-sport-c-13.html" rel="nofollow"&gt;monster powerbeats sport headphones&lt;/a&gt; to you, &lt;a href="http://www.drebeatsstudio.com/just-beats-studio-purple-p-62.html" rel="nofollow"&gt;Just Beats Studio Purple&lt;/a&gt; has three color, red, whit and black. It is significant efficacy on this &lt;a href="http://www.drebeatsstudio.com/monster-diddybeats-c-7.html" rel="nofollow"&gt;monster diddybeats in-ear headphones&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 08 Jun 2011 21:06:15 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:429e9878-7c97-4990-b723-d4e4fd5428d8</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-109195</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Best Phone Lookup</title>
      <description>&lt;p&gt;I visited this page first time and found it Very Good Job of acknowledgment and a marvelous source of info&amp;#8230;......Thanks Admin!&lt;/p&gt;</description>
      <pubDate>Thu, 02 Jun 2011 23:35:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7a2462ed-65f2-4a88-addb-098bf9271788</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-107438</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by mma news</title>
      <description>&lt;p&gt;hey, amazing blog with all the things i learn here.&lt;/p&gt;</description>
      <pubDate>Sun, 15 May 2011 23:16:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:915b2f66-183a-4e9a-9ee7-00cc466bad8f</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-100249</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by real estate advertising</title>
      <description>&lt;p&gt;wow!!! amazing ideas.. i found your blogs in google and it is so awesome very useful and informative,, try to visit my website too. thanks a lot God bless :)&lt;/p&gt;</description>
      <pubDate>Sat, 14 May 2011 18:56:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:39cefff8-ed00-44e5-8247-83342d4b0ed5</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-100029</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by f350 leveling kit</title>
      <description>&lt;p&gt;wow!!! amazing ideas.. i found your blogs in google and it is so awesome very useful and informative,, try to visit my website too. thanks a lot
God bless :)&lt;/p&gt;</description>
      <pubDate>Wed, 11 May 2011 12:54:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d0e17c57-cbc8-479f-b361-b7860760786b</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-98434</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by leveling kit f250</title>
      <description>&lt;p&gt;i love the article so nice and very informative.&lt;/p&gt;</description>
      <pubDate>Wed, 11 May 2011 12:53:03 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6ccb85d3-73d7-45b9-b7bb-18302b626877</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-98433</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by leveling kit ford</title>
      <description>&lt;p&gt;oh so nice blog and good idea,, maybe you should visit on my website too.. thanks a lot.&lt;/p&gt;</description>
      <pubDate>Wed, 11 May 2011 12:52:10 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:add62ce3-5bd7-4c6d-bae5-6189bff5ff1c</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-98432</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by ford leveling kit</title>
      <description>&lt;p&gt;thanks for this blog,, nice ideas.&lt;/p&gt;</description>
      <pubDate>Wed, 11 May 2011 12:51:04 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e6032b58-8b9b-4635-b5b2-128430f01bb9</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-98431</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by okey oyunu oyna </title>
      <description>&lt;p&gt;nice post.&lt;/p&gt;


	&lt;p&gt;internette g&#246;r&#252;nt&#252;l&#252; olarak &lt;a href="http://www.okeyoyunu-oyna.com" rel="nofollow"&gt;okey oyunu oyna&lt;/a&gt;, ger&#231;ek kisilerle tanis,
 turnuva heyecanini yasa.&lt;/p&gt;</description>
      <pubDate>Thu, 28 Apr 2011 15:37:37 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1941b80b-4ea0-4674-911e-8b4afa80e176</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-92810</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by &lt;a href="http://games.mufasu.com/" rel="dofollow" &gt;Games&lt;/a&gt;</title>
      <description>&lt;p&gt;Thanks it&amp;#8217;s very help me&lt;/p&gt;</description>
      <pubDate>Wed, 27 Apr 2011 14:18:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e62adcb0-2f9b-42cb-8c2e-cb18e05acb82</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-91893</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Baking games</title>
      <description>&lt;p&gt;Your blog has many interesting, nice words of thanks be sent to you&lt;/p&gt;


	&lt;p&gt;Love game day&lt;/p&gt;</description>
      <pubDate>Tue, 12 Apr 2011 13:19:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9399681b-39af-4ce3-ba88-19dac7d713e9</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-83529</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by Game Flash</title>
      <description>&lt;p&gt;Game is an eternal theme that everyone likes. Thanks very much the blog, wish you good health to write better and more&lt;/p&gt;</description>
      <pubDate>Tue, 12 Apr 2011 13:18:03 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:63751962-c71b-4a53-b16b-0245955f9b46</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-83528</link>
    </item>
    <item>
      <title>"Bowling Game Kata in Ruby" by &lt;a href="http://GameFlash.CA"&gt;Game Flash&lt;/a&gt;</title>
      <description>&lt;p&gt;While searching for &amp;#8220;flash game&amp;#8221; on Google I found your blog, read your article, along with many concepts like you, I thank to you&lt;/p&gt;</description>
      <pubDate>Tue, 12 Apr 2011 13:15:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d2bddb25-3c43-4f75-8d08-33cf035cc141</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/01/bowling-game-kata-in-ruby#comment-83527</link>
    </item>
  </channel>
</rss>

