smartdown 0.11.0 → 0.11.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.
data/README.md CHANGED
@@ -378,6 +378,23 @@ extension, eg `my-flow-name/snippets/my_snippet.txt`.
378
378
 
379
379
  The contents of `my_snippet` will be inserted into the outcome/question.
380
380
 
381
+ ###Snippet Organisation
382
+
383
+ You can organise related snippets into a sub-directory of arbitrary depth
384
+
385
+ For example:
386
+
387
+ ```
388
+ ## My header
389
+
390
+ Markdown copy..
391
+
392
+ {{snippet: my_sub_directory/my_snippet}}
393
+
394
+ More copy...
395
+ ```
396
+ Where `snippet_name` is in a `snippets/` directory in the flow root with a `.txt` extension, eg `my-flow-name/snippets/my_sub_directory/my_snippet.txt`.
397
+
381
398
  ## Scenarios
382
399
 
383
400
  Scenarios are meant to be run as test to check that a Smartdown flow behaves
@@ -3,7 +3,8 @@ module Smartdown
3
3
  class Outcome < Node
4
4
 
5
5
  def next_steps
6
- elements.find{|element| element.is_a? Smartdown::Model::Element::NextSteps}.content
6
+ next_steps = elements.find{ |element| element.is_a? Smartdown::Model::Element::NextSteps}
7
+ next_steps.content if next_steps && !next_steps.content.empty?
7
8
  end
8
9
 
9
10
  end
@@ -48,7 +48,8 @@ module Smartdown
48
48
  end
49
49
 
50
50
  def build_govspeak(elements)
51
- elements.select { |element| markdown_element?(element) }.markdown_elements.map(&:content).join("\n")
51
+ markdown_elements = elements.select { |element| markdown_element?(element) }
52
+ markdown_elements.map(&:content).join("\n") unless markdown_elements.empty?
52
53
  end
53
54
  end
54
55
  end
@@ -24,7 +24,7 @@ module Smartdown
24
24
  end
25
25
 
26
26
  def snippets
27
- read_dir("snippets")
27
+ recursive_files_relatively_renamed("snippets")
28
28
  end
29
29
 
30
30
  def filenames_hash
@@ -42,15 +42,35 @@ module Smartdown
42
42
  InputFile.new(filename)
43
43
  end
44
44
  end
45
+
46
+ def recursive_files_relatively_renamed(parent_dir, depth=nil)
47
+ parent_path = @coversheet_path.dirname + parent_dir
48
+ return [] unless File.exists?(parent_path)
49
+
50
+ depth ||= parent_path.each_filename.count
51
+ parent_path.each_child.flat_map do |path|
52
+ if path.directory?
53
+ recursive_files_relatively_renamed(path, depth)
54
+ else
55
+ InputFile.new(path, relatively_name(path, depth))
56
+ end
57
+ end
58
+ end
59
+
60
+ def relatively_name(path, depth)
61
+ path.each_filename.to_a[depth..-1].join('/')
62
+ end
63
+
45
64
  end
46
65
 
47
66
  class InputFile
48
- def initialize(path)
67
+ def initialize(path, name=nil)
49
68
  @path = Pathname.new(path.to_s)
69
+ @name = name ||= @path.basename
50
70
  end
51
71
 
52
72
  def name
53
- @path.basename.to_s.split(".").first
73
+ @name.to_s.split(".").first
54
74
  end
55
75
 
56
76
  def read
@@ -1,3 +1,3 @@
1
1
  module Smartdown
2
- VERSION = "0.11.0"
2
+ VERSION = "0.11.1"
3
3
  end
@@ -49,10 +49,16 @@ describe Smartdown::Parser::DirectoryInput do
49
49
  end
50
50
 
51
51
  describe "#snippets" do
52
- it "returns an InputFile for every file in the snippets folder" do
53
- expect(input.snippets).to match([instance_of(Smartdown::Parser::InputFile)])
54
- expect(input.snippets.first.name).to eq("sn1")
55
- expect(input.snippets.first.read).to eq("snippet one\n")
52
+ it "returns an InputFile for every file, ending in .txt, in the snippets folder to arbitrary sub directory depth" do
53
+ expect(input.snippets).to match([
54
+ instance_of(Smartdown::Parser::InputFile),
55
+ instance_of(Smartdown::Parser::InputFile),
56
+ ])
57
+ expect(input.snippets.map(&:name)).to include("sn1")
58
+ expect(input.snippets.map(&:read)).to include("snippet one\n")
59
+
60
+ expect(input.snippets.map(&:name)).to include("nested/nested_again/nsn1")
61
+ expect(input.snippets.map(&:read)).to include("nested snippet\n")
56
62
  end
57
63
  end
58
64
  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.11.0
4
+ version: 0.11.1
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: 2014-07-09 00:00:00.000000000 Z
12
+ date: 2014-12-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
16
- requirement: &8759180 !ruby/object:Gem::Requirement
16
+ requirement: &10521380 !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: *8759180
24
+ version_requirements: *10521380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &8758660 !ruby/object:Gem::Requirement
27
+ requirement: &10520820 !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: *8758660
35
+ version_requirements: *10520820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &8758220 !ruby/object:Gem::Requirement
38
+ requirement: &10520420 !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: *8758220
46
+ version_requirements: *10520420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: gem_publisher
49
- requirement: &8757720 !ruby/object:Gem::Requirement
49
+ requirement: &10519900 !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: *8757720
57
+ version_requirements: *10519900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: timecop
60
- requirement: &8757300 !ruby/object:Gem::Requirement
60
+ requirement: &10519480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *8757300
68
+ version_requirements: *10519480
69
69
  description:
70
70
  email: david.heath@digital.cabinet-office.gov.uk
71
71
  executables:
@@ -200,6 +200,7 @@ files:
200
200
  - spec/fixtures/directory_input/outcomes/o1.txt
201
201
  - spec/fixtures/directory_input/questions/q1.txt
202
202
  - spec/fixtures/directory_input/cover-sheet.txt
203
+ - spec/fixtures/directory_input/snippets/nested/nested_again/nsn1.txt
203
204
  - spec/fixtures/directory_input/snippets/sn1.txt
204
205
  - spec/fixtures/acceptance/question-and-outcome/question-and-outcome.txt
205
206
  - spec/fixtures/acceptance/question-and-outcome/outcomes/o1.txt
@@ -268,7 +269,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
269
  version: '0'
269
270
  segments:
270
271
  - 0
271
- hash: -3164786129793908873
272
+ hash: -3693296040115547194
272
273
  required_rubygems_version: !ruby/object:Gem::Requirement
273
274
  none: false
274
275
  requirements:
@@ -277,7 +278,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
278
  version: '0'
278
279
  segments:
279
280
  - 0
280
- hash: -3164786129793908873
281
+ hash: -3693296040115547194
281
282
  requirements: []
282
283
  rubyforge_project:
283
284
  rubygems_version: 1.8.11
@@ -322,6 +323,7 @@ test_files:
322
323
  - spec/fixtures/directory_input/outcomes/o1.txt
323
324
  - spec/fixtures/directory_input/questions/q1.txt
324
325
  - spec/fixtures/directory_input/cover-sheet.txt
326
+ - spec/fixtures/directory_input/snippets/nested/nested_again/nsn1.txt
325
327
  - spec/fixtures/directory_input/snippets/sn1.txt
326
328
  - spec/fixtures/acceptance/question-and-outcome/question-and-outcome.txt
327
329
  - spec/fixtures/acceptance/question-and-outcome/outcomes/o1.txt