lib/icu_tournament/team.rb in icu_tournament-1.1.2 vs lib/icu_tournament/team.rb in icu_tournament-1.2.0

- old
+ new

@@ -1,88 +1,81 @@ module ICU - -=begin rdoc - -== Team - -A team consists of a name and one or more players referenced by numbers. -Typically the team will be attached to a tournament (ICU::Tournament) -and the numbers will the unique numbers by which the players in that -tournament are referenced. To instantiate a team, you must supply a -name. - - team = ICU::Team.new('Wandering Dragons') - -Then you simply add player's (numbers) to it. - - team.add_player(1) - team.add_payeer(3) - team.add_player(7) - -To get the current members of a team - - team.members # => [1, 3, 7] - -You can enquire whether a team contains a given player number. - - team.contains?(3) # => true - team.contains?(4) # => false - -Or whether it matches a given name (which ignoring case and removing spurious whitespace) - - team.matches(' wandering dragons ') # => true - team.matches('Blundering Bishops') # => false - -Whenever you reset the name of a tournament spurious whitespace is removed but case is not altered. - - team.name = ' blundering bishops ' - team.name # => "blundering bishops" - -Attempting to add non-numbers or duplicate numbers as new team members results in an exception. - - team.add(nil) # exception - not a number - team.add(3) # exception - already a member - -=end - + # + # A team consists of a name and one or more players referenced by numbers. + # Typically the team will be attached to a tournament (ICU::Tournament) + # and the numbers will the unique numbers by which the players in that + # tournament are referenced. To instantiate a team, you must supply a + # name. + # + # team = ICU::Team.new('Wandering Dragons') + # + # Then you simply add player's (numbers) to it. + # + # team.add_player(1) + # team.add_payeer(3) + # team.add_player(7) + # + # To get the current members of a team + # + # team.members # => [1, 3, 7] + # + # You can enquire whether a team contains a given player number. + # + # team.contains?(3) # => true + # team.contains?(4) # => false + # + # Or whether it matches a given name (which ignoring case and removing spurious whitespace) + # + # team.matches(' wandering dragons ') # => true + # team.matches('Blundering Bishops') # => false + # + # Whenever you reset the name of a tournament spurious whitespace is removed but case is not altered. + # + # team.name = ' blundering bishops ' + # team.name # => "blundering bishops" + # + # Attempting to add non-numbers or duplicate numbers as new team members results in an exception. + # + # team.add(nil) # exception - not a number + # team.add(3) # exception - already a member + # class Team - attr_reader :name, :members - + # Constructor. Name must be supplied. def initialize(name) self.name = name @members = Array.new end - + # Set name. Must not be blank. def name=(name) @name = name.strip.squeeze(' ') raise "team can't be blank" if @name.length == 0 end - + # Add a team member referenced by any integer. def add_member(number) pnum = number.to_i raise "'#{number}' is not a valid as a team member player number" if pnum == 0 && !number.to_s.match(/^[^\d]*0/) raise "can't add duplicate player number #{pnum} to team '#{@name}'" if @members.include?(pnum) @members.push(pnum) end - + # Renumber the players according to the supplied hash. Return self. def renumber(map) @members.each_with_index do |pnum, index| raise "player number #{pnum} not found in renumbering hash" unless map[pnum] @members[index] = map[pnum] end self end - + # Detect if a member exists in a team. def include?(number) @members.include?(number) end - + # Does the team name match the given string (ignoring case and spurious whitespace). def matches(name) self.name.downcase == name.strip.squeeze(' ').downcase end end \ No newline at end of file