smartdown 0.13.1 → 0.14.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.
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (C) 2014 HM Government (Government Digital Service)
3
+ Copyright (C) 2014 Crown Copyright (Government Digital Service)
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
@@ -2,13 +2,17 @@ module Smartdown
2
2
  module Api
3
3
  class Node
4
4
 
5
- attr_reader :title ,:elements, :front_matter, :name
5
+ attr_reader :title ,:elements, :front_matter, :name, :markers
6
6
 
7
7
  def initialize(node)
8
8
  node_elements = node.elements.clone
9
9
  headings = node_elements.select { |element|
10
10
  element.is_a? Smartdown::Model::Element::MarkdownHeading
11
11
  }
12
+ markers = node_elements.select { |element|
13
+ element.is_a? Smartdown::Model::Element::Marker
14
+ }
15
+ markers.each { |marker| node_elements.delete(marker) }
12
16
  nb_questions = node_elements.select{ |element|
13
17
  element.class.to_s.include?("Smartdown::Model::Element::Question")
14
18
  }.count
@@ -16,6 +20,7 @@ module Smartdown
16
20
  node_elements.delete(headings.first) #Remove page title
17
21
  @title = headings.first.content.to_s
18
22
  end
23
+ @markers = markers
19
24
  @elements = node_elements
20
25
  @front_matter = node.front_matter
21
26
  @name = node.name
@@ -45,7 +50,7 @@ module Smartdown
45
50
  private
46
51
 
47
52
  def markdown_element?(element)
48
- (element.is_a? Smartdown::Model::Element::MarkdownLine) ||
53
+ (element.is_a? Smartdown::Model::Element::MarkdownLine) ||
49
54
  (element.is_a? Smartdown::Model::Element::MarkdownHeading)
50
55
  end
51
56
 
@@ -0,0 +1,7 @@
1
+ module Smartdown
2
+ module Model
3
+ module Element
4
+ Marker = Struct.new(:marker_name)
5
+ end
6
+ end
7
+ end
@@ -1,7 +1,7 @@
1
1
  module Smartdown
2
2
  module Model
3
3
  module Scenarios
4
- Scenario = Struct.new(:description, :question_groups, :outcome)
4
+ Scenario = Struct.new(:description, :question_groups, :outcome, :markers)
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,18 @@
1
+ require 'smartdown/parser/base'
2
+
3
+ module Smartdown
4
+ module Parser
5
+ module Element
6
+ class Marker < Base
7
+ rule(:marker) {
8
+ str('{{marker: ') >>
9
+ identifier.as(:marker) >>
10
+ str('}}') >>
11
+ line_ending
12
+ }
13
+
14
+ root(:marker)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,6 +2,7 @@ require 'smartdown/parser/base'
2
2
  require 'smartdown/parser/rules'
3
3
  require 'smartdown/parser/element/front_matter'
4
4
  require 'smartdown/parser/element/start_button'
5
+ require 'smartdown/parser/element/marker'
5
6
  require 'smartdown/parser/element/multiple_choice_question'
6
7
  require 'smartdown/parser/element/date_question'
7
8
  require 'smartdown/parser/element/money_question'
@@ -30,6 +31,7 @@ module Smartdown
30
31
  Element::MoneyQuestion.new |
31
32
  Rules.new |
32
33
  Element::StartButton.new |
34
+ Element::Marker.new |
33
35
  Element::NextSteps.new |
34
36
  Element::MarkdownLine.new |
35
37
  Element::MarkdownBlankLine.new
@@ -8,6 +8,7 @@ require 'smartdown/model/nested_rule'
8
8
  require 'smartdown/model/next_node_rules'
9
9
  require 'smartdown/model/element/question'
10
10
  require 'smartdown/model/element/start_button'
11
+ require 'smartdown/model/element/marker'
11
12
  require 'smartdown/model/element/markdown_heading'
12
13
  require 'smartdown/model/element/markdown_line'
13
14
  require 'smartdown/model/element/conditional'
@@ -63,6 +64,10 @@ module Smartdown
63
64
  Smartdown::Model::Element::StartButton.new(start_node.to_s)
