marko 0.3.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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +12 -0
  3. data/.rubocop.yml +45 -0
  4. data/CHANGELOG.md +10 -4
  5. data/Dockerfile +11 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +17 -31
  8. data/Rakefile +2 -11
  9. data/exe/marko +4 -22
  10. data/lib/basic.rb +27 -0
  11. data/lib/marko/chain.rb +44 -0
  12. data/lib/marko/cli.rb +119 -129
  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 -43
  49. metadata +47 -85
  50. data/Gemfile +0 -10
  51. data/Gemfile.lock +0 -23
  52. data/STORY.md +0 -44
  53. data/_layouts/footer.md +0 -4
  54. data/_layouts/header.md +0 -3
  55. data/_layouts/layout.html +0 -73
  56. data/_layouts/robots.txt.erb +0 -4
  57. data/_layouts/sitemap.xml.erb +0 -20
  58. data/_layouts/styles.css +0 -92
  59. data/docs/changelog.html +0 -74
  60. data/docs/css/styles.css +0 -92
  61. data/docs/index.html +0 -297
  62. data/docs/readme.html +0 -297
  63. data/docs/robots.txt +0 -4
  64. data/docs/sitemap.xml +0 -30
  65. data/docs/story.html +0 -132
  66. data/lib/assets/demo/README.md +0 -13
  67. data/lib/assets/demo/src/fr/assemble.md +0 -27
  68. data/lib/assets/demo/src/fr/compile.md +0 -25
  69. data/lib/assets/demo/src/fr/markup.md +0 -111
  70. data/lib/assets/demo/src/fr/storage.md +0 -16
  71. data/lib/assets/demo/src/fr/treenode.md +0 -34
  72. data/lib/assets/demo/src/index.md +0 -34
  73. data/lib/assets/demo/src/intro.md +0 -98
  74. data/lib/assets/demo/src/ui/cli.md +0 -26
  75. data/lib/assets/demo/src/ui/gem.md +0 -14
  76. data/lib/assets/demo/src/ur/uc.create.project.md +0 -8
  77. data/lib/assets/demo/src/ur/uc.general.flow.md +0 -14
  78. data/lib/assets/init/README.md +0 -61
  79. data/lib/assets/init/Rakefile +0 -100
  80. data/lib/assets/init/tt/custom.md.tt +0 -19
  81. data/lib/assets/init/tt/default.md.tt +0 -4
  82. data/lib/assets/samples/0_index.md +0 -14
  83. data/lib/assets/samples/1_intro.md +0 -55
  84. data/lib/assets/samples/2_stakh.md +0 -21
  85. data/lib/assets/samples/3_actors.md +0 -10
  86. data/lib/assets/samples/4_cases.md +0 -53
  87. data/lib/assets/samples/5_entities.md +0 -18
  88. data/lib/assets/samples/6_concerns.md +0 -60
  89. data/lib/assets/samples/SRS-IEEE-830-1998.md +0 -293
  90. data/lib/assets/samples/SRS-RUP.md +0 -283
  91. data/lib/assets/samples/business-case.md +0 -116
  92. data/lib/assets/samples/ears.md +0 -112
  93. data/lib/assets/samples/gen_punch_domain.rb +0 -183
  94. data/lib/assets/samples/requirements.md +0 -105
  95. data/lib/assets/samples/stakeholders.png +0 -0
  96. data/lib/assets/samples/vision.md +0 -191
  97. data/lib/marko/artifact.rb +0 -5
  98. data/lib/marko/assembler.rb +0 -83
  99. data/lib/marko/compiler.rb +0 -16
  100. data/lib/marko/gadgets/pluggable.rb +0 -55
  101. data/lib/marko/gadgets/sentry.rb +0 -66
  102. data/lib/marko/gadgets/service.rb +0 -52
  103. data/lib/marko/gadgets.rb +0 -3
  104. data/lib/marko/loader.rb +0 -38
  105. data/lib/marko/markup/compiler.rb +0 -30
  106. data/lib/marko/markup/decorator.rb +0 -80
  107. data/lib/marko/markup/macro.rb +0 -176
  108. data/lib/marko/markup/parser.rb +0 -122
  109. data/lib/marko/markup/storage.rb +0 -118
  110. data/lib/marko/markup/validator.rb +0 -101
  111. data/lib/marko/markup.rb +0 -24
  112. data/lib/marko/services/assemble.rb +0 -16
  113. data/lib/marko/services/compile.rb +0 -30
  114. data/lib/marko/services.rb +0 -2
  115. data/lib/marko/storage.rb +0 -36
  116. data/lib/marko/tree_node.rb +0 -129
  117. data/lib/marko/validator.rb +0 -19
  118. data/marko.gemspec +0 -44
  119. data/sancho.yml +0 -6
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "forwardable"
4
- require_relative "gadgets"
5
-
6
- module Marko
7
-
8
- MustbeString = Sentry.new(:key, "must be String"
9
- ) {|v| v.is_a? String}
10
-
11
- MustbeTreeNode = Sentry.new(:key, "must be TreeNode"
12
- ) {|v| v.is_a? TreeNode}
13
-
14
- class TreeNode
15
- extend Forwardable
16
- include Enumerable
17
-
18
- attr_reader :parent
19
- attr_reader :title
20
- attr_reader :meta
21
- attr_reader :body
22
-
23
- def_delegators :@meta, :[], :[]=
24
- def_delegator :@items, :last
25
- def_delegator :@items, :delete, :delete_item
26
- def_delegator :@meta, :delete, :delete_meta
27
- def_delegator :@parent, :id, :parent_id
28
-
29
- def initialize(title = '', body = '', **meta)
30
- @parent, @items = nil, []
31
- @title = MustbeString.(title, :title)
32
- @body = MustbeString.(body, :body)
33
- @meta = meta
34
- @meta[:id] = '' unless @meta[:id]
35
- end
36
-
37
- def <<(node)
38
- MustbeTreeNode.(node)
39
- node.parent = self
40
- @items << node
41
- node
42
- end
43
-
44
- # see Enumerable#each
45
- def each(&block)
46
- return to_enum(__callee__) unless block_given?
47
- yield(self)
48
- items.each{|n| n.each(&block) }
49
- end
50
-
51
- # @return [Array<String>]
52
- def order_index
53
- @meta
54
- .fetch(:order_index, '')
55
- .strip
56
- .split(/\s{1,}/)
57
- end
58
-
59
- def id
60
- val = @meta.fetch(:id, '')
61
- return val unless @parent
62
- val.start_with?('.') ? @parent.id + val : val
63
- end
64
-
65
- def find_item(ref)
66
- @items.find{|n| n.id == ref || n.id.end_with?(ref)}
67
- end
68
-
69
- def find_node(ref)
70
- return find_item(ref) if ref.start_with?(?.)
71
- root.find{|n| n.id == ref}
72
- end
73
-
74
- # @return [Array<Node>] ordered list of child nodes
75
- def items
76
- return @items unless order_index.any?
77
- [].tap do |ary|
78
- src = Array.new(@items)
79
- order_index.each do |i|
80
- node = find_item(i)
81
- ary << src.delete(node) if node
82
- end
83
- ary.concat(src)
84
- end
85
- end
86
-
87
- def belongs_to?(ref)
88
- node = self.parent
89
- node = node.parent while node && node.id != ref
90
- node&.id == ref
91
- end
92
-
93
- # @return [Node] the root node in the node hierarchy
94
- def root
95
- n = self
96
- n = n.parent while n.parent
97
- n
98
- end
99
-
100
- def root?
101
- self == root
102
- end
103
-
104
- # @return [Integer] the node level in the node hierarchy
105
- def nesting_level
106
- @parent.nil? ? 0 : @parent.nesting_level + 1
107
- end
108
-
109
- # @return [Array<String>] macro links in the node #body IT IS RATHER MACRO FOR WRITER SO TI SHOULD BE PROCESSED APPROPRIATELY
110
- def links
111
- return [] if @body.empty?
112
- @body.scan(/\[\[([\w\.]*)\]\]/).flatten.uniq
113
- end
114
-
115
- def orphan!
116
- return unless @parent
117
- @parent.delete_item(self)
118
- @parent = nil
119
- end
120
-
121
- protected
122
-
123
- def parent=(node)
124
- @parent = MustbeTreeNode.(node)
125
- end
126
-
127
- end
128
-
129
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "tree_node"
4
-
5
- module Marko
6
-
7
- # The strategy of tree validation
8
- class Validator
9
- extend Pluggable
10
-
11
- # @param tree [TreeNode]
12
- # @param block [&block] proc {|event, payload|}
13
- # @return [Array<String>] errors array
14
- def call(tree, &block)
15
- fail "the abstract method must be overriden"
16
- end
17
- end
18
-
19
- end
data/marko.gemspec DELETED
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/marko/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "marko"
7
- spec.version = Marko::VERSION
8
- spec.authors = ["Nikolay Voynov"]
9
- spec.email = ["nvoynov@gmail.com"]
10
-
11
- spec.summary = "Marko is a markup compiler that builds a tree from separated markup sources and compiles it into a deliverable artifact."
12
-
13
- spec.description = <<~EOF
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.
17
- EOF
18
-
19
- spec.homepage = "https://github.com/nvoynov/marko"
20
- spec.required_ruby_version = ">= 2.6.0"
21
-
22
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
23
-
24
- spec.metadata["homepage_uri"] = spec.homepage
25
- spec.metadata["source_code_uri"] = spec.homepage
26
- spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
27
-
28
- # Specify which files should be added to the gem when it is released.
29
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
30
- spec.files = Dir.chdir(__dir__) do
31
- `git ls-files -z`.split("\x0").reject do |f|
32
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
33
- end
34
- end
35
- spec.bindir = "exe"
36
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
37
- spec.require_paths = ["lib"]
38
-
39
- # Uncomment to register a new dependency of your gem
40
- # spec.add_dependency "example-gem", "~> 1.0"
41
-
42
- # For more information and examples about making a new gem, check out our
43
- # guide at: https://bundler.io/guides/creating_gem.html
44
- end
data/sancho.yml DELETED
@@ -1,6 +0,0 @@
1
- domain: nvoynov.github.io/marko
2
- title: Marko Markup Compiler
3
- pages:
4
- - README.md
5
- - CHANGELOG.md
6
- - STORY.md