Sha256: f14e67fe02d1d86210b062ba475785f7be4f33af5cfb8e2a4b5a888448fa3cf6

Contents?: true

Size: 859 Bytes

Versions: 1

Compression:

Stored size: 859 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)
      capture = diffs.delete(CAPTURE_CHAR)
      drop    = diffs.delete(DROP_CHAR)

      change(*@captures, capture:, drop:, **diffs)
    end

    private

    def change(*captures, capture: nil, drop: nil, **squares)
      captures.unshift(capture) unless capture.nil?
      captures.delete(drop) { |key| raise ::IndexError, "Capture #{key.inspect} not found!" } unless drop.nil?
      squares = @squares.merge(squares).compact

      [captures, squares]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
qi-10.0.0.beta3 lib/qi/action.rb