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 +1 -1
- data/lib/smartdown/api/node.rb +7 -2
- data/lib/smartdown/model/element/marker.rb +7 -0
- data/lib/smartdown/model/scenarios/scenario.rb +1 -1
- data/lib/smartdown/parser/element/marker.rb +18 -0
- data/lib/smartdown/parser/node_parser.rb +2 -0
- data/lib/smartdown/parser/node_transform.rb +8 -0
- data/lib/smartdown/parser/scenario_set_interpreter.rb +93 -0
- data/lib/smartdown/parser/scenario_sets_interpreter.rb +3 -45
- data/lib/smartdown/version.rb +1 -1
- data/spec/api/node_spec.rb +20 -13
- data/spec/fixtures/acceptance/animal-example-simple/outcomes/outcome_safe_pet.txt +9 -1
- data/spec/fixtures/acceptance/animal-example-simple/scenarios/tigers_and_cats.txt +1 -0
- data/spec/parser/element/marker_spec.rb +30 -0
- data/spec/parser/scenario_set_interpreter_spec.rb +24 -0
- data/spec/parser/scenario_sets_interpreter_spec.rb +38 -0
- metadata +27 -18
data/LICENSE.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (C) 2014
|
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
|
data/lib/smartdown/api/node.rb
CHANGED
@@ -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,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/
|
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
|
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
|
data/lib/smartdown/version.rb
CHANGED
data/spec/api/node_spec.rb
CHANGED
@@ -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:
|
21
|
-
Rule 2:
|
22
|
-
|
23
|
-
|
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) { "
|
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) { "
|
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) { "
|
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) { "
|
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
|
-
|
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
|
@@ -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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *23997380
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: uk_postcode
|
27
|
-
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: *
|
35
|
+
version_requirements: *23996560
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
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: *
|
46
|
+
version_requirements: *24022840
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
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: *
|
57
|
+
version_requirements: *24022300
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: pry
|
60
|
-
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: *
|
68
|
+
version_requirements: *24021740
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: gem_publisher
|
71
|
-
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: *
|
79
|
+
version_requirements: *24021220
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: timecop
|
82
|
-
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: *
|
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:
|
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:
|
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
|