marko 0.1.0 → 0.4.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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +12 -0
  3. data/.rubocop.yml +45 -0
  4. data/CHANGELOG.md +54 -1
  5. data/Dockerfile +11 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +24 -35
  8. data/Rakefile +2 -6
  9. data/exe/marko +4 -20
  10. data/lib/basic.rb +27 -0
  11. data/lib/marko/chain.rb +44 -0
  12. data/lib/marko/cli.rb +119 -121
  13. data/lib/marko/config.rb +30 -20
  14. data/lib/marko/errors.rb +38 -0
  15. data/lib/marko/model/markup.rb +33 -0
  16. data/lib/marko/model/topic.rb +126 -0
  17. data/lib/marko/model/tree_node.rb +34 -0
  18. data/lib/marko/model.rb +10 -0
  19. data/lib/marko/parser/metadata.rb +28 -0
  20. data/lib/marko/parser/source.rb +52 -0
  21. data/lib/marko/parser/topic.rb +33 -0
  22. data/lib/marko/parser.rb +8 -19
  23. data/lib/marko/renderers/artifact.rb +29 -0
  24. data/lib/marko/renderers/content.rb +37 -0
  25. data/lib/marko/renderers/link.rb +19 -0
  26. data/lib/marko/renderers/metadata.rb +34 -0
  27. data/lib/marko/renderers/nested_list.rb +21 -0
  28. data/lib/marko/renderers/nested_tree.rb +22 -0
  29. data/lib/marko/renderers/renderer.rb +17 -0
  30. data/lib/marko/renderers/title.rb +16 -0
  31. data/lib/marko/renderers/topic.rb +24 -0
  32. data/lib/marko/renderers/url.rb +16 -0
  33. data/lib/marko/renderers.rb +17 -0
  34. data/lib/marko/scanner.rb +39 -0
  35. data/lib/marko/tasks/assemble.rb +52 -0
  36. data/lib/marko/tasks/compile.rb +19 -0
  37. data/lib/marko/tasks/load.rb +13 -0
  38. data/lib/marko/tasks/parse.rb +27 -0
  39. data/lib/marko/tasks/scan.rb +18 -0
  40. data/lib/marko/tasks/validate.rb +32 -0
  41. data/lib/marko/tasks.rb +13 -0
  42. data/lib/marko/validators/lost_index.rb +21 -0
  43. data/lib/marko/validators/lost_links.rb +25 -0
  44. data/lib/marko/validators/lost_parent.rb +21 -0
  45. data/lib/marko/validators/non_unique_id.rb +23 -0
  46. data/lib/marko/validators.rb +11 -0
  47. data/lib/marko/version.rb +1 -3
  48. data/lib/marko.rb +11 -35
  49. metadata +47 -54
  50. data/Gemfile +0 -10
  51. data/Gemfile.lock +0 -22
  52. data/lib/assets/demo/README.md +0 -13
  53. data/lib/assets/demo/src/fr/assemble.md +0 -27
  54. data/lib/assets/demo/src/fr/compile.md +0 -25
  55. data/lib/assets/demo/src/fr/markup.md +0 -111
  56. data/lib/assets/demo/src/fr/storage.md +0 -16
  57. data/lib/assets/demo/src/fr/treenode.md +0 -34
  58. data/lib/assets/demo/src/index.md +0 -34
  59. data/lib/assets/demo/src/intro.md +0 -98
  60. data/lib/assets/demo/src/ui/cli.md +0 -26
  61. data/lib/assets/demo/src/ui/gem.md +0 -14
  62. data/lib/assets/demo/src/ur/uc.create.project.md +0 -8
  63. data/lib/assets/demo/src/ur/uc.general.flow.md +0 -14
  64. data/lib/assets/init/README.md +0 -61
  65. data/lib/assets/init/Rakefile +0 -100
  66. data/lib/assets/init/tt/artifact.md.tt +0 -3
  67. data/lib/marko/artifact.rb +0 -3
  68. data/lib/marko/assembler.rb +0 -82
  69. data/lib/marko/compiler.rb +0 -16
  70. data/lib/marko/gadgets/pluggable.rb +0 -55
  71. data/lib/marko/gadgets/sentry.rb +0 -66
  72. data/lib/marko/gadgets/service.rb +0 -52
  73. data/lib/marko/gadgets.rb +0 -3
  74. data/lib/marko/loader.rb +0 -38
  75. data/lib/marko/markup/compiler.rb +0 -36
  76. data/lib/marko/markup/decorator.rb +0 -65
  77. data/lib/marko/markup/macro.rb +0 -176
  78. data/lib/marko/markup/parser.rb +0 -122
  79. data/lib/marko/markup/storage.rb +0 -100
  80. data/lib/marko/markup/validator.rb +0 -101
  81. data/lib/marko/markup.rb +0 -24
  82. data/lib/marko/services/assemble.rb +0 -16
  83. data/lib/marko/services/compile.rb +0 -30
  84. data/lib/marko/services.rb +0 -2
  85. data/lib/marko/storage.rb +0 -36
  86. data/lib/marko/tree_node.rb +0 -128
  87. data/lib/marko/validator.rb +0 -19
  88. data/marko.gemspec +0 -44
