class JustShogi::PromotionFactory

Promotion Factory

Generates the promoted or demoted piece given a piece

Constants

PROMOTIONS

A mapping of promotions

Public Class Methods

new(piece) click to toggle source

New objects can be instantiated by passing in the piece

@params [Piece] piece

the piece to be promoted
# File lib/just_shogi/promotion_factory.rb, line 39
def initialize(piece)
  @piece = piece
end

Public Instance Methods

demotable?() click to toggle source
# File lib/just_shogi/promotion_factory.rb, line 47
def demotable?
  !PROMOTIONS.key(@piece.class).nil?
end
demote() click to toggle source

Returns the demoted piece

# File lib/just_shogi/promotion_factory.rb, line 62
def demote
  demoted_klass = PROMOTIONS.key(@piece.class)
  if demoted_klass 
    demoted_klass.new(id: @piece.id, player_number: @piece.player_number)
  else
    raise ArgumentError, "Piece cannot be demoted."
  end
end
promotable?() click to toggle source
# File lib/just_shogi/promotion_factory.rb, line 43
def promotable?
  !PROMOTIONS[@piece.class].nil?
end
promote() click to toggle source

Returns the promoted piece

# File lib/just_shogi/promotion_factory.rb, line 52
def promote
  promoted_klass = PROMOTIONS[@piece.class]
  if promoted_klass 
    promoted_klass.new(id: @piece.id, player_number: @piece.player_number)
  else
    raise ArgumentError, "Piece cannot be promoted."
  end
end