Class: Smartdown::Engine::State

Inherits:
Object
  • Object
show all
Defined in:
lib/smartdown/engine/state.rb

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ State

Returns a new instance of State.

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
# 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

Instance Method Details

#==(other) ⇒ Object



37
38
39
# 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) ⇒ Object



25
26
27
# File 'lib/smartdown/engine/state.rb', line 25

def get(key)
  fetch(key)
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/smartdown/engine/state.rb', line 17

def has_key?(key)
  @data.has_key?(key.to_s)
end

#has_value?(key, expected_value) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/smartdown/engine/state.rb', line 21

def has_value?(key, expected_value)
  has_key?(key) && fetch(key) == expected_value
end

#keysObject



33
34
35
# File 'lib/smartdown/engine/state.rb', line 33

def keys
  Set.new(@data.keys)
end

#put(name, value) ⇒ Object



29
30
31
# File 'lib/smartdown/engine/state.rb', line 29

def put(name, value)
  State.new(@data.merge(name.to_s => value))
end