eac_templates 0.3.2 → 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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_templates/core_ext.rb +1 -1
  3. data/lib/eac_templates/interface_methods.rb +12 -0
  4. data/lib/eac_templates/modules/ancestor/directory.rb +15 -0
  5. data/lib/eac_templates/modules/ancestor/file.rb +15 -0
  6. data/lib/eac_templates/modules/ancestor/fs_object.rb +32 -0
  7. data/lib/eac_templates/modules/ancestor.rb +48 -0
  8. data/lib/eac_templates/modules/base.rb +35 -0
  9. data/lib/eac_templates/modules.rb +9 -0
  10. data/lib/eac_templates/patches/module/template.rb +2 -3
  11. data/lib/eac_templates/sources/directory.rb +24 -0
  12. data/lib/eac_templates/sources/file.rb +24 -0
  13. data/lib/eac_templates/sources/from_all_gems.rb +4 -0
  14. data/lib/eac_templates/sources/from_gem.rb +37 -0
  15. data/lib/eac_templates/sources/fs_object.rb +53 -0
  16. data/lib/eac_templates/sources/internal_set.rb +22 -0
  17. data/lib/eac_templates/sources/set.rb +54 -0
  18. data/lib/eac_templates/sources/single.rb +29 -0
  19. data/lib/eac_templates/sources.rb +9 -0
  20. data/lib/eac_templates/variables/directory.rb +47 -0
  21. data/lib/eac_templates/variables/file.rb +50 -0
  22. data/lib/eac_templates/variables/fs_object.rb +65 -0
  23. data/lib/eac_templates/variables/not_found_error.rb +7 -0
  24. data/lib/eac_templates/variables/providers/base.rb +23 -0
  25. data/lib/eac_templates/variables/providers/config_reader.rb +29 -0
  26. data/lib/eac_templates/variables/providers/entries_reader.rb +25 -0
  27. data/lib/eac_templates/variables/providers/generic.rb +25 -0
  28. data/lib/eac_templates/variables/providers/hash.rb +29 -0
  29. data/lib/eac_templates/variables/providers.rb +25 -0
  30. data/lib/eac_templates/variables.rb +9 -0
  31. data/lib/eac_templates/version.rb +1 -1
  32. metadata +33 -30
  33. data/lib/eac_templates/directory.rb +0 -108
  34. data/lib/eac_templates/file.rb +0 -48
  35. data/lib/eac_templates/from_all_gems.rb +0 -4
  36. data/lib/eac_templates/from_gem.rb +0 -35
  37. data/lib/eac_templates/searcher.rb +0 -53
  38. data/lib/eac_templates/variable_not_found_error.rb +0 -5
  39. data/lib/eac_templates/variable_providers/base.rb +0 -21
  40. data/lib/eac_templates/variable_providers/config_reader.rb +0 -27
  41. data/lib/eac_templates/variable_providers/entries_reader.rb +0 -23
  42. data/lib/eac_templates/variable_providers/generic.rb +0 -23
  43. data/lib/eac_templates/variable_providers/hash.rb +0 -27
  44. data/lib/eac_templates/variable_providers.rb +0 -23
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_config/node'
4
+ require 'eac_templates/variables/providers/base'
5
+
6
+ module EacTemplates
7
+ module Variables
8
+ module Providers
9
+ class ConfigReader < ::EacTemplates::Variables::Providers::Base
10
+ class << self
11
+ def accept?(variables_source)
12
+ return false unless variables_source.respond_to?(:entry)
13
+
14
+ entry = variables_source.entry(:any_value)
15
+ entry.respond_to?(:value) && entry.respond_to?(:found?)
16
+ end
17
+ end
18
+
19
+ def variable_exist?(name)
20
+ source.entry(name).found?
21
+ end
22
+
23
+ def variable_fetch(name)
24
+ source.entry(name).value
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/variables/providers/base'
4
+
5
+ module EacTemplates
6
+ module Variables
7
+ module Providers
8
+ class EntriesReader < ::EacTemplates::Variables::Providers::Base
9
+ class << self
10
+ def accept?(variables_source)
11
+ variables_source.respond_to?(:read_entry)
12
+ end
13
+ end
14
+
15
+ def variable_exist?(_name)
16
+ true
17
+ end
18
+
19
+ def variable_fetch(name)
20
+ source.read_entry(name)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/variables/providers/base'
4
+
5
+ module EacTemplates
6
+ module Variables
7
+ module Providers
8
+ class Generic < ::EacTemplates::Variables::Providers::Base
9
+ class << self
10
+ def accept?(variables_source)
11
+ variables_source.is_a?(::Object)
12
+ end
13
+ end
14
+
15
+ def variable_exist?(name)
16
+ source.respond_to?(name)
17
+ end
18
+
19
+ def variable_fetch(name)
20
+ source.send(name)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/variables/providers/base'
4
+
5
+ module EacTemplates
6
+ module Variables
7
+ module Providers
8
+ class Hash < ::EacTemplates::Variables::Providers::Base
9
+ class << self
10
+ def accept?(variables_source)
11
+ variables_source.is_a?(::Hash)
12
+ end
13
+ end
14
+
15
+ def initialize(source)
16
+ super(source.with_indifferent_access)
17
+ end
18
+
19
+ def variable_exist?(name)
20
+ source.key?(name)
21
+ end
22
+
23
+ def variable_fetch(name)
24
+ source.fetch(name)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacTemplates
6
+ module Variables
7
+ module Providers
8
+ require_sub __FILE__
9
+
10
+ PROVIDERS = %w[config_reader entries_reader hash generic].map do |name|
11
+ "eac_templates/variables/providers/#{name}".camelize.constantize
12
+ end
13
+
14
+ class << self
15
+ def build(variables_source)
16
+ PROVIDERS.each do |provider|
17
+ return provider.new(variables_source) if provider.accept?(variables_source)
18
+ end
19
+
20
+ raise "Variables provider not found for #{variables_source}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacTemplates
6
+ module Variables
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTemplates
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4.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.3.2
4
+ version: 0.4.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: 2022-09-04 00:00:00.000000000 Z
11
+ date: 2023-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_config
@@ -16,40 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.11'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.11.1
19
+ version: '0.12'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.11'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.11.1
26
+ version: '0.12'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: eac_ruby_utils
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '0.102'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 0.102.1
33
+ version: '0.112'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
38
  - - "~>"
