eac_tools 0.60.3 → 0.61.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +13 -13
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document/header_lines.rb +1 -1
  5. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document/pre_process_line.rb +16 -4
  6. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document.rb +23 -1
  7. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros/base.rb +21 -0
  8. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros/breadcrumbs.rb +55 -0
  9. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros/child_docs/document_builder.rb +63 -0
  10. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros/child_docs.rb +35 -0
  11. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros/default_body.rb +21 -0
  12. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/macros.rb +13 -0
  13. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/sources/base.rb +5 -1
  14. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/version.rb +1 -1
  15. data/sub/avm-files/avm-files.gemspec +1 -1
  16. data/sub/avm-files/lib/avm/files/version.rb +1 -1
  17. data/sub/avm-git/avm-git.gemspec +2 -2
  18. data/sub/avm-git/lib/avm/git/version.rb +1 -1
  19. data/sub/eac_templates/lib/eac_templates/abstract/directory.rb +42 -0
  20. data/sub/eac_templates/lib/eac_templates/abstract/file.rb +25 -0
  21. data/sub/eac_templates/lib/eac_templates/abstract/fs_object.rb +94 -0
  22. data/sub/eac_templates/lib/eac_templates/abstract/fs_object_by_pathname.rb +13 -0
  23. data/sub/eac_templates/lib/eac_templates/abstract/not_found_error.rb +8 -0
  24. data/sub/eac_templates/lib/eac_templates/interface_methods.rb +3 -3
  25. data/sub/eac_templates/lib/eac_templates/modules/ancestor/directory.rb +4 -2
  26. data/sub/eac_templates/lib/eac_templates/modules/ancestor/file.rb +3 -2
  27. data/sub/eac_templates/lib/eac_templates/modules/ancestor/fs_object.rb +6 -13
  28. data/sub/eac_templates/lib/eac_templates/modules/ancestor.rb +6 -3
  29. data/sub/eac_templates/lib/eac_templates/sources/directory.rb +23 -10
  30. data/sub/eac_templates/lib/eac_templates/sources/file.rb +3 -14
  31. data/sub/eac_templates/lib/eac_templates/sources/fs_object.rb +17 -17
  32. data/sub/eac_templates/lib/eac_templates/sources/set.rb +5 -4
  33. data/sub/eac_templates/lib/eac_templates/variables/content.rb +52 -0
  34. data/sub/eac_templates/lib/eac_templates/variables/directory.rb +7 -5
  35. data/sub/eac_templates/lib/eac_templates/variables/file.rb +9 -33
  36. data/sub/eac_templates/lib/eac_templates/version.rb +1 -1
  37. data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec.rb → modules/base_spec.rb} +41 -20
  38. data/sub/eac_templates/spec/lib/eac_templates/modules/base_spec_files/path2/a_module/a/a_b +1 -0
  39. data/sub/eac_templates/spec/lib/eac_templates/modules/base_spec_files/path2/a_module/c +1 -0
  40. data/sub/eac_templates/spec/lib/eac_templates/modules/base_spec_files/path2/prepended_module/c +1 -0
  41. data/sub/eac_templates/spec/lib/eac_templates/modules/base_spec_files/path2/super_class/a/a_b +1 -0
  42. data/sub/eac_templates/spec/lib/eac_templates/variables/{file_spec.rb → content_spec.rb} +4 -4
  43. metadata +33 -28
  44. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document/breadcrumbs_macro_value.rb +0 -59
  45. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document/child_docs_macro_value.rb +0 -49
  46. data/sub/eac_templates/spec/lib/eac_templates/patches/module/template_spec_files/path2/a_module/a/a_b +0 -1
  47. data/sub/eac_templates/spec/lib/eac_templates/patches/module/template_spec_files/path2/a_module/c +0 -1
  48. data/sub/eac_templates/spec/lib/eac_templates/patches/module/template_spec_files/path2/super_class/a/a_b +0 -1
  49. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path1/a_module/a/a_a +0 -0
  50. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path1/a_module/b +0 -0
  51. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path1/super_class/a/a_b +0 -0
  52. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path1/super_class/b +0 -0
  53. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path2/a_module/b +0 -0
  54. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path2/sub_class/b +0 -0
  55. /data/sub/eac_templates/spec/lib/eac_templates/{patches/module/template_spec_files → modules/base_spec_files}/path2/super_class/b +0 -0
  56. /data/sub/eac_templates/spec/lib/eac_templates/variables/{file_spec_files → content_spec_files}/expected_content +0 -0
  57. /data/sub/eac_templates/spec/lib/eac_templates/variables/{file_spec_files → content_spec_files}/source.template +0 -0
