eac_templates 0.5.1 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02c1db1cefd43c90ea04e40096c2bbe73a932827259cc1e249cd830dde64e949
4
- data.tar.gz: 3339fb93550f9bdb819b5c7278d5905fd9da0481096115cccaa8eca74f1a704c
3
+ metadata.gz: bc9aafcd773770ed687e7ba11baa553e5968e18c9f124f71a446430d387e18a5
4
+ data.tar.gz: '096625ceb82074fbf40278cb545602726e33848488b734fd4ff86ab199bc5637'
5
5
  SHA512:
6
- metadata.gz: eaadc382fd654d49eb8b5c8f9ce40a71f19f01a9181ddbac397cd378baa839706f46578e8428724e2a7b31471159476b8c2b9209cd7a07db81ad3304fd6d35b8
7
- data.tar.gz: 4f876c41e037302bcbc4759c442d3466cc9ba30a188a219a7414256bdddb22c7e2777f5b7cc4c005b5f8de2b7f3eefffe7b9b61d79f3a1d0b1b9b65e1b2890aa
6
+ metadata.gz: c42ec59495782f16ecba7f27a05a89fd096900baeb30745806bdb5262b8d5057d2100339cdf3f11ea7bd503a42567fef0bf489ba0a4e7dd25648b6da8d616512
7
+ data.tar.gz: 106e1e173c5adc5e448514009616f6760ae7053cc05e2c2aa44c35b3963dc14e28b1edbd3d2bf8cc124753337ab91808787b175fc89116fa852df967ee68e10e
@@ -23,12 +23,12 @@ module EacTemplates
23
23
  # @param subpath [Pathname]
24
24
  # @return [EacTemplates::Abstract::FsObject]
25
25
  def by_subpath(owner, parent_object, subpath, options = {})
26
- r = nil
27
- subpath.to_pathname.each_filename do |basename|
28
- r = new(owner, parent_object, basename, options)
26
+ r = new(owner, parent_object, nil, options)
27
+ subpath.if_present(::Pathname.new(''), &:to_pathname).each_filename do |basename|
29
28
  parent_object = r
29
+ r = new(owner, parent_object, basename, options)
30
30
  end
31
- r || raise("Subpath is empty: #{subpath}")
31
+ r
32
32
  end
33
33
  end
34
34
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/abstract/not_found_error'
4
+
5
+ module EacTemplates
6
+ module Abstract
7
+ module WithDirectoryFileMethods
8
+ def build_fs_object(type)
9
+ fs_object_class(type).by_subpath(self, nil, subpath, source_set: source_set)
10
+ end
11
+
12
+ # @param child_basename [Pathname
13
+ # @return [Pathname]
14
+ def child_subpath(child_basename)
15
+ subpath.if_present(child_basename) { |v| v.join(child_basename) }.to_pathname
16
+ end
17
+
18
+ # @return [EacTemplates::Abstract::Directory]
19
+ def directory
20
+ build_fs_object(:directory)
21
+ end
22
+
23
+ # @return [EacTemplates::Abstract::File]
24
+ def file
25
+ build_fs_object(:file)
26
+ end
27
+
28
+ # @param type [Symbol]
29
+ # @return [Class]
30
+ def fs_object_class(type)
31
+ self.class.const_get(type.to_s.camelize)
32
+ end
33
+
34
+ # @return [EacTemplates::Abstract::Directory, EacTemplates::Abstract::File]
35
+ def sub_fs_object
36
+ file_search = file
37
+ return file_search if file_search.found?
38
+
39
+ directory_search = directory
40
+ return directory_search if directory_search.found?
41
+
42
+ raise ::EacTemplates::Abstract::NotFoundError, "No template found: #{self}"
43
+ end
44
+ end
45
+ end
46
+ end
@@ -10,9 +10,7 @@ module EacTemplates
10
10
  delegate :found?, :path, to: :source_object
11
11
 
12
12
  # @return [Pathname]
13
- def path_for_search_prefix
14
- owner.path_for_search
15
- end
13
+ delegate :path_for_search, to: :owner
16
14
 
17
15
  private
18
16
 
@@ -2,11 +2,13 @@
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
+ require 'eac_templates/abstract/with_directory_file_methods'
6
6
 
7
7
  module EacTemplates
8
8
  module Modules
