Module: Sashite::Cgsn

Defined in:
lib/sashite/cgsn.rb

Overview

CGSN (Chess Game Status Notation) implementation for Ruby.

Provides a rule-agnostic vocabulary for identifying game statuses in abstract strategy board games with symbol-based identifiers.

Examples:

Parsing

Sashite::Cgsn.parse("checkmate")  # => :checkmate

Validation

Sashite::Cgsn.valid?("checkmate")  # => true
Sashite::Cgsn.valid?("invalid")    # => false

Classification

Sashite::Cgsn.inferable?(:checkmate)       # => true
Sashite::Cgsn.explicit_only?(:resignation) # => true

See Also:

Constant Summary collapse

INFERABLE_STATUSES =

Position-inferable status symbols.

These can be determined from Position + Rule System alone.

Returns:

  • (Set<Symbol>)

    frozen set of inferable status symbols

Set[
  :check,
  :stale,
  :checkmate,
  :stalemate,
  :nomove,
  :bareking,
  :mareking,
  :insufficient
].freeze
EXPLICIT_ONLY_STATUSES =

Explicit-only status symbols.

These require external context (history, clocks, declarations).

Returns:

  • (Set<Symbol>)

    frozen set of explicit-only status symbols

Set[
  :resignation,
  :illegalmove,
  :timelimit,
  :movelimit,
  :repetition,
  :agreement
].freeze
STATUSES =

All CGSN v1.0.0 status symbols.

Returns:

  • (Set<Symbol>)

    frozen set of all status symbols

(INFERABLE_STATUSES | EXPLICIT_ONLY_STATUSES).freeze

Class Method Summary collapse

Class Method Details

.explicit_only?(status) ⇒ Boolean

Reports whether the status is explicit-only.

Explicit-only statuses require external context (history, clocks, declarations) and cannot be derived from Position + Rule System alone.

Examples:

Sashite::Cgsn.explicit_only?(:resignation)  # => true
Sashite::Cgsn.explicit_only?(:timelimit)    # => true
Sashite::Cgsn.explicit_only?(:checkmate)    # => false

Parameters:

  • status (Symbol)

    The status to check

Returns:

  • (Boolean)

    true if explicit-only, false otherwise



129
130
131
132
133
# File 'lib/sashite/cgsn.rb', line 129

def self.explicit_only?(status)
  return false unless ::Symbol === status

  EXPLICIT_ONLY_STATUSES.include?(status)
end

.explicit_only_statusesSet<Symbol>

Returns explicit-only status symbols.

Examples:

Sashite::Cgsn.explicit_only_statuses
# => #<Set: {:resignation, :illegalmove, :timelimit, ...}>

Returns:

  • (Set<Symbol>)

    frozen set of explicit-only status symbols



164
165
166
# File 'lib/sashite/cgsn.rb', line 164

def self.explicit_only_statuses
  EXPLICIT_ONLY_STATUSES
end

.inferable?(status) ⇒ Boolean

Reports whether the status is position-inferable.

Position-inferable statuses can be determined from Position + Rule System without external context (history, clocks, declarations).

Examples:

Sashite::Cgsn.inferable?(:checkmate)   # => true
Sashite::Cgsn.inferable?(:stalemate)   # => true
Sashite::Cgsn.inferable?(:repetition)  # => false

Parameters:

  • status (Symbol)

    The status to check

Returns:

  • (Boolean)

    true if position-inferable, false otherwise



111
112
113
114
115
# File 'lib/sashite/cgsn.rb', line 111

def self.inferable?(status)
  return false unless ::Symbol === status

  INFERABLE_STATUSES.include?(status)
end

.inferable_statusesSet<Symbol>

Returns position-inferable status symbols.

Examples:

Sashite::Cgsn.inferable_statuses
# => #<Set: {:check, :stale, :checkmate, :stalemate, ...}>

Returns:

  • (Set<Symbol>)

    frozen set of inferable status symbols



153
154
155
# File 'lib/sashite/cgsn.rb', line 153

def self.inferable_statuses
  INFERABLE_STATUSES
end

.parse(input) ⇒ Symbol

Parses a CGSN string into a symbol.

Examples:

Sashite::Cgsn.parse("checkmate")    # => :checkmate
Sashite::Cgsn.parse("resignation")  # => :resignation

Invalid input

Sashite::Cgsn.parse("invalid")  # => raises ArgumentError
Sashite::Cgsn.parse("")         # => raises ArgumentError

Parameters:

  • input (String)

    The CGSN status string to parse

Returns:

  • (Symbol)

    The corresponding status symbol

Raises:

  • (ArgumentError)

    If the input is not a valid CGSN status



76
77
78
79
80
# File 'lib/sashite/cgsn.rb', line 76

def self.parse(input)
  raise ::ArgumentError, "invalid status" unless valid?(input)

  :"#{input}"
end

.statusesSet<Symbol>

Returns all CGSN v1.0.0 status symbols.

Examples:

Sashite::Cgsn.statuses
# => #<Set: {:check, :stale, :checkmate, ...}>

Returns:

  • (Set<Symbol>)

    frozen set of all status symbols



142
143
144
# File 'lib/sashite/cgsn.rb', line 142

def self.statuses
  STATUSES
end

.valid?(input) ⇒ Boolean

Reports whether the input is a valid CGSN status string.

Examples:

Sashite::Cgsn.valid?("checkmate")    # => true
Sashite::Cgsn.valid?("resignation")  # => true
Sashite::Cgsn.valid?("invalid")      # => false
Sashite::Cgsn.valid?("")             # => false
Sashite::Cgsn.valid?(nil)            # => false

Parameters:

  • input (Object)

    The value to check

Returns:

  • (Boolean)

    true if valid, false otherwise



93
94
95
96
97
# File 'lib/sashite/cgsn.rb', line 93

def self.valid?(input)
  return false unless ::String === input

  VALID_STRINGS.include?(input)
end