@@ -0,0 +1,17 @@
1
+ require_relative 'renderers/renderer'
2
+ require_relative 'renderers/url'
3
+ require_relative 'renderers/link'
4
+ require_relative 'renderers/title'
5
+ require_relative 'renderers/metadata'
6
+ require_relative 'renderers/nested_list'
7
+ require_relative 'renderers/nested_tree'
8
+ require_relative 'renderers/content'
9
+ require_relative 'renderers/topic'
10
+ require_relative 'renderers/artifact'
11
+
12
+ module Marko
13
+
14
+ # Renderers
15
+ module Renderers
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'model'
2
+
3
+ module Marko
4
+
5
+ # Source scanner
6
+ class Scanner
7
+ # @param text [String]
8
+ # @return [Array<Model::Markup>]
9
+ def scan(filename)
10
+ @source = filename
11
+ content = File.read(filename)
12
+ scan_topics(content)
13
+ .select{ it.content.start_with?(?#) }
14
+ end
15
+
16
+ protected
17
+
18
+ def scan_topics(text)
19
+ quote, buffer, lineno = false, [], 0
20
+ origin = proc{
21
+ Model::Markup.new(@source,
22
+ lineno - buffer.size + 1, buffer.join)
23
+ }
24
+
25
+ [].tap{|ary|
26
+ text.each_line do |line|
27
+ if line =~ /^#/ && !quote && buffer.any?
28
+ ary << origin.()
29
+ buffer.clear
30
+ end
31
+ lineno += 1
32
+ buffer << line
33
+ quote = !quote if line.start_with?('```')
34
+ end
35
+ ary << origin.() if buffer.any?
36
+ }
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,52 @@
1
+ require_relative '../model'
2
+ require_relative '../errors'
3
+
4
+ module Marko
5
+ module Tasks
6
+
7
+ # Assemble tree
8
+ class Assemble
9
+ def initialize(config)
10
+ @config = config
11
+ @metadata = { id: '0' }
12
+ .merge(config.to_h.slice(:order_index, :author))
13
+ end
14
+
15
+ # @param topics [Array<Model::Topic>]
16
+ # @return [Model::Topic]
17
+ def call(topics)
18
+ @artifact = Model::Topic.new(
19
+ @config.title, '', **@metadata)
20
+
21
+ topics.each{ @artifact.add(it) }
22
+ @artifact.each{ maybe_move(it) }
23
+ inject_ids
24
+ @artifact
25
+ end
26
+
27
+ protected
28
+
29
+ def maybe_move(node)
30
+ return unless node[:parent]
31
+
32
+ parent = @artifact.find{ it.id == node[:parent] }
33
+ return unless parent
34
+
35
+ parent.add(node)
36
+ @artifact.delete(node)
37
+ end
38
+
39
+ def inject_ids
40
+ counter = {}
41
+ no_id = @artifact.select {|node| node.id.empty?}
42
+ no_id.each do
43
+ index = counter[it.parent] || 1
44
+ counter[it.parent] = index + 1
45
+ id = index.to_s.rjust(2, '0')
46
+ id = '.' + id unless it.parent == @artifact
47
+ it.id = id
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../model'
2
+ require_relative '../errors'
3
+ require_relative '../renderers'
4
+
5
+ module Marko
6
+ module Tasks
7
+
8
+ # Compile tree into markup
9
+ class Compile
10
+
11
+ # @param topic [Model::Topic]
12
+ # @return [String]
13
+ def call(topic)
14
+ Renderers::Artifact.new.render(topic)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Marko
2
+ module Tasks
3
+
4
+ # Load source files
5
+ class Load
6
+ # @param pattern [String]
7
+ # @return [Array<String>]
8
+ def call(pattern)
9
+ Dir.glob(pattern)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../model'
2
+ require_relative '../errors'
3
+ require_relative '../parser'
4
+
5
+ module Marko
6
+ module Tasks
7
+
8
+ # Parse source files
9
+ class Parse
10
+ # @param payload [Array< Array<Model::Markup> >]
11
+ # @return [Array<Model::Topic>]
12
+ def call(payload)
13
+ parser = Parser::Source.new
14
+
15
+ topics = payload
16
+ .map{ parser.parse(it) }
17
+ .flatten
18
+
19
+ errors = topics.reject{ it.is_a?(Model::Topic) }
20
+ fail Marko::StageError.new('Load stage failed', errors) \
21
+ if errors.any?
22
+
23
+ topics
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../model'
2
+ require_relative '../errors'
3
+ require_relative '../scanner'
4
+
5
+ module Marko
6
+ module Tasks
7
+
8
+ # Scan source files
9
+ class Scan
10
+ # @param payload [Array<String>] filenames
11
+ # @return [Array<Array<Model::Markup>>] each scanned source must be parsed separately
12
+ def call(payload)
13
+ scanner = Scanner.new
14
+ payload.map{ scanner.scan(it) }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../model'
2
+ require_relative '../errors'
3
+ require_relative '../validators'
4
+
5
+ module Marko
6
+ module Tasks
7
+
8
+ # Validate tree
9
+ class Validate
10
+
11
+ # @param topic [Model::Topic]
12
+ def call(topic)
13
+ validators =
14
+ [ Validators::NonUniqueId,
15
+ Validators::LostParent,
16
+ Validators::LostIndex,
17
+ Validators::LostLinks
18
+ ].map(&:new)
19
+
20
+ errors = validators
21
+ .inject([]){|errors, validator| errors << validator.call(topic) }
22
+ .flatten
23
+
24
+ fail Marko::StageError.new('Check stage failed', errors) \
25
+ if errors.any?
26
+
27
+ topic
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'tasks/load'
2
+ require_relative 'tasks/scan'
3
+ require_relative 'tasks/parse'
4
+ require_relative 'tasks/assemble'
5
+ require_relative 'tasks/validate'
6
+ require_relative 'tasks/compile'
7
+
8
+ module Marko
9
+
10
+ # Tasks
11
+ module Tasks
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../errors'
2
+
3
+ module Marko
4
+ module Validators
5
+
6
+ # Lost parent validator
7
+ class LostIndex
8
+ # @param tree [Enumerable]
9
+ def call(tree)
10
+ faulty = tree.drop(1)
11
+ .select{ it.lost_order_index.any? }
12
+
13
+ faulty.map do |e|
14
+ message = "lost order_index #{e.lost_order_index.join(', ')} in #{e.markup}"
15
+ Marko::ValidatorError.new(message)
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../errors'
2
+
3
+ module Marko
4
+ module Validators
5
+
6
+ # Lost links validator
7
+ class LostLinks
8
+
9
+ # @param tree [Enumerable]
10
+ def call(tree)
11
+ lost_links = tree.inject([]) do |memo, topic|
12
+ lost = topic.links.reject{ topic.find_by_id(it) }
13
+ memo << [topic, lost] if lost.any?
14
+ memo
15
+ end
16
+
17
+ lost_links.map do |e, lost|
18
+ message = "lost link #{lost.join(', ')} in #{e.markup}"
19
+ Marko::ValidatorError.new(message)
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../errors'
2
+
3
+ module Marko
4
+ module Validators
5
+
6
+ # Lost parent validator
7
+ class LostParent
8
+ # @param tree [Enumerable]
9
+ def call(tree)
10
+ faulty = tree
11
+ .select{ it[:parent] && it&.parent&.id != it[:parent] }
12
+
13
+ faulty.map do
14
+ message = "lost parent [#{it[:parent]}] in #{it.markup}"
15
+ Marko::ValidatorError.new(message)
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../errors'
2
+
3
+ module Marko
4
+ module Validators
5
+
6
+ # Non unique id validator
7
+ class NonUniqueId
8
+ # @param tree [Enumerable]
9
+ def call(tree)
10
+ topics = tree
11
+ .group_by(&:id)
12
+ .select{|_, items| items.size > 1 }
13
+
14
+ topics.map do |id, items|
15
+ sources = items.map{" #{it.markup}"}.join(?\n)
16
+ message = "the same id [#{id}] found in\n#{sources}"
17
+ Marko::ValidatorError.new(message)
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'validators/non_unique_id'
2
+ require_relative 'validators/lost_parent'
3
+ require_relative 'validators/lost_index'
4
+ require_relative 'validators/lost_links'
5
+
6
+ module Marko
7
+
8
+ # Validators namespace
9
+ module Validators
10
+ end
11
+ end
data/lib/marko/version.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Marko
4
- VERSION = "0.1.0"
2
+ VERSION = '0.4.0'
5
3
  end
data/lib/marko.rb CHANGED
@@ -1,37 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "marko/version"
4
- require_relative "marko/gadgets"
5
- require_relative "marko/tree_node"
6
- require_relative "marko/storage"
7
- require_relative "marko/parser"
8
- require_relative "marko/validator"
9
- require_relative "marko/assembler"
10
- require_relative "marko/compiler"
11
- require_relative "marko/config"
12
- require_relative "marko/markup"
13
- require_relative "marko/services"
14
- require_relative "marko/loader"
15
- require_relative "marko/cli"
16
-
1
+ require_relative 'marko/errors'
2
+ require_relative 'marko/model'
3
+ require_relative 'marko/renderers'
4
+ require_relative 'marko/parser'
5
+ require_relative 'marko/validators'
6
+ require_relative 'marko/tasks'
7
+ require_relative 'marko/config'
8
+ require_relative 'marko/chain'
9
+ require_relative 'marko/cli'
10
+
11
+ # Marko marckup generator namespace
17
12
  module Marko
18
-
19
- class << self
20
- def root
21
- File.dirname __dir__
22
- end
23
-
24
- # helper method for assemblage
25
- # @see Marko::Services::Assemble
26
- def assemble(&block)
27
- Services::Assemble.(&block)
28
- end
29
-
30
- # helper method for compilation
31
- # @see Marko::Services::Compile
32
- def compile(tree: nil, template: '', filename: '', &block)
33
- Services::Compile.(
34
- tree: tree, template: template, filename: filename, &block)
35
- end
36
- end
37
13
  end
metadata CHANGED
@@ -1,19 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marko
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
- - Nikolay Voynov
8
- autorequire:
7
+ - nvoynov
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-01-02 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies: []
13
- description: |
14
- Marko supplies a "docs-as-code" approach for compiling bulky software artifacts by providing source storage, original plain text markup, compiler templates, command-line and Gem interfaces.
15
-
16
- Having the assembled artifact, it can be analyzed, enriched by extra data, served as a source for deriving subdued artifacts, etc.
12
+ description: Marko assembles separated markup sources into one artifact tree.
17
13
  email:
18
14
  - nvoynov@gmail.com
19
15
  executables:
@@ -21,62 +17,61 @@ executables:
21
17
  extensions: []
22
18
  extra_rdoc_files: []
23
19
  files:
20
+ - ".dockerignore"
21
+ - ".rubocop.yml"
24
22
  - CHANGELOG.md
25
- - Gemfile
26
- - Gemfile.lock
23
+ - Dockerfile
24
+ - LICENSE.txt
27
25
  - README.md
28
26
  - Rakefile
29
27
  - exe/marko
30
- - lib/assets/demo/README.md
31
- - lib/assets/demo/src/fr/assemble.md
32
- - lib/assets/demo/src/fr/compile.md
33
- - lib/assets/demo/src/fr/markup.md
34
- - lib/assets/demo/src/fr/storage.md
35
- - lib/assets/demo/src/fr/treenode.md
36
- - lib/assets/demo/src/index.md
37
- - lib/assets/demo/src/intro.md
38
- - lib/assets/demo/src/ui/cli.md
39
- - lib/assets/demo/src/ui/gem.md
40
- - lib/assets/demo/src/ur/uc.create.project.md
41
- - lib/assets/demo/src/ur/uc.general.flow.md
42
- - lib/assets/init/README.md
43
- - lib/assets/init/Rakefile
44
- - lib/assets/init/tt/artifact.md.tt
28
+ - lib/basic.rb
45
29
  - lib/marko.rb
46
- - lib/marko/artifact.rb
47
- - lib/marko/assembler.rb
30
+ - lib/marko/chain.rb
48
31
  - lib/marko/cli.rb
49
- - lib/marko/compiler.rb
50
32
  - lib/marko/config.rb
51
- - lib/marko/gadgets.rb
52
- - lib/marko/gadgets/pluggable.rb
53
- - lib/marko/gadgets/sentry.rb
54
- - lib/marko/gadgets/service.rb
55
- - lib/marko/loader.rb
56
- - lib/marko/markup.rb
57
- - lib/marko/markup/compiler.rb
58
- - lib/marko/markup/decorator.rb
59
- - lib/marko/markup/macro.rb
60
- - lib/marko/markup/parser.rb
61
- - lib/marko/markup/storage.rb
62
- - lib/marko/markup/validator.rb
33
+ - lib/marko/errors.rb
34
+ - lib/marko/model.rb
35
+ - lib/marko/model/markup.rb
36
+ - lib/marko/model/topic.rb
37
+ - lib/marko/model/tree_node.rb
63
38
  - lib/marko/parser.rb
64
- - lib/marko/services.rb
65
- - lib/marko/services/assemble.rb
66
- - lib/marko/services/compile.rb
67
- - lib/marko/storage.rb
68
- - lib/marko/tree_node.rb
69
- - lib/marko/validator.rb
39
+ - lib/marko/parser/metadata.rb
40
+ - lib/marko/parser/source.rb
41
+ - lib/marko/parser/topic.rb
42
+ - lib/marko/renderers.rb
43
+ - lib/marko/renderers/artifact.rb
44
+ - lib/marko/renderers/content.rb
45
+ - lib/marko/renderers/link.rb
46
+ - lib/marko/renderers/metadata.rb
47
+ - lib/marko/renderers/nested_list.rb
48
+ - lib/marko/renderers/nested_tree.rb
49
+ - lib/marko/renderers/renderer.rb
50
+ - lib/marko/renderers/title.rb
51
+ - lib/marko/renderers/topic.rb
52
+ - lib/marko/renderers/url.rb
53
+ - lib/marko/scanner.rb
54
+ - lib/marko/tasks.rb
55
+ - lib/marko/tasks/assemble.rb
56
+ - lib/marko/tasks/compile.rb
57
+ - lib/marko/tasks/load.rb
58
+ - lib/marko/tasks/parse.rb
59
+ - lib/marko/tasks/scan.rb
60
+ - lib/marko/tasks/validate.rb
61
+ - lib/marko/validators.rb
62
+ - lib/marko/validators/lost_index.rb
63
+ - lib/marko/validators/lost_links.rb
64
+ - lib/marko/validators/lost_parent.rb
65
+ - lib/marko/validators/non_unique_id.rb
70
66
  - lib/marko/version.rb
71
- - marko.gemspec
72
67
  homepage: https://github.com/nvoynov/marko
73
- licenses: []
68
+ licenses:
69
+ - MIT
74
70
  metadata:
75
71
  allowed_push_host: https://rubygems.org
76
72
  homepage_uri: https://github.com/nvoynov/marko
77
73
  source_code_uri: https://github.com/nvoynov/marko
78
74
  changelog_uri: https://github.com/nvoynov/marko/CHANGELOG.md
79
- post_install_message:
80
75
  rdoc_options: []
81
76
  require_paths:
82
77
  - lib
@@ -84,16 +79,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
79
  requirements:
85
80
  - - ">="
86
81
  - !ruby/object:Gem::Version
87
- version: 2.6.0
82
+ version: '3.4'
88
83
  required_rubygems_version: !ruby/object:Gem::Requirement
89
84
  requirements:
90
85
  - - ">="
91
86
  - !ruby/object:Gem::Version
92
87
  version: '0'
93
88
  requirements: []
94
- rubygems_version: 3.4.1
95
- signing_key:
89
+ rubygems_version: 3.6.9
96
90
  specification_version: 4
97
- summary: Marko is a markup compiler that builds a tree from separated markup sources
98
- and compiles it into a deliverable artifact.
91
+ summary: Marko is a markdown separate sources compiler.
99
92
  test_files: []
data/Gemfile DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in marko.gemspec
6
- gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "minitest", "~> 5.0"
data/Gemfile.lock DELETED
@@ -1,22 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- marko (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- minitest (5.16.3)
10
- rake (13.0.6)
11
-
12
- PLATFORMS
13
- x64-mingw32
14
- x86_64-linux
15
-
16
- DEPENDENCIES
17
- marko!
18
- minitest (~> 5.0)
19
- rake (~> 13.0)
20
-
21
- BUNDLED WITH
22
- 2.4.1
@@ -1,13 +0,0 @@
1
- % Marko Demo Project
2
-
3
- # Overview
4
-
5
- This project is an example of developing bulky technical artifacts with Marko Markup Compiler. It also serves as a sandbox for testing and features development.
6
-
7
- # Usage
8
-
9
- Run `$ marko` to see command-line interface
10
-
11
- Run `$ rake marko:publish` to publish the aritfact
12
-
13
- Run `$ rake -T` to see other custom interface
@@ -1,27 +0,0 @@
1
- # Assemble artifact
2
- {{id: .assemble, parent: fr}}
3
-
4
- The system shall provide the function to assemble artifact.
5
-
6
- __Input__
7
-
8
- * NO
9
-
10
- __Output__
11
-
12
- Parameter Type 0..* Description
13
- --------- -------- ---- --------------
14
- tree TreeNode 1 assembled tree
15
-
16
- __Flow__
17
-
18
- @@todo provide id for required functions and change steps with appropriate links
19
-
20
- 1. get list of project sources
21
- 2. parse sources buffering nodes and errors
22
- 3. fail "parsing errors" if errors.any?
23
- 4. assemble artifact from buffer of nodes
24
- 5. generate and inject auto ids
25
- 6. validate artifact buffering errors
26
- 7. fail "tree errors" if errors.any?
27
- 8. return artifact
@@ -1,25 +0,0 @@
1
- # Compile artifact
2
- {{id: .compile, parent: fr}}
3
-
4
- The system shall provide the function to create deliverable artifact.
5
-
6
- __Input__
7
-
8
- Parameter Type 0..* Description
9
- --------- -------- ---- --------------
10
- tree TreeNode 1 assembled tree
11
- template String 1 ERB template
12
- filename String 1 filename
13
-
14
- __Output__
15
-
16
- The output of the function must be well-formed deliverable with `filename` built on `template` parameter.
17
-
18
- __Flow__
19
-
20
- @@todo provide id for required functions and change steps with appropriate links
21
-
22
- 1. `tree` = [[fr.assemble]] unless `tree`
23
- 2. load template body from `template`
24
- 3. backup `filename` to `<filename>~`
25
- 4. render `template` for each node of `tree` into `filename`