9
9
  class Ancestor
10
+ include ::EacTemplates::Abstract::WithDirectoryFileMethods
11
+
10
12
  class << self
11
13
  # @param a_module [Module]
12
14
  # @return [Pathname]
@@ -17,34 +19,18 @@ module EacTemplates
17
19
 
18
20
  common_constructor :base, :ancestor
19
21
  delegate :subpath, :source_set, to: :base
20
- delegate(*::EacTemplates::InterfaceMethods::ALL, to: :source_object)
21
-
22
- # @return [EacTemplates::Modules::Directory]
23
- def directory
24
- @directory ||= ::EacTemplates::Modules::Ancestor::Directory
25
- .new(self, nil, nil, source_set: source_set)
26
- end
22
+ delegate(*::EacTemplates::InterfaceMethods::ALL, to: :sub_fs_object)
27
23
 
28
- # @return [EacTemplates::Modules::File]
29
- def file
30
- @file ||= ::EacTemplates::Modules::Ancestor::File
31
- .new(self, nil, nil, source_set: source_set)
24
+ def ancestor_path_for_search
25
+ self.class.path_for_search(ancestor)
32
26
  end
33
27
 
34
28
  # @return [Pathname]
35
29
  def path_for_search
36
- r = self.class.path_for_search(ancestor)
30
+ r = ancestor_path_for_search
37
31
  subpath.if_present(r) { |v| r.join(v) }
38
32
  end
39
33
 
40
- # @return [EacTemplates::Modules::Ancestor::FsObject]
41
- def source_object
42
- return file if file.found?
43
- return directory if directory.found?
44
-
45
- raise ::EacTemplates::Abstract::NotFoundError, "No template found: #{path_for_search}"
46
- end
47
-
48
34
  require_sub __FILE__
49
35
  end
50
36
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/directory'
5
+ require 'eac_templates/interface_methods'
6
+ require 'eac_templates/modules/base/fs_object'
7
+
8
+ module EacTemplates
9
+ module Modules
10
+ class Base
11
+ class Directory < ::EacTemplates::Abstract::Directory
12
+ include ::EacTemplates::Modules::Base::FsObject
13
+ delegate(*(EacTemplates::InterfaceMethods::DIRECTORY - %i[children]), to: :self_ancestor)
14
+
15
+ # @param basename [Pathname]
16
+ # @return [EacTemplates::Abstract::FsObject]
17
+ delegate :child, to: :owner
18
+
19
+ # @return [Hash<Pathname, Symbol>]
20
+ def children_basenames
21
+ owner.ancestors.each_with_object({}) do |e, a|
22
+ ancestor_children_names(e, a)
23
+ end
24
+ end
25
+
26
+ # @return [Boolean]
27
+ def found?
28
+ children.any?
29
+ end
30
+
31
+ protected
32
+
33
+ # @param ancestor []
34
+ # @param result [Hash<Pathname, Symbol>]
35
+ # @return [void]
36
+ def ancestor_children_names(ancestor, result)
37
+ ancestor.directory.source_object.children_basenames.each do |path, type|
38
+ result[path] = type
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/abstract/file'
5
+ require 'eac_templates/interface_methods'
6
+ require 'eac_templates/modules/base/fs_object'
7
+
8
+ module EacTemplates
9
+ module Modules
10
+ class Base
11
+ class File < ::EacTemplates::Abstract::File
12
+ include ::EacTemplates::Modules::Base::FsObject
13
+ delegate(*EacTemplates::InterfaceMethods::FILE, to: :ancestor_found)
14
+
15
+ def found?
16
+ ancestor_found.present?
17
+ end
18
+
19
+ private
20
+
21
+ def ancestor_found_uncached
22
+ owner.ancestors.lazy.map(&:file).select(&:found?).first
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/interface_methods'
5
+
6
+ module EacTemplates
7
+ module Modules
8
+ class Base
9
+ module FsObject
10
+ def self_ancestor
11
+ owner.self_ancestor.send(type)
12
+ end
13
+
14
+ delegate :found?, to: :self_ancestor
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,23 +2,40 @@
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
4
  require 'eac_templates/interface_methods'
5
+ require 'eac_templates/abstract/with_directory_file_methods'
5
6
  require 'eac_templates/modules/ancestor'