@@ -2,10 +2,10 @@
2
2
 
3
3
  module EacTemplates
4
4
  module InterfaceMethods
5
- COMMON = %w[apply path].freeze
6
- ONLY_DIRECTORY = %w[child children].freeze
5
+ COMMON = %i[apply path].freeze
6
+ ONLY_DIRECTORY = %i[child children].freeze
7
7
  DIRECTORY = COMMON + ONLY_DIRECTORY
8
- ONLY_FILE = %w[apply_to_file content variables].freeze
8
+ ONLY_FILE = %i[apply_to_file content variables].freeze
9
9
  FILE = COMMON + ONLY_FILE
10
10
  ALL = COMMON + ONLY_DIRECTORY + ONLY_FILE
11
11
  end
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/directory'
4
5
  require 'eac_templates/interface_methods'
5
6
  require 'eac_templates/modules/ancestor/fs_object'
6
7
 
7
8
  module EacTemplates
8
9
  module Modules
9
10
  class Ancestor
10
- class Directory < ::EacTemplates::Modules::Ancestor::FsObject
11
- delegate(*::EacTemplates::InterfaceMethods::ONLY_DIRECTORY, to: :source_object)
11
+ class Directory < ::EacTemplates::Abstract::Directory
12
+ include ::EacTemplates::Modules::Ancestor::FsObject
13
+ delegate :children_basenames, to: :source_object
12
14
  end
13
15
  end
14
16
  end
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/file'
4
5
  require 'eac_templates/interface_methods'
5
6
  require 'eac_templates/modules/ancestor/fs_object'
6
7
 
7
8
  module EacTemplates
8
9
  module Modules
9
10
  class Ancestor
10
- class File < ::EacTemplates::Modules::Ancestor::FsObject
11
- delegate(*::EacTemplates::InterfaceMethods::ONLY_FILE, to: :source_object)
11
+ class File < ::EacTemplates::Abstract::File
12
+ include ::EacTemplates::Modules::Ancestor::FsObject
12
13
  end
13
14
  end
14
15
  end
@@ -6,25 +6,18 @@ require 'eac_templates/interface_methods'
6
6
  module EacTemplates
7
7
  module Modules
8
8
  class Ancestor
9
- class FsObject
10
- enable_simple_cache
11
- common_constructor :base
12
- delegate(*::EacTemplates::InterfaceMethods::COMMON, :found?, to: :source_object)
9
+ module FsObject
10
+ delegate :found?, :path, to: :source_object
13
11
 
14
- # @return [Symbol]
15
- def object_type
16
- self.class.name.demodulize.underscore.to_sym
17
- end
18
-
19
- # @return [Pathname, nil]
20
- def path
21
- source_object.found? ? source_object.send(:real_paths).first : nil
12
+ # @return [Pathname]
13
+ def path_for_search_prefix
14
+ owner.path_for_search
22
15
  end
23
16
 
24
17
  private
25
18
 
26
19
  def source_object_uncached
27
- base.source_set.send(object_type, base.path_for_search)
20
+ owner.source_set.send(type, path_for_search)
28
21
  end
29
22
  end
30
23
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
4
  require 'eac_templates/interface_methods'
5
+ require 'eac_templates/abstract/not_found_error'
5
6
 
6
7
  module EacTemplates
7
8
  module Modules
@@ -20,12 +21,14 @@ module EacTemplates
20
21
 
21
22
  # @return [EacTemplates::Modules::Directory]
22
23
  def directory
23
- ::EacTemplates::Modules::Ancestor::Directory.new(self)
24
+ @directory ||= ::EacTemplates::Modules::Ancestor::Directory
25
+ .new(self, nil, nil, source_set: source_set)
24
26
  end
25
27
 
26
28
  # @return [EacTemplates::Modules::File]
27
29
  def file
28
- @file ||= ::EacTemplates::Modules::Ancestor::File.new(self)
30
+ @file ||= ::EacTemplates::Modules::Ancestor::File
31
+ .new(self, nil, nil, source_set: source_set)
29
32
  end
30
33
 
31
34
  # @return [Pathname]
@@ -39,7 +42,7 @@ module EacTemplates
39
42
  return file if file.found?
40
43
  return directory if directory.found?
41
44
 
42
- raise "No template found: #{path_for_search}"
45
+ raise ::EacTemplates::Abstract::NotFoundError, "No template found: #{path_for_search}"
43
46
  end
