smartdown 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,15 +8,14 @@ require 'smartdown/api/outcome'
8
8
  module Smartdown
9
9
  module Api
10
10
  class Flow
11
-
12
- def initialize(smartdown_input)
11
+ def initialize(smartdown_input, initial_state = {})
13
12
  @smartdown_flow = Smartdown::Parser::FlowInterpreter.new(smartdown_input).interpret
14
- @engine = Smartdown::Engine.new(@smartdown_flow)
13
+ @engine = Smartdown::Engine.new(@smartdown_flow, initial_state)
15
14
  end
16
15
 
17
16
  def state(started, responses)
18
17
  state = smartdown_state(started, responses)
19
- State.new(transform_node(node_by_name(state.get(:current_node))),
18
+ State.new(transform_node(evaluate_node(node_by_name(state.get(:current_node)), state)),
20
19
  previous_question_nodes_for(state),
21
20
  responses
22
21
  )
@@ -89,6 +88,10 @@ module Smartdown
89
88
  end
90
89
  end
91
90
 
91
+ def evaluate_node(node, state)
92
+ Smartdown::Engine::NodePresenter.new.present(node, state)
93
+ end
94
+
92
95
  def front_matter
93
96
  @front_matter ||= coversheet.front_matter
94
97
  end
@@ -110,7 +113,7 @@ module Smartdown
110
113
  return [] if node_path.empty?
111
114
 
112
115
  node_path[1..-1].map do |node_name|
113
- node_by_name(node_name)
116
+ evaluate_node(node_by_name(node_name), state)
114
117
  end
115
118
  end
116
119
 
@@ -6,11 +6,12 @@ module Smartdown
6
6
  class Engine
7
7
  attr_reader :flow
8
8
 
9
- def initialize(flow)
9
+ def initialize(flow, initial_state = {})
10
10
  @flow = flow
11
+ @initial_state = initial_state
11
12
  end
12
13
 
13
- def default_start_state
14
+ def build_start_state
14
15
  Smartdown::Engine::State.new(
15
16
  default_predicates.merge(
16
17
  current_node: flow.name
@@ -21,11 +22,11 @@ module Smartdown
21
22
  def default_predicates
22
23
  {
23
24
  otherwise: ->(_) { true }
24
- }
25
+ }.merge(@initial_state)
25
26
  end
26
27
 
27
- def process(responses, start_state = nil)
28
- state = start_state || default_start_state
28
+ def process(responses, test_start_state = nil)
29
+ state = test_start_state || build_start_state
29
30
  unprocessed_responses = responses
30
31
  while !unprocessed_responses.empty? do
31
32
  nb_questions = 0
@@ -1,3 +1,3 @@
1
1
  module Smartdown
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/spec/engine_spec.rb CHANGED
@@ -4,7 +4,7 @@ describe Smartdown::Engine do
4
4
 
5
5
  subject(:engine) { Smartdown::Engine.new(flow) }
6
6
  let(:start_state) {
7
- engine.default_start_state
7
+ engine.build_start_state
8
8
  .put(:eea_passport?, ->(state) {
9
9
  %w{greek british}.include?(state.get(:what_passport_do_you_have?))
10
10
  })
@@ -117,6 +117,20 @@ describe Smartdown::Engine do
117
117
  end
118
118
  }
119
119
 
120
+ describe "initial_state" do
121
+ let(:initial_state) { {
122
+ key_1: 'a_state_object',
123
+ key_2: ->(state) { 'a_dynamic_state_object' }
124
+ } }
125
+ let(:engine) { Smartdown::Engine.new(flow, initial_state) }
126
+ subject(:state) { engine.process([]) }
127
+
128
+ it "should have added initial_state to state" do
129
+ expect(subject.get(:key_1)).to eql 'a_state_object'
130
+ expect(subject.get(:key_2)).to eql 'a_dynamic_state_object'
131
+ end
132
+ end
133
+
120
134
  describe "#process" do
121
135
  subject { engine.process(responses, start_state) }
122
136
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2014-07-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
16
- requirement: &13419100 !ruby/object:Gem::Requirement
16
+ requirement: &16437600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.6.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13419100
24
+ version_requirements: *16437600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &13417020 !ruby/object:Gem::Requirement
27
+ requirement: &16435640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *13417020
35
+ version_requirements: *16435640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &13819280 !ruby/object:Gem::Requirement
38
+ requirement: &16837980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *13819280
46
+ version_requirements: *16837980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: gem_publisher
49
- requirement: &13818580 !ruby/object:Gem::Requirement
49
+ requirement: &16837320 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *13818580
57
+ version_requirements: *16837320
58
58
  description:
59
59
  email: david.heath@digital.cabinet-office.gov.uk
60
60
  executables:
@@ -182,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  segments:
184
184
  - 0
185
- hash: -352555312520548432
185
+ hash: 306060104431825323
186
186
  required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  none: false
188
188
  requirements:
@@ -191,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
191
  version: '0'
192
192
  segments:
193
193
  - 0
194
- hash: -352555312520548432
194
+ hash: 306060104431825323
195
195
  requirements: []
196
196
  rubyforge_project:
197
197
  rubygems_version: 1.8.11