smartdown 0.0.1

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.
Files changed (70) hide show
  1. data/LICENSE.md +21 -0
  2. data/README.md +204 -0
  3. data/bin/smartdown +41 -0
  4. data/lib/smartdown/engine/errors.rb +5 -0
  5. data/lib/smartdown/engine/predicate_evaluator.rb +23 -0
  6. data/lib/smartdown/engine/state.rb +63 -0
  7. data/lib/smartdown/engine/transition.rb +65 -0
  8. data/lib/smartdown/engine.rb +33 -0
  9. data/lib/smartdown/model/element/markdown_heading.rb +7 -0
  10. data/lib/smartdown/model/element/markdown_paragraph.rb +7 -0
  11. data/lib/smartdown/model/element/multiple_choice.rb +7 -0
  12. data/lib/smartdown/model/element/start_button.rb +7 -0
  13. data/lib/smartdown/model/flow.rb +24 -0
  14. data/lib/smartdown/model/front_matter.rb +37 -0
  15. data/lib/smartdown/model/nested_rule.rb +5 -0
  16. data/lib/smartdown/model/next_node_rules.rb +5 -0
  17. data/lib/smartdown/model/node.rb +47 -0
  18. data/lib/smartdown/model/predicate/equality.rb +7 -0
  19. data/lib/smartdown/model/predicate/named.rb +7 -0
  20. data/lib/smartdown/model/predicate/set_membership.rb +7 -0
  21. data/lib/smartdown/model/rule.rb +5 -0
  22. data/lib/smartdown/parser/base.rb +35 -0
  23. data/lib/smartdown/parser/directory_input.rb +61 -0
  24. data/lib/smartdown/parser/element/front_matter.rb +17 -0
  25. data/lib/smartdown/parser/element/markdown_heading.rb +14 -0
  26. data/lib/smartdown/parser/element/markdown_paragraph.rb +19 -0
  27. data/lib/smartdown/parser/element/multiple_choice_question.rb +24 -0
  28. data/lib/smartdown/parser/element/start_button.rb +15 -0
  29. data/lib/smartdown/parser/flow_interpreter.rb +50 -0
  30. data/lib/smartdown/parser/node_interpreter.rb +29 -0
  31. data/lib/smartdown/parser/node_parser.rb +37 -0
  32. data/lib/smartdown/parser/node_transform.rb +83 -0
  33. data/lib/smartdown/parser/predicates.rb +36 -0
  34. data/lib/smartdown/parser/rules.rb +51 -0
  35. data/lib/smartdown/version.rb +3 -0
  36. data/lib/smartdown.rb +9 -0
  37. data/spec/acceptance/parsing_spec.rb +109 -0
  38. data/spec/acceptance/smartdown_cli_spec.rb +16 -0
  39. data/spec/engine/predicate_evaluator_spec.rb +98 -0
  40. data/spec/engine/state_spec.rb +106 -0
  41. data/spec/engine/transition_spec.rb +150 -0
  42. data/spec/engine_spec.rb +79 -0
  43. data/spec/fixtures/acceptance/cover-sheet/cover-sheet.txt +14 -0
  44. data/spec/fixtures/acceptance/one-question/one-question.txt +3 -0
  45. data/spec/fixtures/acceptance/one-question/questions/q1.txt +9 -0
  46. data/spec/fixtures/acceptance/question-and-outcome/outcomes/o1.txt +3 -0
  47. data/spec/fixtures/acceptance/question-and-outcome/question-and-outcome.txt +3 -0
  48. data/spec/fixtures/acceptance/question-and-outcome/questions/q1.txt +9 -0
  49. data/spec/fixtures/directory_input/cover-sheet.txt +1 -0
  50. data/spec/fixtures/directory_input/outcomes/o1.txt +1 -0
  51. data/spec/fixtures/directory_input/questions/q1.txt +1 -0
  52. data/spec/fixtures/directory_input/scenarios/s1.txt +1 -0
  53. data/spec/fixtures/example.sd +17 -0
  54. data/spec/model/flow_spec.rb +42 -0
  55. data/spec/model/node_spec.rb +32 -0
  56. data/spec/parser/base_spec.rb +49 -0
  57. data/spec/parser/directory_input_spec.rb +56 -0
  58. data/spec/parser/element/front_matter_spec.rb +21 -0
  59. data/spec/parser/element/markdown_heading_spec.rb +24 -0
  60. data/spec/parser/element/markdown_paragraph_spec.rb +28 -0
  61. data/spec/parser/element/multiple_choice_question_spec.rb +31 -0
  62. data/spec/parser/element/start_button_parser_spec.rb +30 -0
  63. data/spec/parser/integration/cover_sheet_spec.rb +30 -0
  64. data/spec/parser/node_parser_spec.rb +133 -0
  65. data/spec/parser/predicates_spec.rb +65 -0
  66. data/spec/parser/rules_spec.rb +244 -0
  67. data/spec/spec_helper.rb +27 -0
  68. data/spec/support/model_builder.rb +83 -0
  69. data/spec/support_specs/model_builder_spec.rb +90 -0
  70. metadata +218 -0