44
47
 
45
48
  require_sub __FILE__
@@ -1,23 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/directory'
4
5
  require 'eac_templates/sources/fs_object'
5
- require 'eac_templates/variables/directory'
6
6
 
7
7
  module EacTemplates
8
8
  module Sources
9
- class Directory < ::EacTemplates::Sources::FsObject
10
- delegate :apply, :child, :children, :path, to: :applier
9
+ class Directory < ::EacTemplates::Abstract::Directory
10
+ include ::EacTemplates::Sources::FsObject
11
11
 
12
- # @return [Class]
13
- def applier_class
14
- ::EacTemplates::Variables::Directory
12
+ # @return [Hash<Pathname, Symbol>]
13
+ def children_basenames
14
+ r = {}
15
+ real_paths.each do |real_path|
16
+ real_path.children.each do |child|
17
+ next if r.key?(child.basename)
18
+
19
+ r[child.basename] = real_path_type(child)
20
+ end
21
+ end
22
+ r
15
23
  end
16
24
 
17
- # @param path [Pathname]
18
- # @return [Boolean]
19
- def select_path?(path)
20
- super && path.directory?
25
+ # @return [Pathname]
26
+ def real_path_type(path)
27
+ if path.file?
28
+ :file
29
+ elsif path.directory?
30
+ :directory
31
+ else
32
+ raise "Path \"#{path}\" is not a file nor a directory"
33
+ end
21
34
  end
22
35
  end
23
36
  end
@@ -1,24 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/file'
4
5
  require 'eac_templates/sources/fs_object'
5
- require 'eac_templates/variables/file'
6
6
 
7
7
  module EacTemplates
8
8
  module Sources
9
- class File < ::EacTemplates::Sources::FsObject
10
- delegate :apply, :apply_to_file, :content, :path, :variables, to: :applier
11
-
12
- # @return [Class]
13
- def applier_class
14
- ::EacTemplates::Variables::File
15
- end
16
-
17
- # @param path [Pathname]
18
- # @return [Boolean]
19
- def select_path?(path)
20
- super && path.file?
21
- end
9
+ class File < ::EacTemplates::Abstract::File
10
+ include ::EacTemplates::Sources::FsObject
22
11
  end
23
12
  end
24
13
  end
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/not_found_error'
4
5
 
5
6
  module EacTemplates
6
7
  module Sources
7
- class FsObject
8
- enable_abstract_methods
9
- enable_simple_cache
10
- common_constructor :source_set, :subpath do
11
- self.subpath = subpath.to_pathname
8
+ module FsObject
9
+ PATH_FOR_SEARCH_PREFIX = ::Pathname.new('')
10
+
11
+ common_concern do
12
+ enable_abstract_methods
13
+ enable_simple_cache
12
14
  end
13
15
 
14
16
  # @return [Boolean]
@@ -16,20 +18,18 @@ module EacTemplates
16
18
  real_paths.any?
17
19
  end
18
20
 
19
- protected
20
-
21
- # @return [Class]
22
- def applier_class
23
- raise_abstract_method __method__
21
+ # @return [Pathname]
22
+ def path
23
+ real_paths.first
24
24
  end
25
25
 
26
- # @return [EacTemplates::Variables::SourceFile]
27
- def applier_uncached
28
- raise "No #{self.class.name.downcase} found for \"#{subpath}\"" unless found?
29
-
30
- applier_class.new(real_paths.first)
26
+ # @return [Pathname]
27
+ def path_for_search_prefix
28
+ PATH_FOR_SEARCH_PREFIX
31
29
  end
32
30
 
31
+ protected
32
+
33
33
  # @return [Array<Pathname>]
34
34
  def real_paths_uncached
35
35
  source_set.included_paths.lazy.map { |source_single| source_single_search(source_single) }
@@ -39,13 +39,13 @@ module EacTemplates
39
39
  # @param path [Pathname]
40
40
  # @return [Boolean]
41
41
  def select_path?(path)
42
- path.present?
42
+ path.present? && path.send("#{type}?")
43
43
  end
44
44
 
45
45
  # @param source_single [EacTemplates::Sources::Single]
46
46
  # @return [Pathname, nil]
47
47
  def source_single_search(source_single)
48
- r = source_single.search(subpath)
48
+ r = source_single.search(path_for_search)
49
49
  select_path?(r) ? r : nil
50
50
  end
51
51
  end
@@ -4,6 +4,7 @@ require 'active_support/core_ext/object/blank'
4
4
  require 'eac_templates/sources/directory'
