Class: Sashite::Ggn::Ruleset

Inherits:
Object
  • Object
show all
Defined in:
lib/sashite/ggn/ruleset.rb,
lib/sashite/ggn/ruleset/source.rb,
lib/sashite/ggn/ruleset/source/destination.rb,
lib/sashite/ggn/ruleset/source/destination/engine.rb

Overview

Note:

Instances are created through parse, which handles validation. The constructor itself does not validate.

Immutable container for GGN movement rules

Defined Under Namespace

Classes: Source

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Ruleset

Note:

This constructor does not validate the data structure. Use Sashite::Ggn.parse or Sashite::Ggn.valid? for validation.

Create a new Ruleset from GGN data structure

Examples:

# Don't use directly - use Sashite::Ggn.parse instead
ruleset = Sashite::Ggn::Ruleset.new(data)

Parameters:

  • data (Hash)

    GGN data structure (pre-validated)



24
25
26
27
28
# File 'lib/sashite/ggn/ruleset.rb', line 24

def initialize(data)
  @data = data

  freeze
end

Instance Method Details

#piece?(piece) ⇒ Boolean

Check if ruleset contains movement rules for specified piece

Examples:

ruleset.piece?("C:K") # => true

Parameters:

  • piece (String)

    QPI piece identifier

Returns:

  • (Boolean)


51
52
53
# File 'lib/sashite/ggn/ruleset.rb', line 51

def piece?(piece)
  @data.key?(piece)
end

#piecesArray<String>

Return all piece identifiers in ruleset

Examples:

ruleset.pieces # => ["C:K", "C:Q", "C:P", ...]

Returns:

  • (Array<String>)

    QPI piece identifiers



61
62
63
# File 'lib/sashite/ggn/ruleset.rb', line 61

def pieces
  @data.keys
end

#select(piece) ⇒ Source

Select movement rules for a specific piece type

Examples:

source = ruleset.select("C:K")

Parameters:

  • piece (String)

    QPI piece identifier

Returns:

  • (Source)

    Source selector object

Raises:

  • (KeyError)

    If piece not found in ruleset



38
39
40
41
42
# File 'lib/sashite/ggn/ruleset.rb', line 38

def select(piece)
  raise ::KeyError, "Piece not found: #{piece}" unless piece?(piece)

  Source.new(@data.fetch(piece))
end