avm-eac_asciidoctor_base0 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 021fd6f878871685f09ddf9a6291e376dbfb9f0e997af81bb3c84bd18784ddbc
4
- data.tar.gz: 94efd0244876163b1aed499104d478b2db2b08d02cbe9b188051f6af027ec687
3
+ metadata.gz: '08d54410639bf33a3d49c53953341593aef7bac0f6a084b5fa51cc24b7568db9'
4
+ data.tar.gz: a125b573c40d09ddd3a75fb9c62219f388ef3c5ea5b945f5ffc9071aab0de6b2
5
5
  SHA512:
6
- metadata.gz: eca196f816d71af8b31d867203d625f39b37a6f12951824c0f1dc6b4e82d7b2d26fbd27726a77b73760f5fe43f43d17ddf114ee79fd47484440cce532ff705d0
7
- data.tar.gz: 00c9d5370fed88552193b3c07fd11fa3f25ba730aac0592cde6cddb5dc57fef60f694d37005e73046faa7cd6d821e6bc6bdaa17e4760f75d0ee43cf52068c410
6
+ metadata.gz: fb225948a215039af7d9038847b6ef291de2e381c2726d18c50d8c2250f737ca71dbc559021816657d173ce319deee2882f170699ddcee6c34ab58bd5aa2401c
7
+ data.tar.gz: 1192b9d3c374377cadc04377bea50dda13d7dcb0915d3f34835b058eb94f4554f7aaa8eab69087cc3222dec68295aee6cb554c4175eb66b61403ef5b83d7b141
@@ -45,7 +45,7 @@ module Avm
45
45
 
46
46
  # @return [String]
47
47
  def breadcrumbs_lines
48
- ['[.normal]', document.breadcrumbs_macro_value]
48
+ ['[.normal]', document.macro_lines(:breadcrumbs)]
49
49
  end
50
50
 
51
51
  # @return [Array<String>]
@@ -11,8 +11,10 @@ module Avm
11
11
  enable_method_class
12
12
  enable_simple_cache
13
13
 
