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