class Gobstones::Runner::Cell

Public Class Methods

new() click to toggle source
# File lib/gobstones/runner/cell.rb, line 6
def initialize
  @values = Hash[Color.all.map { |color| [color, 0] }]
end

Public Instance Methods

are_there_balls?(color) click to toggle source
# File lib/gobstones/runner/cell.rb, line 22
def are_there_balls?(color)
  check(color)
  number_of_balls(color).positive?
end
clone() click to toggle source
# File lib/gobstones/runner/cell.rb, line 40
def clone
  self.class.new.tap do |copy|
    Color.all.map(&:new).each do |color|
      number_of_balls(color).times { copy.put(color) }
    end
  end
end
empty!() click to toggle source
# File lib/gobstones/runner/cell.rb, line 32
def empty!
  initialize
end
empty?() click to toggle source
# File lib/gobstones/runner/cell.rb, line 36
def empty?
  @values.values.all?(&:zero?)
end
number_of_balls(color) click to toggle source
# File lib/gobstones/runner/cell.rb, line 27
def number_of_balls(color)
  check(color)
  lookup(color)
end
put(color) click to toggle source
# File lib/gobstones/runner/cell.rb, line 10
def put(color)
  check(color)
  lookup(color) { |value| value + 1 }
end
take_out(color) click to toggle source
# File lib/gobstones/runner/cell.rb, line 15
def take_out(color)
  check(color)
  raise EmptyCellError unless are_there_balls?(color)

  lookup(color) { |value| value - 1 }
end

Private Instance Methods

check(color) click to toggle source
# File lib/gobstones/runner/cell.rb, line 50
def check(color)
  raise "'#{color}' is not a color" unless Color.all.include?(color.class)
end
lookup(color) { |values| ... } click to toggle source
# File lib/gobstones/runner/cell.rb, line 54
def lookup(color)
  value = @values.keys.detect { |col| col == color.class }
  if block_given?
    @values[value] = yield @values[value]
  else
    @values[value]
  end
end