5
5
  require 'eac_templates/sources/file'
6
6
  require 'eac_templates/sources/internal_set'
7
+ require 'eac_templates/abstract/not_found_error'
7
8
 
8
9
  module EacTemplates
9
10
  module Sources
@@ -17,13 +18,13 @@ module EacTemplates
17
18
  # @param subpath [Pathname]
18
19
  # @return [EacTemplates::Sources::Directory]
19
20
  def directory(subpath)
20
- ::EacTemplates::Sources::Directory.new(self, subpath)
21
+ ::EacTemplates::Sources::Directory.by_subpath(self, nil, subpath, source_set: self)
21
22
  end
22
23
 
23
24
  # @param subpath [Pathname]
24
25
  # @return [EacTemplates::Sources::Directory]
25
26
  def file(subpath)
26
- ::EacTemplates::Sources::File.new(self, subpath)
27
+ ::EacTemplates::Sources::File.by_subpath(self, nil, subpath, source_set: self)
27
28
  end
28
29
 
29
30
  def template(subpath, required = true)
@@ -46,8 +47,8 @@ module EacTemplates
46
47
  private
47
48
 
48
49
  def raise_template_not_found(subpath)
49
- raise "Template not found for subpath \"#{subpath}\"" \
50
- " (Included paths: #{included_paths.to_a.join(::File::PATH_SEPARATOR)})"
50
+ raise ::EacTemplates::Abstract::NotFoundError, 'Template not found for subpath ' \
51
+ "\"#{subpath}\" (Included paths: #{included_paths.to_a.join(::File::PATH_SEPARATOR)})"
51
52
  end
52
53
  end
53
54
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/variables/providers'
5
+
6
+ module EacTemplates
7
+ module Variables
8
+ class Content
9
+ VARIABLE_DELIMITER = ::Regexp.quote('%%')
10
+ VARIABLE_PATTERN = /#{VARIABLE_DELIMITER}([a-z0-9\._]*)#{VARIABLE_DELIMITER}/i.freeze
11
+
12
+ class << self
13
+ # @param path [Pathname]
14
+ # @return [EacTemplates::Variables::Content]
15
+ def from_file(path)
16
+ new(path.to_pathname.read)
17
+ end
18
+ end
19
+
20
+ enable_simple_cache
21
+ common_constructor :content
22
+
23
+ # +variables_provider+ A [Hash] or object which responds to +read_entry(entry_name)+.
24
+ def apply(variables_source)
25
+ variables_provider = ::EacTemplates::Variables::Providers.build(variables_source)
26
+ variables.inject(content) do |a, e|
27
+ a.gsub(variable_pattern(e), variables_provider.variable_value(e).to_s)
28
+ end
29
+ end
30
+
31
+ def apply_to_file(variables_source, output_file_path)
32
+ output_file_path.to_pathname.write(apply(variables_source))
33
+ end
34
+
35
+ private
36
+
37
+ def variables_uncached
38
+ content.scan(VARIABLE_PATTERN).map(&:first).map do |name|
39
+ sanitize_variable_name(name)
40
+ end.to_set
41
+ end
42
+
43
+ def sanitize_variable_name(variable_name)
44
+ variable_name.to_s.downcase
45
+ end
46
+
47
+ def variable_pattern(name)
48
+ /#{VARIABLE_DELIMITER}#{::Regexp.quote(name)}#{VARIABLE_DELIMITER}/i
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_templates/abstract/not_found_error'
4
+ require 'eac_templates/abstract/directory'
3
5
  require 'eac_templates/variables/file'
4
6
  require 'eac_templates/variables/fs_object'
5
7
 
6
8
  module EacTemplates
7
9
  module Variables
8
10
  class Directory
9
- attr_reader :path
10
-
11
- def initialize(path)
12
- @path = path.is_a?(::Pathname) ? path : ::Pathname.new(path.to_s)
11
+ common_constructor :abstract_directory do
12
+ self.abstract_directory = ::EacTemplates::Abstract::Directory.assert(abstract_directory)
13
13
  end
14
+ delegate :path, to: :abstract_directory
14
15
 
15
16
  def apply(variables_source, directory)
16
17
  ::EacTemplates::Variables::FsObject.new(self, '.', directory, variables_source).apply
@@ -21,7 +22,8 @@ module EacTemplates
21
22
  return ::EacTemplates::Variables::File.new(child_path) if ::File.file?(child_path)
