Sha256: b66a46c31103ee07be14c6a81931c1de3428779b6dccd163eef76b62b774c3d0
Contents?: true
Size: 995 Bytes
Versions: 1
Compression:
Stored size: 995 Bytes
Contents
# frozen_string_literal: true module Qi # The Action abstraction. class Action CAPTURE_CHAR = "&" DROP_CHAR = "*" # Action initializer. def initialize(*captures, **squares) @captures = captures @squares = squares end # Commit an action to the position. # # @return [Array] An action to change the position. def call(**diffs) captures = @captures squares = @squares diffs.each do |k, v| case String(k) when CAPTURE_CHAR captures = capture(v, *captures) when DROP_CHAR captures = drop(v, *captures) else squares = squares.merge(k => v) end end [captures, squares.compact] end private def capture(item, *items) [item] + items end def drop(item, *items) item_id = items.index(item) || raise(::IndexError, "Piece #{item.inspect} not found!") items.delete_at(item_id) items end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
qi-10.0.0.beta2 | lib/qi/action.rb |