48
39
  - !ruby/object:Gem::Version
49
- version: '0.102'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 0.102.1
40
+ version: '0.112'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: eac_ruby_gem_support
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,10 +60,13 @@ extra_rdoc_files: []
72
60
  files:
73
61
  - lib/eac_templates.rb
74
62
  - lib/eac_templates/core_ext.rb
75
- - lib/eac_templates/directory.rb
76
- - lib/eac_templates/file.rb
77
- - lib/eac_templates/from_all_gems.rb
78
- - lib/eac_templates/from_gem.rb
63
+ - lib/eac_templates/interface_methods.rb
64
+ - lib/eac_templates/modules.rb
65
+ - lib/eac_templates/modules/ancestor.rb
66
+ - lib/eac_templates/modules/ancestor/directory.rb
67
+ - lib/eac_templates/modules/ancestor/file.rb
68
+ - lib/eac_templates/modules/ancestor/fs_object.rb
69
+ - lib/eac_templates/modules/base.rb
79
70
  - lib/eac_templates/patches.rb
80
71
  - lib/eac_templates/patches/module.rb
81
72
  - lib/eac_templates/patches/module/erb_template.rb
@@ -83,14 +74,26 @@ files:
83
74
  - lib/eac_templates/patches/object.rb
84
75
  - lib/eac_templates/patches/object/erb_template.rb
85
76
  - lib/eac_templates/patches/object/template.rb