22
23
  return ::EacTemplates::Variables::Directory.new(child_path) if ::File.directory?(child_path)
23
24
 
24
- raise "Child \"#{subpath}\" from \"#{path}\" not found"
25
+ raise ::EacTemplates::Abstract::NotFoundError,
26
+ "Child \"#{subpath}\" from \"#{path}\" not found"
25
27
  end
26
28
 
27
29
  def children
@@ -1,49 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/file'
5
+ require 'eac_templates/variables/content'
4
6
  require 'eac_templates/variables/providers'
5
7
 
6
8
  module EacTemplates
7
9
  module Variables
8
10
  class File
9
- VARIABLE_DELIMITER = ::Regexp.quote('%%')
10
- VARIABLE_PATTERN = /#{VARIABLE_DELIMITER}([a-z0-9\._]*)#{VARIABLE_DELIMITER}/i.freeze
11
-
12
11
  enable_simple_cache
13
- common_constructor :path do
14
- self.path = path.to_pathname
15
- end
16
-
17
- # +variables_provider+ A [Hash] or object which responds to +read_entry(entry_name)+.
18
- def apply(variables_source)
19
- variables_provider = ::EacTemplates::Variables::Providers.build(variables_source)
20
- variables.inject(content) do |a, e|
21
- a.gsub(variable_pattern(e), variables_provider.variable_value(e).to_s)
22
- end
23
- end
24
-
25
- def apply_to_file(variables_source, output_file_path)
26
- output_file_path.to_pathname.write(apply(variables_source))
12
+ common_constructor :abstract_file do
13
+ self.abstract_file = ::EacTemplates::Abstract::File.assert(abstract_file)
27
14
  end
15
+ delegate :path, to: :abstract_file
16
+ delegate :apply, :apply_to_file, :content, :variables, to: :content_applier
28
17
 
29
18
  private
30
19
 
31
- def variables_uncached
32
- content.scan(VARIABLE_PATTERN).map(&:first).map do |name|
33
- sanitize_variable_name(name)
34
- end.to_set
35
- end
36
-
37
- def content_uncached
38
- path.read
39
- end
40
-
41
- def sanitize_variable_name(variable_name)
42
- variable_name.to_s.downcase
43
- end
44
-
45
- def variable_pattern(name)
46
- /#{VARIABLE_DELIMITER}#{::Regexp.quote(name)}#{VARIABLE_DELIMITER}/i
20
+ # @return [EacTemplates::Variables::Content]
21
+ def content_applier_uncached
22
+ ::EacTemplates::Variables::Content.from_file(path)
47
23
  end
48
24
  end
49
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTemplates
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_templates/patches/module/template'
3
+ require 'eac_templates/modules/base'
4
+ require 'eac_templates/abstract/not_found_error'
4
5
  require 'eac_templates/sources/set'
5
6
 
6
- RSpec.describe ::Module do
7
+ RSpec.describe ::EacTemplates::Modules::Base do
7
8
  def self.on_node_specs(node_name, &block)
8
9
  context "when object is \"#{node_name}\"" do # rubocop:disable RSpec/EmptyExampleGroup
9
10
  let(:node) { send(node_name) }
@@ -40,13 +41,13 @@ RSpec.describe ::Module do
40
41
  def self.file_specs_error(node_name)
41
42
  on_node_specs(node_name) do
42
43
  it do
43
- expect { node }.to raise_error(::RuntimeError)
44
+ expect { node }.to raise_error(::EacTemplates::Abstract::NotFoundError)
44
45
  end
45
46
  end
46
47
  end
47
48
 
48
49
  let(:a_module) do
49
- described_class.new do
50
+ ::Module.new do
50
51
  def self.name
51
52
  'AModule'
52
53
  end
@@ -61,43 +62,52 @@ RSpec.describe ::Module do
61
62
  r.include a_module
62
63
  r
63
64
  end
65
+ let(:prepended_module) do
66
+ ::Module.new do
67
+ def self.name
68
+ 'PrependedModule'
69
+ end
70
+ end
71
+ end
64
72
  let(:sub_class) do
65
73
  r = ::Class.new(super_class) do
66
74
  def self.name
67
75
  'SuperClass'
68
76
  end
69
77
  end
78
+ r.prepend(prepended_module)
70
79
  r
71
80
  end
72
- let(:files_dir) { __dir__.to_pathname.join('template_spec_files') }
81
+ let(:files_dir) { __dir__.to_pathname.join('base_spec_files') }
73
82
  let(:variables_source) { { vx: '_X_', vy: '_Y_' } }
