[#347506] how do you do this — George George <george.githinji@...>

Given an array of strings e.g.

20 messages 2009/10/01

[#347686] what do you enjoy in a ruby quiz? — Martin DeMello <martindemello@...>

I've noticed that the ruby quiz has been getting few responses of

22 messages 2009/10/04

[#347700] Count the number of times an element occurs in an array — Jim Burgess <jack.zelig@...>

Hi,

13 messages 2009/10/05

[#347715] regex simplifier? — Roger Pack <rogerpack2005@...>

Question.

17 messages 2009/10/05

[#347765] Ruby for the wrong reason — flebber <flebber.crue@...>

Hi

39 messages 2009/10/06
[#347774] Re: Ruby for the wrong reason — 7stud -- <bbxx789_05ss@...> 2009/10/06

flebber wrote:

[#347800] Re: Ruby for the wrong reason — James Edward Gray II <james@...> 2009/10/06

On Oct 6, 2009, at 1:16 AM, 7stud -- wrote:

[#347821] Re: Ruby for the wrong reason — 7stud -- <bbxx789_05ss@...> 2009/10/06

James Edward Gray II wrote:

[#347830] How to not display output of a system call. — Jerry Mr <jerry.piazza@...>

Lets say I have a Windows command line program that runs the following:

11 messages 2009/10/06

[#347871] Google Wave- I need contacts! — Tim Mcd <tmcdowell@...>

After 6 days, i finally got my gWave invite! ('and there was much

21 messages 2009/10/07
[#347889] Re: Google Wave- I need contacts! — Andrew Timberlake <andrew@...> 2009/10/07

Well, you could share the love (I'd love an invite) and build contacts

[#347899] Re: Google Wave- I need contacts! — Tim Mcd <tmcdowell@...> 2009/10/07

Andrew Timberlake wrote:

[#347904] Re: Google Wave- I need contacts! — Rajinder Yadav <devguy.ca@...> 2009/10/07

Tim, when they restrict the rules you could ping this group for an

[#347909] Re: Google Wave- I need contacts! — Tim Mcd <tmcdowell@...> 2009/10/07

Rajinder Yadav wrote:

[#349016] Re: Google Wave- I need contacts! — Jarod Reid <jarod@...> 2009/10/28

i'd like an invite if you have a spare

[#350049] Re: Google Wave- I need contacts! — Rajinder Yadav <devguy.ca@...> 2009/11/10

Jarod Reid wrote:

[#350081] Re: Google Wave- I need contacts! — Michael Weller <gibbsnich@...> 2009/11/10

Uhh, didn't hear of google wave before.

[#348042] Windows Ruby Version Check — James Edward Gray II <james@...>

Can a Windows Ruby user please confirm that the "Ruby 1.9.1-p129

11 messages 2009/10/09

[#348100] Class Level inheritable attributes - are we there yet? — dreamcat four <dreamcat4@...>

Hi,

34 messages 2009/10/10
[#348103] Re: Class Level inheritable attributes - are we there yet? — "David A. Black" <dblack@...> 2009/10/10

Hi --

[#348104] Re: Class Level inheritable attributes - are we there yet? — dreamcat four <dreamcat4@...> 2009/10/10

The problem with class variables in Ruby, is that a class variable is

[#348136] Re: Class Level inheritable attributes - are we there yet? — Robert Klemme <shortcutter@...> 2009/10/11

On 10/10/2009 08:59 PM, dreamcat four wrote:

[#348200] Re: Class Level inheritable attributes - are we there yet? — "ara.t.howard" <ara.t.howard@...> 2009/10/12

[#348231] Re: Class Level inheritable attributes - are we there yet? — "David A. Black" <dblack@...> 2009/10/12

On Tue, 13 Oct 2009, ara.t.howard wrote:

[#348248] Re: Class Level inheritable attributes - are we there yet? — "ara.t.howard" <ara.t.howard@...> 2009/10/13

On Mon, Oct 12, 2009 at 17:48, David A. Black <dblack@rubypal.com> wrote:

[#348258] Re: Class Level inheritable attributes - are we there yet? — Robert Klemme <shortcutter@...> 2009/10/13

2009/10/13 ara.t.howard <ara.t.howard@gmail.com>:

[#348169] Does ruby.h overrides C "enum"? — Iñaki Baz Castillo <ibc@...>

Hi, writting a Ruby C extension (for 1.8 or 1.9) I get an error when using=

19 messages 2009/10/12

[#348281] how to solve a special JRuby and Java syntax conflict? — "Axel Etzold" <AEtzold@...>

Dear all,

15 messages 2009/10/13
[#348285] Re: how to solve a special JRuby and Java syntax conflict? — Paul Smith <paul@...> 2009/10/13

On Tue, Oct 13, 2009 at 8:52 PM, Axel Etzold <AEtzold@gmx.de> wrote:

[#348286] Re: how to solve a special JRuby and Java syntax conflict? — Paul Smith <paul@...> 2009/10/13

On Tue, Oct 13, 2009 at 9:52 PM, Paul Smith <paul@pollyandpaul.co.uk> wrote:

[#348287] Re: how to solve a special JRuby and Java syntax conflict? — "Axel Etzold" <AEtzold@...> 2009/10/13

Dear Paul,

[#348290] Re: how to solve a special JRuby and Java syntax conflict? — "Walton Hoops" <walton@...> 2009/10/13

Axel Etzold wrote:

[#348325] Re: how to solve a special JRuby and Java syntax conflict? — "Axel Etzold" <AEtzold@...> 2009/10/14

[#348317] deep cloning, how? — Rajinder Yadav <devguy.ca@...>

I am trying to figure out how to perform a deep clone

29 messages 2009/10/14
[#348330] Re: deep cloning, how? — Robert Klemme <shortcutter@...> 2009/10/14

2009/10/14 Rajinder Yadav <devguy.ca@gmail.com>:

[#348366] Re: deep cloning, how? — Caleb Clausen <vikkous@...> 2009/10/14

On 10/14/09, Robert Klemme <shortcutter@googlemail.com> wrote:

[#348379] Re: deep cloning, how? — Robert Klemme <shortcutter@...> 2009/10/14

On 14.10.2009 19:03, Caleb Clausen wrote:

[#348428] Re: deep cloning, how? — Caleb Clausen <vikkous@...> 2009/10/15

On 10/14/09, Robert Klemme <shortcutter@googlemail.com> wrote:

[#348449] Re: deep cloning, how? — Brian Candler <b.candler@...> 2009/10/16

Caleb Clausen wrote:0

[#348339] Hey you! Stop using relative requires! — Intransition <transfire@...>

I recently came across two different programs that had this line in a

22 messages 2009/10/14
[#348365] Re: Hey you! Stop using relative requires! — Tony Arcieri <tony@...> 2009/10/14

On Wed, Oct 14, 2009 at 6:01 AM, Intransition <transfire@gmail.com> wrote:

[#348401] matching against a zillion patterns — George George <george.githinji@...>

i have some script in which i would like to match a string against

18 messages 2009/10/15

[#348486] Dynamic nested each in ruby 1.8.7? — Toi Toi <toi@...>

How can one have a function that uses a dynamic amount of each

15 messages 2009/10/18

[#348570] memory leak — Rob Doug <broken.m@...>

Hi all,

27 messages 2009/10/20
[#348647] Re: memory leak — Robert Klemme <shortcutter@...> 2009/10/20

On 20.10.2009 03:10, Rob Doug wrote:

[#348655] Re: memory leak — Rob Doug <broken.m@...> 2009/10/20

[#348679] Re: memory leak — Robert Klemme <shortcutter@...> 2009/10/21

On 21.10.2009 00:47, Rob Doug wrote:

[#348718] Re: memory leak — Rob Doug <broken.m@...> 2009/10/22

> You could print out object statistics to get an idea about the source of

[#348727] Creating and raising custom exception in Ruby C extension — Iñaki Baz Castillo <ibc@...>

Hi, I'm trying to create a CustomError exception in a Ruby C extension and =

8 messages 2009/10/22

[#348738] convert/replace a value of nil with 0? — Mmcolli00 Mom <mmc_collins@...>

Do you know how I can convert or replace any value that gets back a

12 messages 2009/10/22

[#348825] mail — Mikel Lindsaar <raasdnil@...>

Some of you might know about a little gem that Minero Aoki wrote called tmail.

15 messages 2009/10/25

[#348877] Array#collect in a method call, not working for me — Michael Randall <randallsata@...>

I am sure I'm making a newbie mistake, as I've just started learning

9 messages 2009/10/26

[#349004] duby 0.0.1 Released — Charles Oliver Nutter <headius@...>

duby version 0.0.1 has been released!

18 messages 2009/10/27
[#349007] Re: [ANN] duby 0.0.1 Released — "Bill Kelly" <billk@...> 2009/10/27

[#349022] Closures / lambda question — Aldric Giacomoni <aldric@...>

This is something I don't understand, and did not understand when I

13 messages 2009/10/28

[#349024] Desktop GUI apps in Ruby — Marnen Laibow-Koser <marnen@...>

Hi folks!

35 messages 2009/10/28

[#349099] Ruby can't subtract ? — Aldric Giacomoni <aldric@...>

I found this blog entry:

25 messages 2009/10/28
[#349100] Re: Ruby can't subtract ? — "Matthew K. Williams" <matt@...> 2009/10/28

On Thu, 29 Oct 2009, Aldric Giacomoni wrote:

[#349183] Using multicore CPUs in parallel tasks — Marc Hoeppner <marc.hoeppner@...>

Hi,

19 messages 2009/10/29
[#349203] Re: Using multicore CPUs in parallel tasks — Glen Holcomb <damnbigman@...> 2009/10/29

On Thu, Oct 29, 2009 at 8:56 AM, Marc Hoeppner

[#349221] Re: Using multicore CPUs in parallel tasks — Tony Arcieri <tony@...> 2009/10/29

On Thu, Oct 29, 2009 at 11:48 AM, Glen Holcomb <damnbigman@gmail.com> wrote:

[#349253] Ruby doesn't implement x++ for Fixnum's because ??? — RichardOnRails <RichardDummyMailbox58407@...>

Hi,

159 messages 2009/10/30
[#349303] Re: Ruby doesn't implement x++ for Fixnum's because ??? — RichardOnRails <RichardDummyMailbox58407@...> 2009/10/30

On Oct 29, 9:18=A0pm, RichardOnRails

[#349307] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Robert Klemme <shortcutter@...> 2009/10/30

2009/10/30 RichardOnRails <RichardDummyMailbox58407@uscomputergurus.com>:

[#349337] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Rick DeNatale <rick.denatale@...> 2009/10/30

On Fri, Oct 30, 2009 at 11:05 AM, Robert Klemme

[#349600] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/04

On Fri, Oct 30, 2009 at 12:03 PM, Rick DeNatale <rick.denatale@gmail.com>wrote:

[#349606] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Michael W. Ryder" <_mwryder55@...> 2009/11/04

Tony Arcieri wrote:

[#349607] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/04

On Tue, Nov 3, 2009 at 10:30 PM, Michael W. Ryder <_mwryder55@gmail.com>wrote:

[#349611] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Charles Oliver Nutter <headius@...> 2009/11/04

Of course I had to jump in here.

[#349633] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Rick DeNatale <rick.denatale@...> 2009/11/04

On Wed, Nov 4, 2009 at 1:58 AM, Charles Oliver Nutter

[#349635] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Marnen Laibow-Koser <marnen@...> 2009/11/04

Rick Denatale wrote:

[#349621] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Gavin Sinclair <gsinclair@...> 2009/11/04

On Nov 4, 5:58=A0pm, Charles Oliver Nutter <head...@headius.com> wrote:

[#349654] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/04

On Wed, Nov 4, 2009 at 3:55 AM, Gavin Sinclair <gsinclair@gmail.com> wrote:

[#349665] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Walton Hoops" <walton@...> 2009/11/04

> -----Original Message-----

[#349671] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Michael W. Ryder" <_mwryder55@...> 2009/11/04

Walton Hoops wrote:

[#349682] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Walton Hoops" <walton@...> 2009/11/04

> -----Original Message-----

[#349688] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Michael W. Ryder" <_mwryder55@...> 2009/11/04

Walton Hoops wrote:

[#349689] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Marnen Laibow-Koser <marnen@...> 2009/11/04

Michael W. Ryder wrote:

[#349693] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Walton Hoops" <walton@...> 2009/11/04

> -----Original Message-----

[#349814] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Seebs <usenet-nospam@...> 2009/11/06

On 2009-11-06, David A. Black <dblack@rubypal.com> wrote:

[#349879] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/08

On Fri, Nov 6, 2009 at 4:30 PM, Seebs <usenet-nospam@seebs.net> wrote:

[#349880] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Rick DeNatale <rick.denatale@...> 2009/11/08

On Sun, Nov 8, 2009 at 11:48 AM, Tony Arcieri <tony@medioh.com> wrote:

[#349885] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/08

On Sun, Nov 8, 2009 at 10:45 AM, Rick DeNatale <rick.denatale@gmail.com>wrote:

[#349886] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Marnen Laibow-Koser <marnen@...> 2009/11/08

Tony Arcieri wrote:

[#349887] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/08

On Sun, Nov 8, 2009 at 11:22 AM, Marnen Laibow-Koser <marnen@marnen.org>wrote:

[#349889] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Walton Hoops" <walton@...> 2009/11/08

> -----Original Message-----

[#349892] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/08

On Sun, Nov 8, 2009 at 11:49 AM, Walton Hoops <walton@vyper.hopto.org>wrote:

[#349898] Re: Ruby doesn't implement x++ for Fixnum's because ??? — "Walton Hoops" <walton@...> 2009/11/08

> From: bascule@gmail.com [mailto:bascule@gmail.com] On Behalf Of Tony

[#349900] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Tony Arcieri <tony@...> 2009/11/08

On Sun, Nov 8, 2009 at 1:15 PM, Walton Hoops <walton@vyper.hopto.org> wrote:

[#349980] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Seebs <usenet-nospam@...> 2009/11/09

On 2009-11-09, Marnen Laibow-Koser <marnen@marnen.org> wrote:

[#349988] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Rick DeNatale <rick.denatale@...> 2009/11/09

On Mon, Nov 9, 2009 at 8:40 AM, Seebs <usenet-nospam@seebs.net> wrote:

[#349989] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Marnen Laibow-Koser <marnen@...> 2009/11/09

Rick Denatale wrote:

[#349994] Re: Ruby doesn't implement x++ for Fixnum's because ??? — Aldric Giacomoni <aldric@...> 2009/11/09

Marnen Laibow-Koser wrote:

[#349264] How do you get the tail end of a string? — "Just Another Victim of the Ambient Morality" <ihatespam@...>

I'm actually hoping this is an embarrassing question but how do you get

55 messages 2009/10/30
[#349266] Re: How do you get the tail end of a string? — "Michael W. Ryder" <_mwryder55@...> 2009/10/30

Just Another Victim of the Ambient Morality wrote:

[#349267] Re: How do you get the tail end of a string? — "Michael W. Ryder" <_mwryder55@...> 2009/10/30

Michael W. Ryder wrote:

[#349286] Re: How do you get the tail end of a string? — Bertram Scharpf <lists@...> 2009/10/30

Hi,

[#349323] Merging hashes using both symbols and strings as keys — shenry <stuarthenry@...>

I'm trying to merge to hashes, one using symbols as keys (the defined

15 messages 2009/10/30
[#349528] Re: Merging hashes using both symbols and strings as keys — Josh Cheek <josh.cheek@...> 2009/11/03

On Fri, Oct 30, 2009 at 11:10 AM, shenry <stuarthenry@gmail.com> wrote:

[#349352] In-place parameter modification — Dave Anderson <anderson@...>

Native to ruby are several methods that change passed-in parameters

17 messages 2009/10/30

[#349406] Hamurabi (#223) — Daniel Moore <yahivin@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

23 messages 2009/10/31
[#349451] Re: [QUIZ] Hamurabi (#223) — James Edward Gray II <james@...> 2009/11/01

On Oct 31, 2009, at 6:23 PM, Daniel Moore wrote:

[#349498] Re: [QUIZ] Hamurabi (#223) — Martin DeMello <martindemello@...> 2009/11/02

On Mon, Nov 2, 2009 at 5:29 AM, James Edward Gray II

Please Review My First Ruby Program

From: Simeon Willbanks <simeon@...>
Date: 2009-10-20 17:24:45 UTC
List: ruby-talk #348629
I've written a simple program to simulate a Soccer game.  Its the first
full program I've written in Ruby, so please forgive any obvious
mistakes.  :)  In advance, thanks for your comments.  It requires Ruby
1.9.  Please run the unit tests to see the program in action.

Simeon

$ ruby TestSoccerGame.rb

---

### TestSoccerGame.rb
require "SoccerGame"
require "test/unit"

class TestSoccerGame < Test::Unit::TestCase

  # M辿s que un club
  FC_BARCELONA = {
    'club' => 'FC Barcelona',
    'players' => [
      [1,   'Victor Valdes Arribas',  :keeper],
      [20,  'Daniel Alves da Silva',  :defender],
      [3,   'Gerard Pique Bernabeu',  :defender],
      [4,   'Rafael Marquez Alvarez', :defender],
      [5,   'Carles Puyol Saforcada', :defender],
      [6,   'Xavier Hernandez Creus', :midfielder],
      [8,   'Andres Iniesta Lujan',   :midfielder],
      [15,  'Seydou Keita',           :midfielder],
      [9,   'Zlatan Ibrahimovic',     :striker],
      [10,  'Lionel Andres Messi',    :striker],
      [14,  'Thierry Henry',          :striker]
    ]
  }

  # You'll Never Walk Alone
  LIVERPOOL_FC = {
    'club' => 'Liverpool FC',
    'players' => [
      [25,  'Pepe Reina',       :keeper],
      [2,   'Glen Johnson',     :defender],
      [23,  'Jamie Carragher',  :defender],
      [37,  'Martin Skrtel',    :defender],
      [22,  'Emiliano Insua',   :defender],
      [20,  'Javier Mascherano',:midfielder],
      [8,   'Steven Gerrard',   :midfielder],
      [11,  'Albert Riera',     :midfielder],
      [15,  'Yossi Benayoun',   :midfielder],
      [9,   'Fernando Torres',  :striker],
      [18,  'Dirk Kuyt',        :striker]
    ]
  }

  def setup
    if RUBY_VERSION.to_f < 1.9
      flunk("SoccerGame requires Ruby 1.9 or greater")
    end

    # @g used for all tests except full game test
    @g = SoccerGame.new FC_BARCELONA, LIVERPOOL_FC
  end

  # Full game test
  def test_champions_league_final
    @f = SoccerGame.new FC_BARCELONA, LIVERPOOL_FC
    @f.title = "UEFA Champions League Final"

    # Starting lineups
    assert @f.home
    assert @f.away
    assert_equal 11, @f.home.players.length
    assert_equal 11, @f.away.players.length

    # Kickoff
    assert @f.events(:first_half_kickoff)
    assert @f.first_half
    assert_equal false, @f.second_half

    # Show Alves yellow
    assert_block "Dani Alves" do
      @f.yellow_card(:home, 20)
    end
    assert_equal 1, @f.yellow_cards[:home].length

    # El Nino sneaks one in
    @f.goal(:away, 9)
    assert_equal 1, @f.score[:away]
    assert_equal 1, @f.goals[:away][9]

    # Halftime
    assert @f.events(:half_time)
    assert_equal false, @f.first_half
    assert_equal false, @f.second_half

    # Start second half
    assert @f.events(:second_half_kickoff)
    assert @f.second_half
    assert_equal false, @f.first_half

    # Show Skrtel red
    away_team_length = @f.away.players.length
    assert_block "Skrtel wasn't sent to the showers" do
      @f.red_card(:away, 37)
    end
    assert_equal away_team_length-1, @f.away.players.length
    assert_equal 1, @f.red_cards[:away].length

    # Xavi ties the match
    @f.goal(:home, 6)
    assert_equal 1, @f.score[:home]
    assert_equal 1, @f.goals[:home][6]

    # Messi seals the victory
    @f.goal(:home, 10)
    assert_equal 2, @f.score[:home]
    assert_equal 1, @f.goals[:home][10]

    # Fulltime
    assert @f.events(:final)
    assert_equal false, @f.second_half
    assert_equal false, @f.first_half

    # Champions League Final stats
    puts @f.stats
  end

  # A home and away team are required
  def test_home_away
    assert @g.home
    assert @g.away
  end

  # Both home and away teams must have 11 players
  def test_starting_lineups
    assert_equal 11, @g.home.players.length
    assert_equal 11, @g.away.players.length
  end

  # Positions normally have at least a certian number players
  def test_players_per_position
    assert_equal 1, @g.home.keepers.length
    assert_operator 3, :<=, @g.home.defenders.length
    assert_operator 3, :<=, @g.home.midfielders.length
    assert_operator 1, :<=, @g.home.strikers.length
    assert_equal 1, @g.away.keepers.length
    assert_operator 3, :<=, @g.away.defenders.length
    assert_operator 3, :<=, @g.away.midfielders.length
    assert_operator 1, :<=, @g.away.strikers.length
  end

  def test_first_half_kickoff
    assert @g.events(:first_half_kickoff)
    assert @g.first_half
    assert_equal false, @g.second_half
  end

  def test_half_time
    assert @g.events(:half_time)
    assert_equal false, @g.first_half
    assert_equal false, @g.second_half
  end

  def test_second_half_kickoff
    assert @g.events(:second_half_kickoff)
    assert @g.second_half
    assert_equal false, @g.first_half
  end

  def test_final_whistle
    assert @g.events(:final)
    assert_equal false, @g.second_half
    assert_equal false, @g.first_half
  end

  def test_cards
    # Show Pique yellow
    assert_block "Pique isn't cautioned" do
      @g.yellow_card(:home, 3)
    end
    assert_equal 1, @g.yellow_cards[:home].length

    # Show Skrtel red
    away_team_length = @g.away.players.length
    assert_block "Skrtel wasn't sent to the showers" do
      @g.red_card(:away, 37)
    end
    assert_equal away_team_length-1, @g.away.players.length
    assert_equal 1, @g.away.showers.length
    assert_equal 1, @g.red_cards[:away].length

    # Show Pique second yellow then red
    home_team_length = @g.home.players.length
    assert_block "Pique wasn't sent off" do
      @g.yellow_card(:home, 3)
    end
    assert_equal home_team_length-1, @g.home.players.length
    assert_equal 1, @g.red_cards[:home].length
  end

  def test_scoring_a_goals
    # Messi opens the scoring
    @g.goal(:home, 10)
    assert_equal 1, @g.score[:home]
    assert_equal 1, @g.goals[:home][10]

    # El Nino sneaks one in
    @g.goal(:away, 9)
    assert_equal 1, @g.score[:away]
    assert_equal 1, @g.goals[:away][9]

    # Ibra is so smooth
    @g.goal(:home, 9)
    assert_equal 2, @g.score[:home]
    assert_equal 1, @g.goals[:home][9]

    # Messi seals the victory
    @g.goal(:home, 10)
    assert_equal 3, @g.score[:home]
    assert_equal 2, @g.goals[:home][10]
  end

end

### SoccerGame.rb
require "SoccerTeam"
require "SoccerStats"

class SoccerGame

  attr_accessor :title

  attr_reader :home, :away,
    :yellow_cards, :red_cards,
    :clock, :score, :goals,
    :first_half, :second_half

  def initialize(home, away)
    @home = SoccerTeam.new(home['club'],home['players'])
    @away = SoccerTeam.new(away['club'],away['players'])
    @yellow_cards = {:home => [], :away => []}
    @red_cards = {:home => [], :away => []}
    @score = {:home => 0, :away => 0}
    @goals = {:home => {}, :away => {}}
    @first_half = false
    @second_half = false
  end

  def stats
    s = SoccerStats.new
    stats = "\n"+s.title(self.title)
    stats << s.teams(@home.club, @away.club)
    stats << s.final_score(@score[:home], @score[:away])
    stats << "\n"+s.cards(:yellow, @yellow_cards[:away], @away)
    stats << s.cards(:yellow, @yellow_cards[:home], @home)
    stats << s.cards(:red, @red_cards[:away], @away)
    stats << s.cards(:red, @red_cards[:home], @home)
    stats << s.scorers(@goals, @home, @away)
    stats
  end

  def events(whistle)
    case whistle
      when :first_half_kickoff then @first_half = true
      when :half_time then @first_half = false
      when :second_half_kickoff then @second_half = true
      when :final then @second_half = false
    end
    @clock = Time.now.to_i
  end

  def count_players_on_pitch
    msg = "team doesn't have the right number of players on the pitch"
    if @home.players.length != 11
      raise "Home" + msg
    elsif @away.players.length != 11
      raise "Away" + msg
    end
  end

  def yellow_card(team, player)
    # Second yellow card so, show a red
    if @yellow_cards[team].index(player)
      @yellow_cards[team].push player
      red_card(team, player)
    else
      @yellow_cards[team].push player
    end
  end

  def red_card(team, player)
    @red_cards[team].push player
    if team == :home
      # Send player to the showers
      @home.showers[player] = @home.players[player]
      @home.players.delete(player)
    else
      @away.showers[player] = @away.players[player]
      @away.players.delete(player)
    end
  end

  def goal(team, player)
    @score[team] += 1
    if @goals[team][player]
      @goals[team][player] += 1
    else
      @goals[team][player] = 1
    end
  end

end

### SoccerTeam.rb
class SoccerTeam

  attr_accessor :showers

  attr_reader :club, :players,
    :keepers, :defenders, :midfielders, :strikers

  def initialize(club, players)
    @club = club
    @players = {}
    @keepers = {}
    @defenders = {}
    @midfielders = {}
    @strikers = {}
    @showers = {}
    players.each do |number, name, position|
      @players[number] = name
      # Push player into position
      case position
        when :keeper then @keepers[number] = name
        when :defender then @defenders[number] = name
        when :midfielder then @midfielders[number] = name
        when :striker then @strikers[number] = name
      end
    end
  end

end

###  SoccerStats.rb
class SoccerStats

  def title(name)
    self.own_line(name)
  end

  def teams(home,away)
    self.own_line(away+" visiting "+home)
  end

  def final_score(home,away)
    self.own_line(away.to_s+" / "+home.to_s)
  end

  def cards(type, cards, team)
    str = ""
    if !cards.empty?
      if (type == :yellow)
        str << "Yellow"
        # Player hasn't been deleted from the team
        # He was only shown a yellow card
        player_hash = team.players
      else
        str << "Red"
        # Player was deleted from the team
        # He was shown a red card
        player_hash = team.showers
      end
      str << " Cards:\n"

      cards.each do |number|
        str << number.to_s+"/"+player_hash[number]+"/"+team.club+"\n"
      end

      str = self.own_line(str)
    end
    str
  end

  def scorers(goals, home, away)
    str = ""
    if !goals.empty?
      # Loop through each teams' goals, and print player number, name
and goals scored
      {:home=>home,:away=>away}.each do |key, team|
        if goals.has_key?(key)
          goals[key].each do |number, goals|
            str << number.to_s+"/"+team.players[number]+"/"+team.club+"
scores "+goals.to_s+" goal"
            if goals > 1
              str << "s"
            end
            str << "\n"
          end
        end
      end
      str = self.own_line("Goals:")+self.own_line(str)
    end
    str
  end

  def own_line(str)
    str+"\n"
  end
end
-- 
Posted via http://www.ruby-forum.com/.

In This Thread

Prev Next