Module: Sashite::Ggn

Defined in:
lib/sashite/ggn.rb,
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

General Gameplay Notation (GGN) implementation

GGN is a rule-agnostic format for describing pseudo-legal moves in abstract strategy board games.

Defined Under Namespace

Classes: Ruleset

Class Method Summary collapse

Class Method Details

.parse(data) ⇒ Ruleset

Parse GGN data structure into an immutable Ruleset

Examples:

Parse GGN data

ruleset = Sashite::Ggn.parse({
  "C:P" => {
    "e2" => {
      "e4" => [
        {
          "must" => { "e3" => "empty", "e4" => "empty" },
          "deny" => {},
          "diff" => {
            "board" => { "e2" => nil, "e4" => "C:P" },
            "toggle" => true
          }
        }
      ]
    }
  }
})

Parameters:

  • data (Hash)

    GGN data structure conforming to specification

Returns:

  • (Ruleset)

    Immutable ruleset object

Raises:

  • (ArgumentError, TypeError)

    If data structure is invalid



36
37
38
# File 'lib/sashite/ggn.rb', line 36

def self.parse(data)
  Ruleset.new(data)
end

.valid?(data) ⇒ Boolean

Note:

Rescues both ArgumentError (invalid structure) and TypeError (wrong type)

Validate GGN data structure against specification

Examples:

Validate GGN data

Sashite::Ggn.valid?(ggn_data) # => true
Sashite::Ggn.valid?("invalid") # => false (TypeError)
Sashite::Ggn.valid?(nil) # => false (TypeError)

Parameters:

  • data (Hash)

    Data structure to validate

Returns:

  • (Boolean)

    True if valid, false otherwise



51
52
53
54
55
56
# File 'lib/sashite/ggn.rb', line 51

def self.valid?(data)
  parse(data)
  true
rescue ::ArgumentError, ::TypeError
  false
end