14
- MACRO_PARSER = %r{\A\s*//\#(\S+.*)}.to_parser do |m|
15
- m[1]
14
+ ARGUMENT_SEPARATOR = ','
15
+ MACRO_PARSER = %r{\A\s*//\#(\S+)(?:\s+(.+))?\s*?\z}.to_parser do |m|
16
+ ::Struct.new(:name, :arguments).new(m[1],
17
+ m[2].to_s.split(ARGUMENT_SEPARATOR).map(&:strip))
16
18
  end
17
19
 
18
20
  common_constructor :document, :line
@@ -30,18 +32,28 @@ module Avm
30
32
  macro_name.present?
31
33
  end
32
34
 
35
+ # @return [Array<String>, nil]
36
+ def macro_arguments
37
+ parsed_macro.if_present(&:arguments)
38
+ end
39
+
40
+ # @return [String, nil]
41
+ def macro_name
42
+ parsed_macro.if_present(&:name)
43
+ end
44
+
33
45
  def macro_parser
34
46
  MACRO_PARSER
35
47
  end
36
48
 
37
49
  # @return [Array<String>]
38
50
  def macro_value
39
- document.send("#{macro_name}_macro_value")
51
+ document.macro_lines(macro_name, macro_arguments)
40
52
  end
41
53
 
42
54
  private
43
55
 
44
- def macro_name_uncached
56
+ def parsed_macro_uncached
45
57
  macro_parser.parse(line)
46
58
  end
47
59
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'asciidoctor'
4
+ require 'avm/eac_asciidoctor_base0/instances/macros'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
 
6
7
  module Avm
@@ -22,6 +23,15 @@ module Avm
22
23
  other.body_target_path.relative_path_from(body_target_path.dirname)
23
24
  end
24
25
 
26
+ # @return [Enumerable<String>]
27
+ def body_source_lines
28
+ if source_document.body_path.file?
29
+ source_document.body_path.read.each_line
30
+ else
31
+ default_body_source_lines
32
+ end
33
+ end
34
+
25
35
  # Absolute path to the output of Asciidoctor's source file.
26
36
  #
27
37
  # @return [Pathname]
@@ -56,6 +66,18 @@ module Avm
56
66
  source_document.root_path
57
67
  end
58
68
 
69
+ # @return [Enumerable<String>]
70
+ def default_body_source_lines
71
+ macro_lines(:default_body)
72
+ end
73
+
74
+ # @param name [String]
75
+ # @return [Array<String>]
76
+ def macro_lines(name, arguments = [])
77
+ ::Avm::EacAsciidoctorBase0::Instances::Macros.const_get(name.to_s.camelize)
78
+ .new(self, arguments).result
79
+ end
80
+
59
81
  def perform
60
82
  perform_self
61
83
  perform_children
@@ -74,7 +96,7 @@ module Avm
74
96
  # @return [String]
75
97
  def pre_processed_body_source_content
76
98
  (
77
- header_lines + [''] + source_document.body_path.read.each_line
99
+ header_lines + [''] + body_source_lines
78
100
  .flat_map { |line| pre_process_line(line.rstrip) }
79
101
  ).map { |line| "#{line.rstrip}\n" }.join
80
102
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacAsciidoctorBase0
7
+ module Instances
8
+ module Macros
9
+ class Base
10
+ enable_abstract_methods
11
+ common_constructor :document, :arguments, default: [[]]
12
+
13
+ # @return [Array<String>]
14
+ def result
15
+ raise_abstract_method __method__
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_asciidoctor_base0/instances/macros/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacAsciidoctorBase0
8
+ module Instances
9
+ module Macros
10
+ class Breadcrumbs < ::Avm::EacAsciidoctorBase0::Instances::Macros::Base
11
+ NODE_SEPARATOR = ' » '
12
+ ROOT_DOCUMENT_TITLE = 'Home'
13
+
14
+ # @return [Array<String>]
15
+ def result
16
+ trail_nodes.join(NODE_SEPARATOR)
17
+ end
18
+
19
+ def trail_nodes
20
+ r = []
21
+ current = document
22
+ while current.present?
23
+ r.unshift(Node.new(document, current))
24
+ current = current.parent_document
25
+ end
26
+ r
27
+ end
28
+
29
+ class Node
30
+ common_constructor :current, :document
31
+
32
+ # @return [String]
33
+ def address
34
+ current.href_to_other_body(document)
35
+ end
36
+
37
+ # @return [String]
38
+ def title
39
+ if document.parent_document.present?
40
+ document.source_document.title
41
+ else
42
+ ROOT_DOCUMENT_TITLE
43
+ end
44
+ end
45
+
46
+ # @return [String]
47
+ def to_s
48
+ "link:#{address}[#{title}]"
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_asciidoctor_base0/instances/macros/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacAsciidoctorBase0
8
+ module Instances
9
+ module Macros
10
+ class ChildDocs < ::Avm::EacAsciidoctorBase0::Instances::Macros::Base
11
+ class DocumentBuilder
12
+ common_constructor :child_docs, :document, :depth, default: [0]
13
+ compare_by :title, :address
14
+
15
+ # @return [Pathname]
16
+ def address
17
+ root_document.href_to_other_body(document)
18
+ end
19
+
20
+ # @return [Array] Document's children mapped to document builders.
21
+ def children
22
+ document.children.map { |c| self.class.new(child_docs, c, depth + 1) }.sort
23
+ end
24
+
25
+ # @return [Boolean]
26
+ def lines_for_children?
27
+ child_docs.maximum_depth.negative? || child_docs.maximum_depth <= depth
28
+ end
29
+
30
+ # @return [String]
31
+ def link
32
+ "link:#{address}[#{title}]"
33
+ end
34
+
35
+ # @return [Array<String>]
36
+ def result
37
+ children.flat_map do |child|
38
+ r = [child.self_line]
39
+ r += child.result if lines_for_children?
40
+ r
41
+ end
42
+ end
43
+
44
+ # @return [Avm::EacAsciidoctorBase0::Instances::Build::Document]
45
+ def root_document
46
+ child_docs.document
47
+ end
48
+
49
+ # @return [String]
50
+ def self_line
51
+ "#{'*' * depth} #{link}"
52
+ end
53
+
54
+ # @return [String]
55
+ def title
56
+ document.source_document.title
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_asciidoctor_base0/instances/macros/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacAsciidoctorBase0
8
+ module Instances
9
+ module Macros
10
+ class ChildDocs < ::Avm::EacAsciidoctorBase0::Instances::Macros::Base
11
+ DEFAULT_MAXIMUM_DEPTH = -1
12
+
13
+ # @return [Array<String>]
14
+ def result
15
+ document_builder_class.new(self, document).result
16
+ end
17
+
18
+ # @return [Integer]
19
+ def maximum_depth
20
+ arguments[0].if_present(DEFAULT_MAXIMUM_DEPTH, &:to_i)
21
+ end
22
+
23
+ private
24
+
25
+ # @return [Class]
26
+ def document_builder_class
27
+ ::Avm::EacAsciidoctorBase0::Instances::Macros::ChildDocs::DocumentBuilder
28
+ end
29
+
30
+ require_sub __FILE__
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_asciidoctor_base0/instances/macros/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacAsciidoctorBase0
8
+ module Instances
9
+ module Macros
10
+ class DefaultBody < ::Avm::EacAsciidoctorBase0::Instances::Macros::Base
11
+ RESULT_LINES = ['== Índice', '', '//#child_docs'].freeze
12
+
13
+ # @return [Array<String>]
14
+ def result
15
+ RESULT_LINES
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacAsciidoctorBase0
7
+ module Instances
8
+ module Macros
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -8,9 +8,13 @@ module Avm
8
8
  module EacAsciidoctorBase0
9
9
  module Sources
10
10
  class Base < ::Avm::EacWebappBase0::Sources::Base
11
+ require_sub __FILE__
12
+
11
13
  CONTENT_DIRECTORY_SUBPATH = ::Pathname.new('content')
12
14
  CONTENT_DOCUMENT_BASENAME = ::Pathname.new('body.adoc')
13
- MAIN_FILE_SUBPATH = CONTENT_DIRECTORY_SUBPATH.join(CONTENT_DOCUMENT_BASENAME)
15
+ MAIN_FILE_SUBPATH = CONTENT_DIRECTORY_SUBPATH.join(
16
+ ::Avm::EacAsciidoctorBase0::Sources::Base::Document::TITLE_BASENAME
17
+ )
14
18
 
15
19
  require_sub __FILE__, include_modules: true
16
20
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacAsciidoctorBase0
5
- VERSION = '0.18.1'
5
+ VERSION = '0.19.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-eac_asciidoctor_base0
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.1
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-14 00:00:00.000000000 Z
11
+ date: 2023-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -135,12 +135,16 @@ files:
135
135
  - lib/avm/eac_asciidoctor_base0/instances/base.rb
136
136
  - lib/avm/eac_asciidoctor_base0/instances/build.rb
137
137
  - lib/avm/eac_asciidoctor_base0/instances/build/document.rb
138
- - lib/avm/eac_asciidoctor_base0/instances/build/document/breadcrumbs_macro_value.rb
139
- - lib/avm/eac_asciidoctor_base0/instances/build/document/child_docs_macro_value.rb
140
138
  - lib/avm/eac_asciidoctor_base0/instances/build/document/header_lines.rb
141
139
  - lib/avm/eac_asciidoctor_base0/instances/build/document/media.rb
142
140
  - lib/avm/eac_asciidoctor_base0/instances/build/document/pre_process_line.rb
143
141
  - lib/avm/eac_asciidoctor_base0/instances/deploy.rb
142
+ - lib/avm/eac_asciidoctor_base0/instances/macros.rb
143
+ - lib/avm/eac_asciidoctor_base0/instances/macros/base.rb
144
+ - lib/avm/eac_asciidoctor_base0/instances/macros/breadcrumbs.rb
145
+ - lib/avm/eac_asciidoctor_base0/instances/macros/child_docs.rb
146
+ - lib/avm/eac_asciidoctor_base0/instances/macros/child_docs/document_builder.rb
147
+ - lib/avm/eac_asciidoctor_base0/instances/macros/default_body.rb
144
148
  - lib/avm/eac_asciidoctor_base0/source_generators.rb
145
149
  - lib/avm/eac_asciidoctor_base0/source_generators/base.rb
146
150
  - lib/avm/eac_asciidoctor_base0/sources.rb
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module EacAsciidoctorBase0
7
- module Instances
8
- class Build
9
- class Document
10
- class BreadcrumbsMacroValue
11
- enable_method_class
12
- common_constructor :document
13
-
14
- NODE_SEPARATOR = ' » '
15
- ROOT_DOCUMENT_TITLE = 'Home'
16
-
17
- # @return [Array<String>]
18
- def result
19
- trail_nodes.join(NODE_SEPARATOR)
20
- end
21
-
22
- def trail_nodes
23
- r = []
24
- current = document
25
- while current.present?
26
- r.unshift(Node.new(document, current))
27
- current = current.parent_document
28
- end
29
- r
30
- end
31
-
32
- class Node
33
- common_constructor :current, :document
34
-
35
- # @return [String]
36
- def address
37
- current.href_to_other_body(document)
38
- end
39
-
40
- # @return [String]
41
- def title
42
- if document.parent_document.present?
43
- document.source_document.title
44
- else
45
- ROOT_DOCUMENT_TITLE
46
- end
47
- end
48
-
49
- # @return [String]
50
- def to_s
51
- "link:#{address}[#{title}]"
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module EacAsciidoctorBase0
7
- module Instances
8
- class Build
9
- class Document
10
- class ChildDocsMacroValue
11
- enable_method_class
12
- common_constructor :document
13
-
14
- # @return [Array<String>]
15
- def result
16
- document.children.map { |child_doc| ChildDocLine.new(document, child_doc) }.sort
17
- .map(&:result)
18
- end
19
-
20
- class ChildDocLine
21
- common_constructor :document, :child
22
- compare_by :title, :address
23
-
24
- # @return [Pathname]
25
- def address
26
- document.href_to_other_body(child)
27
- end
28
-
29
- # @return [String]
30
- def link
31
- "link:#{address}[#{title}]"
32
- end
33
-
34
- # @return [String]
35
- def result
36
- "* #{link}"
37
- end
38
-
39
- # @return [String]
40
- def title
41
- child.source_document.title
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end