class Smartdown::Engine::State

Public Class Methods

new(data = {}) click to toggle source
# File lib/smartdown/engine/state.rb, line 8
def initialize(data = {})
  @data = duplicate_and_normalize_hash(data)
  @data["path"] ||= []
  @data["accepted_responses"] ||= []
  @data["current_answers"] ||= []
  @cached = {}
  raise ArgumentError, "must specify current_node" unless has_key?("current_node")
end

Public Instance Methods

==(other) click to toggle source
# File lib/smartdown/engine/state.rb, line 37
def ==(other)
  other.is_a?(self.class) && other.keys == self.keys && @data.all? { |k, v| other.has_value?(k, v) }
end
get(key) click to toggle source
# File lib/smartdown/engine/state.rb, line 25
def get(key)
  fetch(key)
end
has_key?(key) click to toggle source
# File lib/smartdown/engine/state.rb, line 17
def has_key?(key)
  @data.has_key?(key.to_s)
end
has_value?(key, expected_value) click to toggle source
# File lib/smartdown/engine/state.rb, line 21
def has_value?(key, expected_value)
  has_key?(key) && fetch(key) == expected_value
end
keys() click to toggle source
# File lib/smartdown/engine/state.rb, line 33
def keys
  Set.new(@data.keys)
end
put(name, value) click to toggle source
# File lib/smartdown/engine/state.rb, line 29
def put(name, value)
  State.new(@data.merge(name.to_s => value))
end

Private Instance Methods

duplicate_and_normalize_hash(hash) click to toggle source
# File lib/smartdown/engine/state.rb, line 42
def duplicate_and_normalize_hash(hash)
  ::Hash[hash.map { |key, value| [key.to_s, value] }]
end
fetch(key) click to toggle source
# File lib/smartdown/engine/state.rb, line 46
def fetch(key)
  if has_key?(key)
    @data.fetch(key.to_s)
  else
    raise UndefinedValue, "variable '#{key}' not defined", caller
  end
end