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
# File 'lib/smartdown/engine/state.rb', line 8

def initialize(data = {})
  @data = duplicate_and_normalize_hash(data)
  @data["path"] ||= []
  @data["responses"] ||= []
  @cached = {}
  raise ArgumentError, "must specify current_node" unless has_key?("current_node")
end

Instance Method Details

#==(other) ⇒ Object



41
42
43
# File 'lib/smartdown/engine/state.rb', line 41

def ==(other)
  other.is_a?(self.class) && other.keys == self.keys && @data.all? { |k, v| other.has_value?(k, v) }
end

#get(key) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/smartdown/engine/state.rb', line 24

def get(key)
  value = fetch(key)
  if value.respond_to?(:call)
    evaluate(value)
  else
    value
  end
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#has_value?(key, expected_value) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#keysObject



37
38
39
# File 'lib/smartdown/engine/state.rb', line 37

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

#put(name, value) ⇒ Object



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

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