@@ -0,0 +1,90 @@
1
+ require 'support/model_builder'
2
+
3
+ describe ModelBuilder do
4
+ subject(:builder) { described_class.new }
5
+
6
+ describe "#flow" do
7
+ let(:node1) {
8
+ Smartdown::Model::Node.new("check-uk-visa", [
9
+ Smartdown::Model::Element::MarkdownHeading.new("Check uk visa"),
10
+ Smartdown::Model::Element::MarkdownParagraph.new("This is the paragraph"),
11
+ Smartdown::Model::Element::StartButton.new("what_passport_do_you_have?")
12
+ ])
13
+ }
14
+
15
+ let(:node2) {
16
+ Smartdown::Model::Node.new("what_passport_do_you_have?", [
17
+ Smartdown::Model::Element::MarkdownHeading.new("What passport do you have?"),
18
+ Smartdown::Model::Element::MultipleChoice.new(nil, {"greek" => "Greek", "british" => "British"}),
19
+ Smartdown::Model::NextNodeRules.new([
20
+ Smartdown::Model::Rule.new(
21
+ Smartdown::Model::Predicate::Named.new("eea_passport?"),
22
+ "outcome_no_visa_needed"
23
+ )
24
+ ])
25
+ ])
26
+ }
27
+
28
+ let(:expected) {
29
+ Smartdown::Model::Flow.new("check-uk-visa", [node1, node2])
30
+ }
31
+
32
+ it "builds a flow using a dsl" do
33
+ model = builder.flow("check-uk-visa") do
34
+ node("check-uk-visa") do
35
+ heading("Check uk visa")
36
+ paragraph("This is the paragraph")
37
+ start_button("what_passport_do_you_have?")
38
+ end
39
+
40
+ node("what_passport_do_you_have?") do
41
+ heading("What passport do you have?")
42
+ multiple_choice(
43
+ greek: "Greek",
44
+ british: "British"
45
+ )
46
+ next_node_rules do
47
+ rule do
48
+ named_predicate("eea_passport?")
49
+ outcome("outcome_no_visa_needed")
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ expect(model).to eq(expected)
56
+ end
57
+ end
58
+
59
+ describe "#node" do
60
+ it "builds a node" do
61
+ expect(builder.node("foo")).to be_a(Smartdown::Model::Node)
62
+ end
63
+ end
64
+
65
+ describe "#rule" do
66
+ let(:predicate) { Smartdown::Model::Predicate::Named.new("my_pred") }
67
+
68
+ it "builds a rule using predicate and outcome" do
69
+ expect(builder.rule(predicate, "my_next_node")).to eq(Smartdown::Model::Rule.new(predicate, "my_next_node"))
70
+ end
71
+
72
+ it "builds a rule using dsl block" do
73
+ expect(builder.rule { named_predicate("my_pred"); outcome("my_next_node") }).to eq(Smartdown::Model::Rule.new(predicate, "my_next_node"))
74
+ end
75
+ end
76
+
77
+ describe ModelBuilder::DSL do
78
+ it "exposes a #build_flow method" do
79
+ my_class = Class.new do
80
+ include ModelBuilder::DSL
81
+ end
82
+ instance = my_class.new
83
+ flow = instance.build_flow("name") do
84
+ node("check-uk-visa") {}
85
+ end
86
+
87
+ expect(flow).to be_a(Smartdown::Model::Flow)
88
+ end
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smartdown
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Heath
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: parslet
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: gem_publisher
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description:
79
+ email: david.heath@digital.cabinet-office.gov.uk
80
+ executables:
81
+ - smartdown
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - lib/smartdown/engine/errors.rb
86
+ - lib/smartdown/engine/predicate_evaluator.rb
87
+ - lib/smartdown/engine/state.rb
88
+ - lib/smartdown/engine/transition.rb
89
+ - lib/smartdown/engine.rb
90
+ - lib/smartdown/model/element/markdown_heading.rb
91
+ - lib/smartdown/model/element/markdown_paragraph.rb
92
+ - lib/smartdown/model/element/multiple_choice.rb
93
+ - lib/smartdown/model/element/start_button.rb
94
+ - lib/smartdown/model/flow.rb
95
+ - lib/smartdown/model/front_matter.rb
96
+ - lib/smartdown/model/nested_rule.rb
97
+ - lib/smartdown/model/next_node_rules.rb
98
+ - lib/smartdown/model/node.rb
99
+ - lib/smartdown/model/predicate/equality.rb
100
+ - lib/smartdown/model/predicate/named.rb
101
+ - lib/smartdown/model/predicate/set_membership.rb
102
+ - lib/smartdown/model/rule.rb
103
+ - lib/smartdown/parser/base.rb
104
+ - lib/smartdown/parser/directory_input.rb
105
+ - lib/smartdown/parser/element/front_matter.rb
106
+ - lib/smartdown/parser/element/markdown_heading.rb
107
+ - lib/smartdown/parser/element/markdown_paragraph.rb
108
+ - lib/smartdown/parser/element/multiple_choice_question.rb
109
+ - lib/smartdown/parser/element/start_button.rb
110
+ - lib/smartdown/parser/flow_interpreter.rb
111
+ - lib/smartdown/parser/node_interpreter.rb
112
+ - lib/smartdown/parser/node_parser.rb
113
+ - lib/smartdown/parser/node_transform.rb
114
+ - lib/smartdown/parser/predicates.rb
115
+ - lib/smartdown/parser/rules.rb
116
+ - lib/smartdown/version.rb
117
+ - lib/smartdown.rb
118
+ - bin/smartdown
119
+ - LICENSE.md
120
+ - README.md
121
+ - spec/acceptance/parsing_spec.rb
122
+ - spec/acceptance/smartdown_cli_spec.rb
123
+ - spec/engine/predicate_evaluator_spec.rb
124
+ - spec/engine/state_spec.rb
125
+ - spec/engine/transition_spec.rb
126
+ - spec/engine_spec.rb
127
+ - spec/fixtures/acceptance/cover-sheet/cover-sheet.txt
128
+ - spec/fixtures/acceptance/one-question/one-question.txt
129
+ - spec/fixtures/acceptance/one-question/questions/q1.txt
130
+ - spec/fixtures/acceptance/question-and-outcome/outcomes/o1.txt
131
+ - spec/fixtures/acceptance/question-and-outcome/question-and-outcome.txt
132
+ - spec/fixtures/acceptance/question-and-outcome/questions/q1.txt
133
+ - spec/fixtures/directory_input/cover-sheet.txt
134
+ - spec/fixtures/directory_input/outcomes/o1.txt
135
+ - spec/fixtures/directory_input/questions/q1.txt
136
+ - spec/fixtures/directory_input/scenarios/s1.txt
137
+ - spec/fixtures/example.sd
138
+ - spec/model/flow_spec.rb
139
+ - spec/model/node_spec.rb
140
+ - spec/parser/base_spec.rb
141
+ - spec/parser/directory_input_spec.rb
142
+ - spec/parser/element/front_matter_spec.rb
143
+ - spec/parser/element/markdown_heading_spec.rb
144
+ - spec/parser/element/markdown_paragraph_spec.rb
145
+ - spec/parser/element/multiple_choice_question_spec.rb
146
+ - spec/parser/element/start_button_parser_spec.rb
147
+ - spec/parser/integration/cover_sheet_spec.rb
148
+ - spec/parser/node_parser_spec.rb
149
+ - spec/parser/predicates_spec.rb
150
+ - spec/parser/rules_spec.rb
151
+ - spec/spec_helper.rb
152
+ - spec/support/model_builder.rb
153
+ - spec/support_specs/model_builder_spec.rb
154
+ homepage: https://github.com/alphagov/smartdown
155
+ licenses:
156
+ - MIT
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ segments:
168
+ - 0
169
+ hash: -12783946781873341
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ segments:
177
+ - 0
178
+ hash: -12783946781873341
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 1.8.23
182
+ signing_key:
183
+ specification_version: 3
184
+ summary: Interactive question-answer flows using markdown-like external DSL
185
+ test_files:
186
+ - spec/acceptance/parsing_spec.rb
187
+ - spec/acceptance/smartdown_cli_spec.rb
188
+ - spec/engine/predicate_evaluator_spec.rb
189
+ - spec/engine/state_spec.rb
190
+ - spec/engine/transition_spec.rb
191
+ - spec/engine_spec.rb
192
+ - spec/fixtures/acceptance/cover-sheet/cover-sheet.txt
193
+ - spec/fixtures/acceptance/one-question/one-question.txt
194
+ - spec/fixtures/acceptance/one-question/questions/q1.txt
195
+ - spec/fixtures/acceptance/question-and-outcome/outcomes/o1.txt
196
+ - spec/fixtures/acceptance/question-and-outcome/question-and-outcome.txt
197
+ - spec/fixtures/acceptance/question-and-outcome/questions/q1.txt
198
+ - spec/fixtures/directory_input/cover-sheet.txt
199
+ - spec/fixtures/directory_input/outcomes/o1.txt
200
+ - spec/fixtures/directory_input/questions/q1.txt
201
+ - spec/fixtures/directory_input/scenarios/s1.txt
202
+ - spec/fixtures/example.sd
203
+ - spec/model/flow_spec.rb
204
+ - spec/model/node_spec.rb
205
+ - spec/parser/base_spec.rb
206
+ - spec/parser/directory_input_spec.rb
207
+ - spec/parser/element/front_matter_spec.rb
208
+ - spec/parser/element/markdown_heading_spec.rb
209
+ - spec/parser/element/markdown_paragraph_spec.rb
210
+ - spec/parser/element/multiple_choice_question_spec.rb
211
+ - spec/parser/element/start_button_parser_spec.rb
212
+ - spec/parser/integration/cover_sheet_spec.rb
213
+ - spec/parser/node_parser_spec.rb
214
+ - spec/parser/predicates_spec.rb
215
+ - spec/parser/rules_spec.rb
216
+ - spec/spec_helper.rb
217
+ - spec/support/model_builder.rb
218
+ - spec/support_specs/model_builder_spec.rb