bbuchalter/tictactoe_core

View on GitHub
lib/tictactoe/tuple.rb

Summary

Maintainability
A
0 mins
Test Coverage
module TicTacToe
  class Tuple
    include Enumerable

    def initialize(tuple)
      @tuple = tuple
    end

    def [](index)
      tuple[index]
    end

    def each(&block)
      @tuple.each(&block)
    end

    def all_for_same_player?
      player = find_any_player_in_tuple
      return false if player.nil?
      tuple.all? { |position| position.player == player }
    end

    def two_for_same_player?
      player = find_any_player_in_tuple
      return false if player.nil?
      two_for?(player)
    end

    def one_empty?
      tuple.count { |position| position.empty? } == 1
    end

    def two_for?(player)
      tuple.count { |position| position.player == player } == 2
    end

    private

    def find_any_player_in_tuple
      position = position_with_player
      position.nil? ? nil : position.player
    end

    def position_with_player
      tuple.find { |position| !position.empty? }
    end

    attr_reader :tuple
  end
end