64
65
  }
65
66
 
67
+ rule(:marker => simple(:marker)) {
68
+ Smartdown::Model::Element::Marker.new(marker.to_s)
69
+ }
70
+
66
71
  rule(:front_matter => subtree(:attrs), body: subtree(:body)) {
67
72
  Smartdown::Model::Node.new(
68
73
  node_name, body, Smartdown::Model::FrontMatter.new(Hash[attrs])
@@ -226,12 +231,15 @@ module Smartdown
226
231
  rule(:rule => {predicate: subtree(:predicate), outcome: simple(:outcome_name) } ) {
227
232
  Smartdown::Model::Rule.new(predicate, outcome_name.to_s)
228
233
  }
234
+
229
235
  rule(:nested_rule => {predicate: subtree(:predicate), child_rules: subtree(:child_rules) } ) {
230
236
  Smartdown::Model::NestedRule.new(predicate, child_rules)
231
237
  }
238
+
232
239
  rule(:next_node_rules => subtree(:rules)) {
233
240
  Smartdown::Model::NextNodeRules.new(rules)
234
241
  }
242
+
235
243
  end
236
244
  end
237
245
  end
@@ -0,0 +1,93 @@
1
+ require "json"
2
+ require "smartdown/model/scenarios/scenario_set"
3
+ require "smartdown/model/scenarios/scenario"
4
+ require "smartdown/model/scenarios/question"
5
+
6
+ module Smartdown
7
+ module Parser
8
+ class ScenarioSetInterpreter
9
+ def initialize(scenario_string)
10
+ @scenario_lines = scenario_string.split("\n")
11
+ end
12
+
13
+ def scenario
14
+ Smartdown::Model::Scenarios::Scenario.new(
15
+ description,
16
+ question_groups,
17
+ outcome,
18
+ markers
19
+ )
20
+ end
21
+
22
+ def description_lines
23
+ @scenario_lines.select{ |line| line.start_with?("#") }
24
+ end
25
+
26
+ def description
27
+ description_lines.map do |description_line|
28
+ description_line[1..-1].strip
29
+ end.join(";")
30
+ end
31
+
32
+ def question_groups
33
+ lines = @scenario_lines - description_lines
34
+ if has_markers?
35
+ question_pages = group_questions_by_page(lines[0..-3])
36
+ else
37
+ question_pages = group_questions_by_page(lines[0..-2])
38
+ end
39
+ question_groups = question_pages.map { |question_page| interpret_question_page(question_page) }
40
+ end
41
+
42
+ def outcome
43
+ if has_markers?
44
+ @scenario_lines[@scenario_lines.size - 2]
45
+ else
46
+ @scenario_lines.last
47
+ end
48
+ end
49
+
50
+ def has_markers?
51
+ @scenario_lines.last.match(/(has markers:|has marker:)/)
52
+ end
53
+
54
+ def markers
55
+ if has_markers?
56
+ last_line = @scenario_lines.last
57
+ comma_sperated_markers = last_line.slice(last_line.index(":") + 1, last_line.size)
58
+ comma_sperated_markers.split(',').map(&:strip)
59
+ else
60
+ []
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def group_questions_by_page(lines)
67
+ result = []
68
+ lines.each do |scenario_line|
69
+ if scenario_line.start_with?("-")
70
+ result << [scenario_line[1..-1]]
71
+ else
72
+ result.last << scenario_line
73
+ end
74
+ end
75
+ result
76
+ end
77
+
78
+ def interpret_question_page(question_page)
79
+ question_page.map { |question|
80
+ interpret_question(question)
81
+ }
82
+ end
83
+
84
+ def interpret_question(question_string)
85
+ name, answer = question_string.split(":").map(&:strip)
86
+ Smartdown::Model::Scenarios::Question.new(
87
+ name,
88
+ answer,
89
+ )
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,6 +1,5 @@
1
1
  require "smartdown/model/scenarios/scenario_set"
2
- require "smartdown/model/scenarios/scenario"
3
- require "smartdown/model/scenarios/question"
2
+ require "smartdown/parser/scenario_set_interpreter"
4
3
 
5
4
  module Smartdown
6
5
  module Parser
@@ -18,50 +17,9 @@ module Smartdown
18
17
  def interpret_scenario_set(scenario_set)
19
18
  Smartdown::Model::Scenarios::ScenarioSet.new(
20
19
  scenario_set.name,
21
- scenario_set.read.split("\n\n").map { |scenario_string| interpret_scenario(scenario_string) }
22
- )
23
- end
24
-
25
- def interpret_scenario(scenario_string)
26
- scenario_lines = scenario_string.split("\n")
27
- description_lines = scenario_lines.select{ |line| line.start_with?("#") }
28
- description = description_lines.map { |description_line|
29
- description_line[1..-1].strip
30
- }.join(";")
31
- scenario_lines = scenario_lines - description_lines
32
- outcome = scenario_lines.last
33
- question_pages = group_questions_by_page(scenario_lines[0..-2])
34
- question_groups = question_pages.map { |question_page| interpret_question_page(question_page) }
35
- Smartdown::Model::Scenarios::Scenario.new(
36
- description,
37
- question_groups,
38
- outcome,
39
- )
40
- end
41
-
42
- def group_questions_by_page(scenario_lines)
43
- result = []
44
- scenario_lines.each do |scenario_line|
45
- if scenario_line.start_with?("-")
46
- result << [scenario_line[1..-1]]
47
- else
48
- result.last << scenario_line
20
+ scenario_set.read.split("\n\n").map do |scenario_string|
21
+ ScenarioSetInterpreter.new(scenario_string).scenario
49
22
  end
50
- end
51
- result
52
- end
53
-
54
- def interpret_question_page(question_page)
55
- question_page.map { |question|
56
- interpret_question(question)
57
- }
58
- end
59
-
60
- def interpret_question(question_string)
61
- name, answer = question_string.split(":").map(&:strip)
62
- Smartdown::Model::Scenarios::Question.new(
63
- name,
64
- answer,
65
23
  )
66
24
  end
67
25
  end
@@ -1,3 +1,3 @@
1
1
  module Smartdown
2
- VERSION = "0.13.1"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -16,15 +16,11 @@ describe Smartdown::Api::Node do
16
16
  let(:front_matter) { Smartdown::Model::FrontMatter.new({}) }
17
17
  let(:node_model) { Smartdown::Model::Node.new(node_name, elements, front_matter) }
18
18
 
19
- let(:next_node_rules_content) {
20
- %{ Rule 1: Do not talk about Fight Club.
21
- Rule 2: Do not talk about Fight Club.
22
- Rule 3: If someone says "stop" or goes limp, taps out the fight is over.
23
- Rule 4: Only two guys to a fight.
24
- Rule 5: One fight at a time.
25
- Rule 6: No shirts, no shoes.
26
- Rule 7: Fights will go on as long as they have to.
27
- Rule 8: If this is your first night at Fight Club, you have to fight.} }
19
+ let(:next_node_rules_content) {
20
+ %{ Rule 1: Is a rule
21
+ Rule 2: Is another rule }
22
+ }
23
+
28
24
  let(:next_node_rules) { Smartdown::Model::NextNodeRules.new(next_node_rules_content) }
29
25
 
30
26
  let(:question_element) {
@@ -39,10 +35,10 @@ describe Smartdown::Api::Node do
39
35
  let(:node_heading_content) { "hehehe" }
40
36
  let(:node_heading) { Smartdown::Model::Element::MarkdownHeading.new(node_heading_content) }
41
37
 
42
- let(:question_heading_content) { "Do you feel lucky?" }
38
+ let(:question_heading_content) { "Is this a question?" }
43
39
  let(:question_heading) { Smartdown::Model::Element::MarkdownHeading.new(question_heading_content) }
44
40
 
45
- let(:body_content) { "I <3 bodyshopping" }
41
+ let(:body_content) { "Body" }
46
42
  let(:body_elements) {
47
43
  Smartdown::Model::Elements.new(
48
44
  [
@@ -52,14 +48,14 @@ describe Smartdown::Api::Node do
52
48
  )
53
49
  }
54
50
 
55
- let(:post_body_content) { "hur hur such content" }
51
+ let(:post_body_content) { "content" }
56
52
  let(:post_body_elements) {
57
53
  Smartdown::Model::Elements.new(
58
54
  [Smartdown::Model::Element::MarkdownLine.new(post_body_content)]
59
55
  )
60
56
  }
61
57
 
62
- let(:other_post_body_content) { "Postman Pat and his black and white cat" }
58
+ let(:other_post_body_content) { "Post Body Content" }
63
59
  let(:other_post_body_elements) {
64
60
  Smartdown::Model::Elements.new(
65
61
  [
@@ -69,6 +65,7 @@ describe Smartdown::Api::Node do
69
65
  )
70
66
  }
71
67
 
68
+ let(:marker) { Smartdown::Model::Element::Marker.new("Content Marker") }
72
69
 
73
70
  context "with a body and post_body (and next node rules)" do
74
71
  let(:elements) { [node_heading, body_elements, question_heading, question_element, post_body_elements, other_post_body_elements, next_node_rules] }
@@ -157,4 +154,14 @@ describe Smartdown::Api::Node do
157
154
  end
158
155
  end
159
156
 
157
+ context "with a marker" do
158
+ let(:elements) { [node_heading, question_heading, question_element, marker] }
159
+
160
+ describe "#markers" do
161
+ it 'returns the markers' do
162
+ expect(node.markers).to eq([Smartdown::Model::Element::Marker.new("Content Marker")])
163
+ end
164
+ end
165
+ end
166
+
160
167
  end
@@ -1,11 +1,19 @@
1
1
  # You picked a safe pet
2
2
 
3
- Good call.
3
+ {{marker: is_a_safe_pet}}
4
4
 
5
5
  # Markdown/Govspeak examples
6
6
 
7
+ $IF question_1 is 'cat'
8
+
9
+ {{marker: safe_pets_are_cool}}
10
+
11
+ $ENDIF
12
+
13
+ Good call.
7
14
  ## H2 example
8
15
 
16
+
9
17
  With answers, that are smart. Down with that?
10
18
 
11
19
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
@@ -2,3 +2,4 @@
2
2
  # And cats are amazing
3
3
  - question_1: cat
4
4
  outcome_safe_pet
5
+ has markers: is_a_safe_pet, safe_pets_are_cool
@@ -0,0 +1,30 @@
1
+ require 'smartdown/parser/element/marker'
2
+ require 'smartdown/parser/node_parser'
3
+ require 'smartdown/parser/node_interpreter'
4
+
5
+ describe Smartdown::Parser::Element::Marker do
6
+ subject(:parser) { described_class.new }
7
+
8
+ it "parses a marker with a marker name" do
9
+ should parse("{{marker: hello_there}}").as({marker: "hello_there"})
10
+ should parse("{{marker: hello_there}}\n").as({marker: "hello_there"})
11
+ end
12
+
13
+ it "requires a name" do
14
+ should_not parse("{{marker:}}")
15
+ end
16
+
17
+ it "does not allow spaces in name" do
18
+ should_not parse("{{marker: hello there}}")
19
+ end
20
+
21
+ describe "transformed" do
22
+ let(:node_name) { "my_node" }
23
+ let(:source) { "{{marker: hello_there}}\n" }
24
+ subject(:transformed) {
25
+ Smartdown::Parser::NodeInterpreter.new(node_name, source, parser: parser).interpret
26
+ }
27
+
28
+ it { should eq(Smartdown::Model::Element::Marker.new("hello_there")) }
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ require 'smartdown/parser/scenario_set_interpreter'
2
+
3
+ describe Smartdown::Parser::ScenarioSetInterpreter do
4
+ let(:outcome) { File.open(File.dirname(__FILE__) + "/../fixtures/acceptance/animal-example-simple/scenarios/tigers_and_cats.txt", "rb").read }
5
+ subject { described_class.new(outcome) }
6
+
7
+ describe "#description" do
8
+ it { expect(subject.description).to eq("User has a cat;And cats are amazing") }
9
+ end
10
+
11
+ describe "#question_groups" do
12
+ it { expect(subject.question_groups).to eq([ [ Smartdown::Model::Scenarios::Question.new("question_1", "cat") ] ]) }
13
+ end
14
+
15
+ describe "#outcome" do
16
+ it { expect(subject.outcome).to eq("outcome_safe_pet") }
17
+ end
18
+
19
+ describe "#markers" do
20
+ it { expect(subject.markers).to eq(["is_a_safe_pet", "safe_pets_are_cool"]) }
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,38 @@
1
+ require 'smartdown'
2
+ require 'smartdown/parser/scenario_sets_interpreter'
3
+
4
+ describe Smartdown::Parser::ScenarioSetsInterpreter do
5
+ def fixture(name)
6
+ File.dirname(__FILE__) + "/../fixtures/acceptance/#{name}/#{name}.txt"
7
+ end
8
+
9
+ let(:input) { Smartdown::Parser::DirectoryInput.new(fixture("animal-example-simple")) }
10
+ subject(:scenario_sets) { described_class.new(input).interpret }
11
+
12
+
13
+ context "flow with one question per page" do
14
+ it "has two scenario_sets" do
15
+ expect(scenario_sets.size).to eq(2)
16
+ end
17
+
18
+ it "has scenario_set names" do
19
+ expect(scenario_sets.map(&:name)).to match_array(["lions", "tigers_and_cats"])
20
+ end
21
+
22
+ it "has scenarios with description, questions, markers and outcome" do
23
+ tigers_and_cats_scenario_set = scenario_sets.find { |scenario_set| scenario_set.name == "tigers_and_cats" }
24
+ expect(tigers_and_cats_scenario_set.scenarios.size).to eq(1)
25
+ expect(tigers_and_cats_scenario_set.scenarios.first.description).to eq("User has a cat;And cats are amazing")
26
+ expect(tigers_and_cats_scenario_set.scenarios.first.question_groups.size).to eq(1)
27
+ expect(tigers_and_cats_scenario_set.scenarios.first.outcome).to eq("outcome_safe_pet")
28
+ expect(tigers_and_cats_scenario_set.scenarios.first.markers).to eq(['is_a_safe_pet', 'safe_pets_are_cool'])
29
+ end
30
+
31
+ it "has scenario questions with name and answer" do
32
+ tigers_and_cats_scenario_set = scenario_sets.find { |scenario_set| scenario_set.name == "tigers_and_cats" }
33
+ tigers_and_cats_scenario = tigers_and_cats_scenario_set.scenarios.first
34
+ expect(tigers_and_cats_scenario.question_groups.first.first.name).to eq("question_1")
35
+ expect(tigers_and_cats_scenario.question_groups.first.first.answer).to eq("cat")
36
+ end
37
+ end
38
+ end
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.13.1
4
+ version: 0.14.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-19 00:00:00.000000000 Z
12
+ date: 2015-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
16
- requirement: &12661260 !ruby/object:Gem::Requirement
16
+ requirement: &23997380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.6.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12661260
24
+ version_requirements: *23997380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: uk_postcode
27
- requirement: &12660740 !ruby/object:Gem::Requirement
27
+ requirement: &23996560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *12660740
35
+ version_requirements: *23996560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &12660200 !ruby/object:Gem::Requirement
38
+ requirement: &24022840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *12660200
46
+ version_requirements: *24022840
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &12659780 !ruby/object:Gem::Requirement
49
+ requirement: &24022300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *12659780
57
+ version_requirements: *24022300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: pry
60
- requirement: &12659200 !ruby/object:Gem::Requirement
60
+ requirement: &24021740 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *12659200
68
+ version_requirements: *24021740
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: gem_publisher
71
- requirement: &12658640 !ruby/object:Gem::Requirement
71
+ requirement: &24021220 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *12658640
79
+ version_requirements: *24021220
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: timecop
82
- requirement: &12658200 !ruby/object:Gem::Requirement
82
+ requirement: &24020020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *12658200
90
+ version_requirements: *24020020
91
91
  description:
92
92
  email: david.heath@digital.cabinet-office.gov.uk
93
93
  executables:
@@ -101,6 +101,7 @@ files:
101
101
  - lib/smartdown/parser/node_transform.rb
102
102
  - lib/smartdown/parser/question.rb
103
103
  - lib/smartdown/parser/node_interpreter.rb
104
+ - lib/smartdown/parser/scenario_set_interpreter.rb
104
105
  - lib/smartdown/parser/snippet_pre_parser.rb
105
106
  - lib/smartdown/parser/base.rb
106
107
  - lib/smartdown/parser/input_set.rb
@@ -114,6 +115,7 @@ files:
114
115
  - lib/smartdown/parser/element/postcode_question.rb
115
116
  - lib/smartdown/parser/element/money_question.rb
116
117
  - lib/smartdown/parser/element/conditional.rb
118
+ - lib/smartdown/parser/element/marker.rb
117
119
  - lib/smartdown/parser/element/start_button.rb
118
120
  - lib/smartdown/parser/element/front_matter.rb
119
121
  - lib/smartdown/parser/element/country_question.rb
@@ -178,6 +180,7 @@ files:
178
180
  - lib/smartdown/model/answer/text.rb
179
181
  - lib/smartdown/model/element/question.rb
180
182
  - lib/smartdown/model/element/conditional.rb
183
+ - lib/smartdown/model/element/marker.rb
181
184
  - lib/smartdown/model/element/start_button.rb
182
185
  - lib/smartdown/model/element/markdown_line.rb
183
186
  - lib/smartdown/model/element/next_steps.rb
@@ -203,13 +206,16 @@ files:
203
206
  - spec/parser/base_spec.rb
204
207
  - spec/parser/input_set_spec.rb
205
208
  - spec/parser/rules_spec.rb
209
+ - spec/parser/scenario_set_interpreter_spec.rb
206
210
  - spec/parser/predicates_spec.rb
211
+ - spec/parser/scenario_sets_interpreter_spec.rb
207
212
  - spec/parser/element/postcode_question_spec.rb
208
213
  - spec/parser/element/next_steps_spec.rb
209
214
  - spec/parser/element/multiple_choice_question_spec.rb
210
215
  - spec/parser/element/country_question_spec.rb
211
216
  - spec/parser/element/conditional_spec.rb
212
217
  - spec/parser/element/start_button_parser_spec.rb
218
+ - spec/parser/element/marker_spec.rb
213
219
  - spec/parser/element/date_question_spec.rb
214
220
  - spec/parser/element/markdown_heading_spec.rb
215
221
  - spec/parser/element/front_matter_spec.rb
@@ -309,7 +315,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
309
315
  version: '0'
310
316
  segments:
311
317
  - 0
312
- hash: 1413061790039635549
318
+ hash: -4151966028766809979
313
319
  required_rubygems_version: !ruby/object:Gem::Requirement
314
320
  none: false
315
321
  requirements:
@@ -318,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
324
  version: '0'
319
325
  segments:
320
326
  - 0
321
- hash: 1413061790039635549
327
+ hash: -4151966028766809979
322
328
  requirements: []
323
329
  rubyforge_project:
324
330
  rubygems_version: 1.8.11
@@ -334,13 +340,16 @@ test_files:
334
340
  - spec/parser/base_spec.rb
335
341
  - spec/parser/input_set_spec.rb
336
342
  - spec/parser/rules_spec.rb
343
+ - spec/parser/scenario_set_interpreter_spec.rb
337
344
  - spec/parser/predicates_spec.rb
345
+ - spec/parser/scenario_sets_interpreter_spec.rb
338
346
  - spec/parser/element/postcode_question_spec.rb
339
347
  - spec/parser/element/next_steps_spec.rb
340
348
  - spec/parser/element/multiple_choice_question_spec.rb
341
349
  - spec/parser/element/country_question_spec.rb
342
350
  - spec/parser/element/conditional_spec.rb
343
351
  - spec/parser/element/start_button_parser_spec.rb
352
+ - spec/parser/element/marker_spec.rb
344
353
  - spec/parser/element/date_question_spec.rb
345
354
  - spec/parser/element/markdown_heading_spec.rb
346
355
  - spec/parser/element/front_matter_spec.rb