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