class LoveLetterApplication::Models::Effects::SwitchHands

Public Instance Methods

call(game_board:, player_id:, target_player_id:) click to toggle source
# File lib/love_letter_application/models/effects/switch_hands.rb, line 10
def call(game_board:, player_id:, target_player_id:)
  player_replacement = get_replacement(game_board.players, player_id, target_player_id)
  target_replacement = get_replacement(game_board.players, target_player_id, player_id)

  players = game_board
    .players
    .reject{|player| [player_id.to_i, target_player_id.to_i].include?(player.id.to_i)}
    .push(player_replacement)
    .push(target_replacement)
    .freeze

  LoveLetterApplication::Models::GameBoard::new(
    players: players,
    draw_pile: game_board.draw_pile.map(&:itself).freeze,
    set_aside_card: game_board.set_aside_card,
    current_player_id: game_board.current_player_id.to_i,
    game_state: game_board.game_state)
end

Private Instance Methods

get_replacement(players, player_id, target_player_id) click to toggle source
# File lib/love_letter_application/models/effects/switch_hands.rb, line 30
def get_replacement(players, player_id, target_player_id)
  player_to_replace = players
    .find{|player| player.id.to_i.eql?(player_id.to_i)}
  hand_to_replace_with = players
    .find{|player| player.id.to_i.eql?(target_player_id.to_i)}
    .hand
    .map(&:itself)
    .freeze
  LoveLetterApplication::Models::Player::new(
    id: player_to_replace.id.to_i,
    seat: player_to_replace.id.to_i,
    played_cards: player_to_replace.played_cards.map(&:itself).freeze,
    hand: hand_to_replace_with,
    active?: player_to_replace.active?,
    targetable?: player_to_replace.targetable?)
end