86
- - lib/eac_templates/searcher.rb
87
- - lib/eac_templates/variable_not_found_error.rb
88
- - lib/eac_templates/variable_providers.rb
89
- - lib/eac_templates/variable_providers/base.rb
90
- - lib/eac_templates/variable_providers/config_reader.rb
91
- - lib/eac_templates/variable_providers/entries_reader.rb
92
- - lib/eac_templates/variable_providers/generic.rb
93
- - lib/eac_templates/variable_providers/hash.rb
77
+ - lib/eac_templates/sources.rb
78
+ - lib/eac_templates/sources/directory.rb
79
+ - lib/eac_templates/sources/file.rb
80
+ - lib/eac_templates/sources/from_all_gems.rb
81
+ - lib/eac_templates/sources/from_gem.rb
82
+ - lib/eac_templates/sources/fs_object.rb
83
+ - lib/eac_templates/sources/internal_set.rb
84
+ - lib/eac_templates/sources/set.rb
85
+ - lib/eac_templates/sources/single.rb
86
+ - lib/eac_templates/variables.rb
87
+ - lib/eac_templates/variables/directory.rb
88
+ - lib/eac_templates/variables/file.rb
89
+ - lib/eac_templates/variables/fs_object.rb
90
+ - lib/eac_templates/variables/not_found_error.rb
91
+ - lib/eac_templates/variables/providers.rb
92
+ - lib/eac_templates/variables/providers/base.rb
93
+ - lib/eac_templates/variables/providers/config_reader.rb
94
+ - lib/eac_templates/variables/providers/entries_reader.rb
95
+ - lib/eac_templates/variables/providers/generic.rb
96
+ - lib/eac_templates/variables/providers/hash.rb
94
97
  - lib/eac_templates/version.rb
95
98
  homepage:
96
99
  licenses: []
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/file'
4
-
5
- module EacTemplates
6
- class Directory
7
- TEMPLATE_EXTNAME = '.template'
8
-
9
- attr_reader :path
10
-
11
- def initialize(path)
12
- @path = path.is_a?(::Pathname) ? path : ::Pathname.new(path.to_s)
13
- end
14
-
15
- def apply(variables_source, directory)
16
- TemplateNode.new(self, '.', directory, variables_source).apply
17
- end
18
-
19
- def child(subpath)
20
- child_path = ::File.join(path, subpath)
21
- return ::EacTemplates::File.new(child_path) if ::File.file?(child_path)
22
- return ::EacTemplates::Directory.new(child_path) if ::File.directory?(child_path)
23
-
24
- raise "Child \"#{subpath}\" from \"#{path}\" not found"
25
- end
26
-
27
- def children
28
- path.children.map do |path_child|
29
- child(path_child.basename.to_path)
30
- end
31
- end
32
-
33
- private
34
-
35
- def apply_fs_object(source_relative, target)
36
- if ::File.directory?(source_absolute(source_relative))
37
- apply_directory(source_relative, target)
38
- elsif ::File.file?(source_absolute(source_relative))
39
- end
40
- end
41
-
42
- def source_absolute(source_relative)
43
- ::File.expand_path(source_relative, path)
44
- end
45
-
46
- class TemplateNode
47
- attr_reader :source_directory, :source_relative, :target_root_directory, :variables_source
48
-
49
- def initialize(source_directory, source_relative, target_root_directory, variables_source)
50
- @source_directory = source_directory
51
- @source_relative = source_relative
52
- @target_root_directory = target_root_directory
53
- @variables_source = variables_source
54
- end
55
-
56
- def apply
57
- if file?
58
- apply_file
59
- elsif directory?
60
- apply_directory
61
- else
62
- raise "Unknown filesystem type: #{source_absolute}"
63
- end
64
- end
65
-
66
- private
67
-
68
- def apply_directory
69
- ::FileUtils.mkdir_p(target_absolute)
70
- Dir.entries(source_absolute).each do |entry|
71
- child(entry).apply unless %w[. ..].include?(entry)
72
- end
73
- end
74
-
75
- def apply_file
76
- if ::File.extname(source_absolute) == TEMPLATE_EXTNAME
77
- ::EacTemplates::File.new(source_absolute).apply_to_file(
78
- variables_source, target_absolute
79
- )
80
- else
81
- ::FileUtils.cp(source_absolute, target_absolute)
82
- end
83
- end
84
-
85
- def child(entry)
86
- TemplateNode.new(source_directory, ::File.join(source_relative, entry),
87
- target_root_directory, variables_source)
88
- end
89
-
90
- def file?
91
- ::File.file?(source_absolute)
92
- end
93
-
94
- def directory?
95
- ::File.directory?(source_absolute)
96
- end
97
-
98
- def source_absolute
99
- ::File.expand_path(source_relative, source_directory.path)
100
- end
101
-
102
- def target_absolute
103
- ::File.expand_path(source_relative, target_root_directory)
104
- .gsub(/#{::Regexp.quote(TEMPLATE_EXTNAME)}\z/, '')
105
- end
106
- end
107
- end
108
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_templates/variable_providers'
5
-
6
- module EacTemplates
7
- class File
8
- VARIABLE_DELIMITER = ::Regexp.quote('%%')
9
- VARIABLE_PATTERN = /#{VARIABLE_DELIMITER}([a-z0-9\._]*)#{VARIABLE_DELIMITER}/i.freeze
10
-
11
- enable_simple_cache
12
- common_constructor :path do
13
- self.path = path.to_pathname
14
- end
15
-
16
- # +variables_provider+ A [Hash] or object which responds to +read_entry(entry_name)+.
17
- def apply(variables_source)
18
- variables_provider = ::EacTemplates::VariableProviders.build(variables_source)
19
- variables.inject(content) do |a, e|
20
- a.gsub(variable_pattern(e), variables_provider.variable_value(e).to_s)
21
- end
22
- end
23
-
24
- def apply_to_file(variables_source, output_file_path)
25
- output_file_path.to_pathname.write(apply(variables_source))
26
- end
27
-
28
- private
29
-
30
- def variables_uncached
31
- content.scan(VARIABLE_PATTERN).map(&:first).map do |name|
32
- sanitize_variable_name(name)
33
- end.to_set
34
- end
35
-
36
- def content_uncached
37
- path.read
38
- end
39
-
40
- def sanitize_variable_name(variable_name)
41
- variable_name.to_s.downcase
42
- end
43
-
44
- def variable_pattern(name)
45
- /#{VARIABLE_DELIMITER}#{::Regexp.quote(name)}#{VARIABLE_DELIMITER}/i
46
- end
47
- end
48
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/from_gem'
4
- ::EacTemplates::FromGem.include_all
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/searcher'
4
-
5
- module EacTemplates
6
- class FromGem
7
- class << self
8
- def include_all(searcher = nil)
9
- ::Gem::Specification.each { |gemspec| new(gemspec, searcher).include }
10
- end
11
- end
12
-
13
- TEMPLATES_DIR_SUBPATH = 'template'
14
-
15
- common_constructor :gemspec, :searcher, default: [nil] do
16
- self.searcher ||= ::EacTemplates::Searcher.default
17
- end
18
-
19
- # @return [Boolean]
20
- delegate :exist?, to: :path
21
-
22
- # @return [Pathname]
23
- def include
24
- return nil unless exist?
25
-
26
- searcher.included_paths << path
27
- path
28
- end
29
-
30
- # @return [Pathname]
31
- def path
32
- gemspec.gem_dir.to_pathname.join(TEMPLATES_DIR_SUBPATH)
33
- end
34
- end
35
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/object/blank'
4
- require 'eac_templates/directory'
5
- require 'eac_templates/file'
6
-
7
- module EacTemplates
8
- class Searcher
9
- class << self
10
- def default
11
- @default ||= new
12
- end
13
- end
14
-
15
- def template(subpath, required = true)
16
- path = template_path(subpath)
17
- if path.blank?
18
- return nil unless required
19
-
20
- raise_template_not_found(subpath)
21
- end
22
- return ::EacTemplates::File.new(path) if ::File.file?(path)
23
- return ::EacTemplates::Directory.new(path) if ::File.directory?(path)
24
-
25
- raise 'Invalid branching'
26
- end
27
-
28
- # @return The absolute path of template if found, +nil+ otherwise.
29
- def template_path(subpath)
30
- included_paths.each do |included_path|
31
- r = search_template_in_included_path(included_path, subpath)
32
- return r if r
33
- end
34
- nil
35
- end
36
-
37
- def included_paths
38
- @included_paths ||= ::Set.new
39
- end
40
-
41
- private
42
-
43
- def raise_template_not_found(subpath)
44
- raise "Template not found for subpath \"#{subpath}\"" \
45
- " (Included paths: #{included_paths.to_a.join(::File::PATH_SEPARATOR)})"
46
- end
47
-
48
- def search_template_in_included_path(included_path, subpath)
49
- path = ::File.join(included_path, subpath)
50
- ::File.exist?(path) ? path : nil
51
- end
52
- end
53
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacTemplates
4
- class VariableNotFoundError < StandardError; end
5
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/variable_not_found_error'
4
-
5
- module EacTemplates
6
- module VariableProviders
7
- class Base
8
- attr_reader :source
9
-
10
- def initialize(source)
11
- @source = source
12
- end
13
-
14
- def variable_value(name)
15
- return variable_fetch(name) if variable_exist?(name)
16
-
17
- raise VariableNotFoundError, "Variable \"#{name}\" not found in #{source}"
18
- end
19
- end
20
- end
21
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_config/node'
4
- require 'eac_templates/variable_providers/base'
5
-
6
- module EacTemplates
7
- module VariableProviders
8
- class ConfigReader < ::EacTemplates::VariableProviders::Base
9
- class << self
10
- def accept?(variables_source)
11
- return false unless variables_source.respond_to?(:entry)
12
-
13
- entry = variables_source.entry(:any_value)
14
- entry.respond_to?(:value) && entry.respond_to?(:found?)
15
- end
16
- end
17
-
18
- def variable_exist?(name)
19
- source.entry(name).found?
20
- end
21
-
22
- def variable_fetch(name)
23
- source.entry(name).value
24
- end
25
- end
26
- end
27
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/variable_providers/base'
4
-
5
- module EacTemplates
6
- module VariableProviders
7
- class EntriesReader < ::EacTemplates::VariableProviders::Base
8
- class << self
9
- def accept?(variables_source)
10
- variables_source.respond_to?(:read_entry)
11
- end
12
- end
13
-
14
- def variable_exist?(_name)
15
- true
16
- end
17
-
18
- def variable_fetch(name)
19
- source.read_entry(name)
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/variable_providers/base'
4
-
5
- module EacTemplates
6
- module VariableProviders
7
- class Generic < ::EacTemplates::VariableProviders::Base
8
- class << self
9
- def accept?(variables_source)
10
- variables_source.is_a?(::Object)
11
- end
12
- end
13
-
14
- def variable_exist?(name)
15
- source.respond_to?(name)
16
- end
17
-
18
- def variable_fetch(name)
19
- source.send(name)
20
- end
21
- end
22
- end
23
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_templates/variable_providers/base'
4
-
5
- module EacTemplates
6
- module VariableProviders
7
- class Hash < ::EacTemplates::VariableProviders::Base
8
- class << self
9
- def accept?(variables_source)
10
- variables_source.is_a?(::Hash)
11
- end
12
- end
13
-
14
- def initialize(source)
15
- super(source.with_indifferent_access)
16
- end
17
-
18
- def variable_exist?(name)
19
- source.key?(name)
20
- end
21
-
22
- def variable_fetch(name)
23
- source.fetch(name)
24
- end
25
- end
26
- end
27
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacTemplates
6
- module VariableProviders
7
- require_sub __FILE__
8
-
9
- PROVIDERS = %w[config_reader entries_reader hash generic].map do |name|
10
- "eac_templates/variable_providers/#{name}".camelize.constantize
11
- end
12
-
13
- class << self
14
- def build(variables_source)
15
- PROVIDERS.each do |provider|
16
- return provider.new(variables_source) if provider.accept?(variables_source)
17
- end
18
-
19
- raise "Variables provider not found for #{variables_source}"
20
- end
21
- end
22
- end
23
- end