class Bagel::Tennis::Checker
Constants
- BREAK_POINT
- MATCH_POINT
- MINIMUM_GAMES_TO_WIN_SET
- MINIMUM_POINTS_TO_WIN_GAME
- MINIMUM_POINTS_TO_WIN_TIEBREAK
- SETS_TO_WIN_MATCH
- SET_POINT
- TIEBREAK_AT
Public Class Methods
new(sets:, points:, server:)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 17 def initialize(sets:, points:, server:) @sets, @points, @server = sets, points, server @receiver = Player.opponent(server) end
Public Instance Methods
break_point?()
click to toggle source
# File lib/bagel/tennis/checker.rb, line 22 def break_point? next_point_wins_game?(receiver) end
match_point?()
click to toggle source
# File lib/bagel/tennis/checker.rb, line 30 def match_point? next_point_wins_match?(server) || next_point_wins_match?(receiver) end
set_point?()
click to toggle source
# File lib/bagel/tennis/checker.rb, line 26 def set_point? next_point_wins_set?(server) || next_point_wins_set?(receiver) end
tiebreak?()
click to toggle source
# File lib/bagel/tennis/checker.rb, line 34 def tiebreak? sets.last == Tennis::Checker::TIEBREAK_AT end
Private Instance Methods
enough_games_won?(player, set)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 92 def enough_games_won?(player, set) games_for(player, set) >= MINIMUM_GAMES_TO_WIN_SET end
games_for(player, set)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 44 def games_for(player, set) set[Player.index(player)] end
more_games_than_opponent?(player, set)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 96 def more_games_than_opponent?(player, set) games_for(player, set) > games_for(Player.opponent(player), set) end
next_game_wins_set?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 56 def next_game_wins_set?(player) will_have_required_games?(sets.last, player) && will_have_game_margin?(sets.last, player) end
next_point_wins_game?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 48 def next_point_wins_game?(player) will_have_required_points?(player) && will_have_point_margin?(player) end
next_point_wins_match?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 60 def next_point_wins_match?(player) next_point_wins_set?(player) && next_set_wins_match?(player) end
next_point_wins_set?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 52 def next_point_wins_set?(player) next_point_wins_game?(player) && next_game_wins_set?(player) end
next_set_wins_match?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 64 def next_set_wins_match?(player) sets_won(player) + 1 == SETS_TO_WIN_MATCH end
points_for(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 40 def points_for(player) points[Player.index(player)] end
sets_won(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 84 def sets_won(player) sets.count { |set| won_set?(set, player) } end
will_have_game_margin?(set, player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 80 def will_have_game_margin?(set, player) games_for(player, set) - games_for(Player.opponent(player), set) >= 1 end
will_have_point_margin?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 76 def will_have_point_margin?(player) points_for(player) - points_for(Player.opponent(player)) >= 1 end
will_have_required_games?(set, player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 72 def will_have_required_games?(set, player) games_for(player, set) + 1 >= MINIMUM_GAMES_TO_WIN_SET end
will_have_required_points?(player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 68 def will_have_required_points?(player) points_for(player) + 1 >= (tiebreak? ? MINIMUM_POINTS_TO_WIN_TIEBREAK : MINIMUM_POINTS_TO_WIN_GAME) end
won_set?(set, player)
click to toggle source
# File lib/bagel/tennis/checker.rb, line 88 def won_set?(set, player) enough_games_won?(player, set) && more_games_than_opponent?(player, set) end