bbuchalter/tictactoe_core

View on GitHub
lib/tictactoe/game/query_state.rb

Summary

Maintainability
A
0 mins
Test Coverage
module TicTacToe
  class Game
    module QueryState
      def current_player
        previous_move_player == player_one ? player_two : player_one
      end

      def previous_move_player
        turn_count == 0 ? nil : previous_move.player
      end

      def previous_move_position
        turn_count == 0 ? nil : previous_move.position
      end

      def empty_positions
        empty_positions = board.select(&:empty?)
        empty_positions.map(&:at)
      end

      def two_threats_by?(player)
        threat_count = board.tuples.count do |tuple|
          tuple.two_for?(player) && tuple.one_empty?
        end
        threat_count == 2
      end

      def previous_move_in_corner?
        previous_move.nil? ? false : previous_move.corner?
      end

      def player_made_at_least_two_moves?(player)
        move_history.count { |move| move.player == player } >= 2
      end

      private

      def previous_move
        move_history[-1]
      end
    end
  end
end