class Tundengine::Stages::Base

Attributes

child_in_play[R]
children[R]
parent[R]

Public Class Methods

new(parent = Null.instance) click to toggle source
# File lib/tundengine/stages/base.rb, line 7
def initialize(parent = Null.instance)
  @parent   = parent
  @children = []
  @rewinded = []
  new_child_in_play!
  @locked = false
end

Public Instance Methods

as_hash() click to toggle source
# File lib/tundengine/stages/base.rb, line 48
def as_hash
  summary.merge(
    children_key_name => children.map(&:as_hash)
  )
end
declare!(declaration = Declarations::Null.instance) click to toggle source
# File lib/tundengine/stages/base.rb, line 15
def declare!(declaration = Declarations::Null.instance)
  child_in_play.declare!(declaration)
end
fast_forward!(n) click to toggle source
# File lib/tundengine/stages/base.rb, line 44
def fast_forward!(n)
  [n, @rewinded.length].min.times { children.push(@rewinded.shift) }
end
lock!() click to toggle source
# File lib/tundengine/stages/base.rb, line 35
def lock!
  @locked = true
  parent.lock!
end
on_complete_child!() click to toggle source
# File lib/tundengine/stages/base.rb, line 31
def on_complete_child!
  children << child_in_play
end
play!(card = Cards::Null.instance) { |self) : self| ... } click to toggle source
# File lib/tundengine/stages/base.rb, line 19
def play!(card = Cards::Null.instance)
  completed = completed?
  until completed or @locked
    child_in_play.play!(card)
    card = Cards::Null.instance
    completed = completed?
    completed ? on_completed! : new_child_in_play!
  end
  @locked = false
  block_given? ? (yield self) : self
end
rewind!(n) click to toggle source
# File lib/tundengine/stages/base.rb, line 40
def rewind!(n)
  [n, children.length].min.times { @rewinded.unshift(children.pop) }
end

Protected Instance Methods

child_class_name() click to toggle source
# File lib/tundengine/stages/base.rb, line 68
def child_class_name
  children.first.class.name.split('::').last.downcase
end
children_key_name() click to toggle source
# File lib/tundengine/stages/base.rb, line 64
def children_key_name
  "#{child_class_name}s".to_sym
end
new_child_in_play!() click to toggle source
# File lib/tundengine/stages/base.rb, line 56
def new_child_in_play!
  @child_in_play = new_child
end
summary() click to toggle source
# File lib/tundengine/stages/base.rb, line 60
def summary
  {}
end