Class: Smartdown::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/smartdown/engine.rb,
lib/smartdown/engine/state.rb,
lib/smartdown/engine/errors.rb,
lib/smartdown/engine/transition.rb,
lib/smartdown/engine/interpolator.rb,
lib/smartdown/engine/node_presenter.rb,
lib/smartdown/engine/predicate_evaluator.rb,
lib/smartdown/engine/conditional_resolver.rb

Defined Under Namespace

Classes: ConditionalResolver, IndeterminateNextNode, Interpolator, NodePresenter, PredicateEvaluator, State, Transition, UndefinedValue

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(flow) ⇒ Engine



9
10
11
# File 'lib/smartdown/engine.rb', line 9

def initialize(flow)
  @flow = flow
end

Instance Attribute Details

#flowObject (readonly)

Returns the value of attribute flow.



7
8
9
# File 'lib/smartdown/engine.rb', line 7

def flow
  @flow
end

Instance Method Details

#default_predicatesObject



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

def default_predicates
  {
    otherwise: ->(_) { true }
  }
end

#default_start_stateObject



13
14
15
16
17
18
19
# File 'lib/smartdown/engine.rb', line 13

def default_start_state
  Smartdown::Engine::State.new(
    default_predicates.merge(
      current_node: flow.name
    )
  )
end

#evaluate_node(state) ⇒ Object



34
35
36
37
# File 'lib/smartdown/engine.rb', line 34

def evaluate_node(state)
  current_node = flow.node(state.get(:current_node))
  NodePresenter.new.present(current_node, state)
end

#process(responses, start_state = nil) ⇒ Object



27
28
29
30
31
32
# File 'lib/smartdown/engine.rb', line 27

def process(responses, start_state = nil)
  responses.inject(start_state || default_start_state) do |state, input|
    current_node = flow.node(state.get(:current_node))
    Transition.new(state, current_node, input).next_state
  end
end