83
+ let(:source_set) do
84
+ r = ::EacTemplates::Sources::Set.new
85
+ %w[path1 path2].each do |sub|
86
+ r.included_paths << files_dir.join(sub)
87
+ end
88
+ r
89
+ end
74
90
 
75
- let(:a) { instance.template.child('a') }
91
+ let(:a) { instance.child('a') }
76
92
  let(:a_a) { a.child('a_a') }
77
93
  let(:a_b) { a.child('a_b') }
78
94
  let(:a_c) { a.child('a_c') }
79
- let(:b) { instance.template.child('b') }
80
- let(:c) { instance.template.child('c') }
81
-
82
- before do
83
- %w[path1 path2].each do |sub|
84
- ::EacTemplates::Sources::Set.default.included_paths << files_dir.join(sub)
85
- end
86
- end
95
+ let(:b) { instance.child('b') }
96
+ let(:c) { instance.child('c') }
87
97
 
88
98
  context 'when module is AModule' do # rubocop:disable RSpec/EmptyExampleGroup
89
- let(:instance) { a_module }
99
+ let(:instance) { described_class.new(a_module, source_set: source_set) }
90
100
 
91
- dir_specs(:a, %w[a_a])
101
+ dir_specs(:a, %w[a_a a_b])
92
102
  file_specs_ok(:a_a, "A_MODULE_A_A\n", "A_MODULE_A_A\n", [])
93
- file_specs_error(:a_b)
103
+ file_specs_ok(:a_b, "A_MODULE_A_B\n", "A_MODULE_A_B\n", [])
94
104
  file_specs_error(:a_c)
95
105
  file_specs_ok(:b, "A_MODULE_B%%vy%%\n", "A_MODULE_B_Y_\n", %w[vy])
96
- file_specs_error(:c)
106
+ file_specs_ok(:c, "A_MODULE_C%%vx%%\n", "A_MODULE_C_X_\n", %w[vx])
97
107
  end
98
108
 
99
109
  context 'when module is SuperClass' do # rubocop:disable RSpec/EmptyExampleGroup
100
- let(:instance) { super_class }
110
+ let(:instance) { described_class.new(super_class, source_set: source_set) }
101
111
 
102
112
  dir_specs(:a, %w[a_b])
103
113
  file_specs_error(:a_a)
@@ -108,7 +118,7 @@ RSpec.describe ::Module do
108
118
  end
109
119
 
110
120
  context 'when module is SubClass' do # rubocop:disable RSpec/EmptyExampleGroup
111
- let(:instance) { sub_class }
121
+ let(:instance) { described_class.new(sub_class, source_set: source_set) }
112
122
 
113
123
  dir_specs(:a, %w[a_b])
114
124
  file_specs_error(:a_a)
@@ -117,4 +127,15 @@ RSpec.describe ::Module do
117
127
  file_specs_ok(:b, "SUPER_CLASS_B\n", "SUPER_CLASS_B\n", [])
118
128
  file_specs_error(:c)
119
129
  end
130
+
131
+ context 'when module is PrependedModule' do # rubocop:disable RSpec/EmptyExampleGroup
132
+ let(:instance) { described_class.new(prepended_module, source_set: source_set) }
133
+
134
+ file_specs_error(:a)
135
+ file_specs_error(:a_a)
136
+ file_specs_error(:a_b)
137
+ file_specs_error(:a_c)
138
+ file_specs_error(:b)
139
+ file_specs_ok(:c, "PREPENDED_MODULE_C%%vy%%%%vx%%\n", "PREPENDED_MODULE_C_Y__X_\n", %w[vy vx])
140
+ end
120
141
  end
@@ -3,10 +3,10 @@
3
3
  require 'eac_config/old_configs'
4
4
  require 'eac_templates/variables/file'
5
5
 
6
- RSpec.describe ::EacTemplates::Variables::File do
7
- let(:files_dir) { ::File.join(__dir__, 'file_spec_files') }
8
- let(:source_path) { ::File.join(files_dir, 'source.template') }
9
- let(:instance) { described_class.new(source_path) }
6
+ RSpec.describe ::EacTemplates::Variables::Content do
7
+ let(:files_dir) { ::File.join(__dir__, 'content_spec_files').to_pathname }
8
+ let(:source_path) { files_dir.join('source.template') }
9
+ let(:instance) { described_class.from_file(source_path) }
10
10
  let(:expected_content) { ::File.read(::File.join(files_dir, 'expected_content')) }
11
11
 
12
12
  describe '#apply' do