6
7
  require 'eac_templates/sources/set'
7
8
 
8
9
  module EacTemplates
9
10
  module Modules
10
11
  class Base
12
+ include ::EacTemplates::Abstract::WithDirectoryFileMethods
11
13
  enable_listable
14
+ enable_simple_cache
12
15
  lists.add_symbol :option, :source_set, :subpath
13
16
  common_constructor :the_module, :options, default: [{}] do
14
17
  self.options = self.class.lists.option.hash_keys_validate!(options)
15
18
  end
16
- delegate(*::EacTemplates::InterfaceMethods::ALL, :path_for_search, :source_object,
17
- to: :self_ancestor)
19
+ delegate(*::EacTemplates::InterfaceMethods::ONLY_DIRECTORY, to: :directory)
20
+ delegate(*::EacTemplates::InterfaceMethods::ONLY_FILE, to: :file)
21
+ delegate(*::EacTemplates::InterfaceMethods::COMMON, :path_for_search, :source_object,
22
+ to: :sub_fs_object)
18
23
 
19
- # @return [EacTemplates::Modules::Ancestor]
20
- def self_ancestor
21
- @self_ancestor ||= ::EacTemplates::Modules::Ancestor.new(self, the_module)
24
+ # @param basename [Pathname]
25
+ # @return [EacTemplates::Abstract::FsObject]
26
+ def child(basename)
27
+ r = ::EacTemplates::Modules::Base.new(
28
+ the_module, subpath: child_subpath(basename), source_set: source_set
29
+ )
30
+ return r if r.found?
31
+
32
+ raise ::EacTemplates::Abstract::NotFoundError,
33
+ "No child for #{self} found with basename \"#{basename}\""
34
+ end
35
+
36
+ # @return [Boolean]
37
+ def found?
38
+ file.found? || directory.found?
22
39
  end
23
40
 
24
41
  # @return [EacTemplates::SourceSet]
@@ -30,6 +47,20 @@ module EacTemplates
30
47
  def subpath
31
48
  options[OPTION_SUBPATH].if_present(&:to_pathname)
32
49
  end
50
+
51
+ private
52
+
53
+ # @return [Enumerable<EacTemplates::Modules::Ancestor>]
54
+ def ancestors_uncached
55
+ the_module.ancestors.map { |a| ::EacTemplates::Modules::Ancestor.new(self, a) }
56
+ end
57
+
58
+ # @return [EacTemplates::Modules::Ancestor]
59
+ def self_ancestor_uncached
60
+ ancestors.find { |a| a.ancestor == the_module } || ibr
61
+ end
62
+
63
+ require_sub __FILE__
33
64
  end
34
65
  end
35
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTemplates
4
- VERSION = '0.5.1'
4
+ VERSION = '0.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.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: 2024-02-12 00:00:00.000000000 Z
11
+ date: 2024-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_config
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.14'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.14.1
22
+ version: 0.14.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,21 +29,21 @@ dependencies:
29
29
  version: '0.14'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.14.1
32
+ version: 0.14.2
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: eac_ruby_utils
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.121'
39
+ version: '0.122'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.121'
46
+ version: '0.122'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: eac_ruby_gem_support
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +70,7 @@ files:
70
70
  - lib/eac_templates/abstract/fs_object.rb
71
71
  - lib/eac_templates/abstract/fs_object_by_pathname.rb
72
72
  - lib/eac_templates/abstract/not_found_error.rb
73
+ - lib/eac_templates/abstract/with_directory_file_methods.rb
73
74
  - lib/eac_templates/core_ext.rb
74
75
  - lib/eac_templates/interface_methods.rb
75
76
  - lib/eac_templates/modules.rb
@@ -78,6 +79,9 @@ files:
78
79
  - lib/eac_templates/modules/ancestor/file.rb
79
80
  - lib/eac_templates/modules/ancestor/fs_object.rb
80
81
  - lib/eac_templates/modules/base.rb
82
+ - lib/eac_templates/modules/base/directory.rb
83
+ - lib/eac_templates/modules/base/file.rb
84
+ - lib/eac_templates/modules/base/fs_object.rb
81
85
  - lib/eac_templates/patches.rb
82
86
  - lib/eac_templates/patches/module.rb
83
87
  - lib/eac_templates/patches/module/erb_template.rb