class View::Board

Public Class Methods

new(board_presenter, table_klass) click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 3
def initialize(board_presenter, table_klass)
  @board_presenter = board_presenter
  @table_klass = table_klass
end

Public Instance Methods

render() click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 8
def render
  tile_collection = @board_presenter.tile_collection
  headings = generate_headings(tile_collection.dimensions)
  rows = format_rows(tile_collection.rows)
  table = @table_klass.new(headings: headings, rows: rows, style: { all_separators: true })

  display_msg(table)
end

Private Instance Methods

format_row(row) click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 39
def format_row(row)
  formatted = row.map do |tile|
    piece = tile.piece

    piece.nil? ? '' : piece.name
  end

  formatted
end
format_rows(rows) click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 29
def format_rows(rows)
  rows.each_with_object([]).with_index do |(row, arr), i|
    formatted = format_row(row)

    formatted.unshift(i + 1)

    arr << formatted
  end
end
generate_headings(dimensions) click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 25
def generate_headings(dimensions)
  generate_indexes(dimensions)
end
generate_indexes(dimensions) click to toggle source
# File lib/tic_tac_toe/view/board.rb, line 19
def generate_indexes(dimensions)
  range = (1..dimensions)

  range.each_with_object(['']) { |i, indexes| indexes << i }
end