class LoveLetterApplication::Validator::Builder

Public Instance Methods

call(game_board:, last_action_id:) click to toggle source
# File lib/love_letter_application/validator/builder.rb, line 14
def call(game_board:, last_action_id:)
  current_player = game_board.players.find do |player|
    player.id.to_i.eql?(game_board.current_player_id.to_i)
  end

  validate_player_action_and_user = GameValidator::Validator::Base::new(
    legal_options: ['play_card'],
    current_player_id: game_board.current_player_id,
    last_action_id: last_action_id)

  legal_card_ids = get_legal_card_ids.(card_list: current_player.hand)

  validate_card_id = ValidateCardId::new(legal_card_ids: legal_card_ids)

  card_validators = all_card_validator_builders
    .map
    .with_index{|v, k| [k, v]}
    .to_h
    .select{|k, v| legal_card_ids.include?(k)}
    .map{|k, v| [k, v.call(game_board)]}
    .to_h

  play_card = PlayCard::new(
    validate_card_id: validate_card_id,
    full_validator_for: card_validators)

  full_validator_for = 
    {['play_card', true] => play_card, ['play_card', false] => play_card}

  validate_input = GameValidator::Validator::new(
    validate_player_action_and_user: validate_player_action_and_user,
    full_validator_for: full_validator_for)
end