eac_templates 0.3.2 → 0.5.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 +4 -4
- data/lib/eac_templates/abstract/directory.rb +42 -0
- data/lib/eac_templates/abstract/file.rb +25 -0
- data/lib/eac_templates/abstract/fs_object.rb +94 -0
- data/lib/eac_templates/abstract/fs_object_by_pathname.rb +13 -0
- data/lib/eac_templates/abstract/not_found_error.rb +8 -0
- data/lib/eac_templates/core_ext.rb +1 -1
- data/lib/eac_templates/interface_methods.rb +12 -0
- data/lib/eac_templates/modules/ancestor/directory.rb +17 -0
- data/lib/eac_templates/modules/ancestor/file.rb +16 -0
- data/lib/eac_templates/modules/ancestor/fs_object.rb +25 -0
- data/lib/eac_templates/modules/ancestor.rb +51 -0
- data/lib/eac_templates/modules/base.rb +35 -0
- data/lib/eac_templates/modules.rb +9 -0
- data/lib/eac_templates/patches/module/template.rb +2 -3
- data/lib/eac_templates/sources/directory.rb +37 -0
- data/lib/eac_templates/sources/file.rb +13 -0
- data/lib/eac_templates/sources/from_all_gems.rb +4 -0
- data/lib/eac_templates/sources/from_gem.rb +37 -0
- data/lib/eac_templates/sources/fs_object.rb +53 -0
- data/lib/eac_templates/sources/internal_set.rb +22 -0
- data/lib/eac_templates/sources/set.rb +55 -0
- data/lib/eac_templates/sources/single.rb +29 -0
- data/lib/eac_templates/sources.rb +9 -0
- data/lib/eac_templates/variables/content.rb +52 -0
- data/lib/eac_templates/variables/directory.rb +49 -0
- data/lib/eac_templates/variables/file.rb +26 -0
- data/lib/eac_templates/variables/fs_object.rb +65 -0
- data/lib/eac_templates/variables/not_found_error.rb +7 -0
- data/lib/eac_templates/variables/providers/base.rb +23 -0
- data/lib/eac_templates/variables/providers/config_reader.rb +29 -0
- data/lib/eac_templates/variables/providers/entries_reader.rb +25 -0
- data/lib/eac_templates/variables/providers/generic.rb +25 -0
- data/lib/eac_templates/variables/providers/hash.rb +29 -0
- data/lib/eac_templates/variables/providers.rb +25 -0
- data/lib/eac_templates/variables.rb +9 -0
- data/lib/eac_templates/version.rb +1 -1
- metadata +39 -30
- data/lib/eac_templates/directory.rb +0 -108
- data/lib/eac_templates/file.rb +0 -48
- data/lib/eac_templates/from_all_gems.rb +0 -4
- data/lib/eac_templates/from_gem.rb +0 -35
- data/lib/eac_templates/searcher.rb +0 -53
- data/lib/eac_templates/variable_not_found_error.rb +0 -5
- data/lib/eac_templates/variable_providers/base.rb +0 -21
- data/lib/eac_templates/variable_providers/config_reader.rb +0 -27
- data/lib/eac_templates/variable_providers/entries_reader.rb +0 -23
- data/lib/eac_templates/variable_providers/generic.rb +0 -23
- data/lib/eac_templates/variable_providers/hash.rb +0 -27
- data/lib/eac_templates/variable_providers.rb +0 -23
@@ -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
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_templates/abstract/not_found_error'
|
4
|
+
require 'eac_templates/abstract/directory'
|
5
|
+
require 'eac_templates/variables/file'
|
6
|
+
require 'eac_templates/variables/fs_object'
|
7
|
+
|
8
|
+
module EacTemplates
|
9
|
+
module Variables
|
10
|
+
class Directory
|
11
|
+
common_constructor :abstract_directory do
|
12
|
+
self.abstract_directory = ::EacTemplates::Abstract::Directory.assert(abstract_directory)
|
13
|
+
end
|
14
|
+
delegate :path, to: :abstract_directory
|
15
|
+
|
16
|
+
def apply(variables_source, directory)
|
17
|
+
::EacTemplates::Variables::FsObject.new(self, '.', directory, variables_source).apply
|
18
|
+
end
|
19
|
+
|
20
|
+
def child(subpath)
|
21
|
+
child_path = ::File.join(path, subpath)
|
22
|
+
return ::EacTemplates::Variables::File.new(child_path) if ::File.file?(child_path)
|
23
|
+
return ::EacTemplates::Variables::Directory.new(child_path) if ::File.directory?(child_path)
|
24
|
+
|
25
|
+
raise ::EacTemplates::Abstract::NotFoundError,
|
26
|
+
"Child \"#{subpath}\" from \"#{path}\" not found"
|
27
|
+
end
|
28
|
+
|
29
|
+
def children
|
30
|
+
path.children.map do |path_child|
|
31
|
+
child(path_child.basename.to_path)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def apply_fs_object(source_relative, target)
|
38
|
+
if ::File.directory?(source_absolute(source_relative))
|
39
|
+
apply_directory(source_relative, target)
|
40
|
+
elsif ::File.file?(source_absolute(source_relative))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def source_absolute(source_relative)
|
45
|
+
::File.expand_path(source_relative, path)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'eac_templates/abstract/file'
|
5
|
+
require 'eac_templates/variables/content'
|
6
|
+
require 'eac_templates/variables/providers'
|
7
|
+
|
8
|
+
module EacTemplates
|
9
|
+
module Variables
|
10
|
+
class File
|
11
|
+
enable_simple_cache
|
12
|
+
common_constructor :abstract_file do
|
13
|
+
self.abstract_file = ::EacTemplates::Abstract::File.assert(abstract_file)
|
14
|
+
end
|
15
|
+
delegate :path, to: :abstract_file
|
16
|
+
delegate :apply, :apply_to_file, :content, :variables, to: :content_applier
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# @return [EacTemplates::Variables::Content]
|
21
|
+
def content_applier_uncached
|
22
|
+
::EacTemplates::Variables::Content.from_file(path)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_templates/variables/file'
|
4
|
+
|
5
|
+
module EacTemplates
|
6
|
+
module Variables
|
7
|
+
class FsObject
|
8
|
+
TEMPLATE_EXTNAME = '.template'
|
9
|
+
|
10
|
+
common_constructor :source_directory, :source_relative, :target_root_directory,
|
11
|
+
:variables_source
|
12
|
+
|
13
|
+
def apply
|
14
|
+
if file?
|
15
|
+
apply_file
|
16
|
+
elsif directory?
|
17
|
+
apply_directory
|
18
|
+
else
|
19
|
+
raise "Unknown filesystem type: #{source_absolute}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def apply_directory
|
26
|
+
::FileUtils.mkdir_p(target_absolute)
|
27
|
+
Dir.entries(source_absolute).each do |entry|
|
28
|
+
child(entry).apply unless %w[. ..].include?(entry)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def apply_file
|
33
|
+
if ::File.extname(source_absolute) == TEMPLATE_EXTNAME
|
34
|
+
::EacTemplates::Variables::File.new(source_absolute).apply_to_file(
|
35
|
+
variables_source, target_absolute
|
36
|
+
)
|
37
|
+
else
|
38
|
+
::FileUtils.cp(source_absolute, target_absolute)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def child(entry)
|
43
|
+
self.class.new(source_directory, ::File.join(source_relative, entry),
|
44
|
+
target_root_directory, variables_source)
|
45
|
+
end
|
46
|
+
|
47
|
+
def file?
|
48
|
+
::File.file?(source_absolute)
|
49
|
+
end
|
50
|
+
|
51
|
+
def directory?
|
52
|
+
::File.directory?(source_absolute)
|
53
|
+
end
|
54
|
+
|
55
|
+
def source_absolute
|
56
|
+
::File.expand_path(source_relative, source_directory.path)
|
57
|
+
end
|
58
|
+
|
59
|
+
def target_absolute
|
60
|
+
::File.expand_path(source_relative, target_root_directory)
|
61
|
+
.gsub(/#{::Regexp.quote(TEMPLATE_EXTNAME)}\z/, '')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_templates/variables/not_found_error'
|
4
|
+
|
5
|
+
module EacTemplates
|
6
|
+
module Variables
|
7
|
+
module Providers
|
8
|
+
class Base
|
9
|
+
attr_reader :source
|
10
|
+
|
11
|
+
def initialize(source)
|
12
|
+
@source = source
|
13
|
+
end
|
14
|
+
|
15
|
+
def variable_value(name)
|
16
|
+
return variable_fetch(name) if variable_exist?(name)
|
17
|
+
|
18
|
+
raise VariableNotFoundError, "Variable \"#{name}\" not found in #{source}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -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
|
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.
|
4
|
+
version: 0.5.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:
|
11
|
+
date: 2023-05-04 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.
|
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.
|
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.
|
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.
|
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
|
@@ -71,11 +59,19 @@ extensions: []
|
|
71
59
|
extra_rdoc_files: []
|
72
60
|
files:
|
73
61
|
- lib/eac_templates.rb
|
62
|
+
- lib/eac_templates/abstract/directory.rb
|
63
|
+
- lib/eac_templates/abstract/file.rb
|
64
|
+
- lib/eac_templates/abstract/fs_object.rb
|
65
|
+
- lib/eac_templates/abstract/fs_object_by_pathname.rb
|
66
|
+
- lib/eac_templates/abstract/not_found_error.rb
|
74
67
|
- lib/eac_templates/core_ext.rb
|
75
|
-
- lib/eac_templates/
|
76
|
-
- lib/eac_templates/
|
77
|
-
- lib/eac_templates/
|
78
|
-
- lib/eac_templates/
|
68
|
+
- lib/eac_templates/interface_methods.rb
|
69
|
+
- lib/eac_templates/modules.rb
|
70
|
+
- lib/eac_templates/modules/ancestor.rb
|
71
|
+
- lib/eac_templates/modules/ancestor/directory.rb
|
72
|
+
- lib/eac_templates/modules/ancestor/file.rb
|
73
|
+
- lib/eac_templates/modules/ancestor/fs_object.rb
|
74
|
+
- lib/eac_templates/modules/base.rb
|
79
75
|
- lib/eac_templates/patches.rb
|
80
76
|
- lib/eac_templates/patches/module.rb
|
81
77
|
- lib/eac_templates/patches/module/erb_template.rb
|
@@ -83,14 +79,27 @@ files:
|
|
83
79
|
- lib/eac_templates/patches/object.rb
|
84
80
|
- lib/eac_templates/patches/object/erb_template.rb
|
85
81
|
- lib/eac_templates/patches/object/template.rb
|
86
|
-
- lib/eac_templates/
|
87
|
-
- lib/eac_templates/
|
88
|
-
- lib/eac_templates/
|
89
|
-
- lib/eac_templates/
|
90
|
-
- lib/eac_templates/
|
91
|
-
- lib/eac_templates/
|
92
|
-
- lib/eac_templates/
|
93
|
-
- lib/eac_templates/
|
82
|
+
- lib/eac_templates/sources.rb
|
83
|
+
- lib/eac_templates/sources/directory.rb
|
84
|
+
- lib/eac_templates/sources/file.rb
|
85
|
+
- lib/eac_templates/sources/from_all_gems.rb
|
86
|
+
- lib/eac_templates/sources/from_gem.rb
|
87
|
+
- lib/eac_templates/sources/fs_object.rb
|
88
|
+
- lib/eac_templates/sources/internal_set.rb
|
89
|
+
- lib/eac_templates/sources/set.rb
|
90
|
+
- lib/eac_templates/sources/single.rb
|
91
|
+
- lib/eac_templates/variables.rb
|
92
|
+
- lib/eac_templates/variables/content.rb
|
93
|
+
- lib/eac_templates/variables/directory.rb
|
94
|
+
- lib/eac_templates/variables/file.rb
|
95
|
+
- lib/eac_templates/variables/fs_object.rb
|
96
|
+
- lib/eac_templates/variables/not_found_error.rb
|
97
|
+
- lib/eac_templates/variables/providers.rb
|
98
|
+
- lib/eac_templates/variables/providers/base.rb
|
99
|
+
- lib/eac_templates/variables/providers/config_reader.rb
|
100
|
+
- lib/eac_templates/variables/providers/entries_reader.rb
|
101
|
+
- lib/eac_templates/variables/providers/generic.rb
|
102
|
+
- lib/eac_templates/variables/providers/hash.rb
|
94
103
|
- lib/eac_templates/version.rb
|
95
104
|
homepage:
|
96
105
|
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
|
data/lib/eac_templates/file.rb
DELETED
@@ -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
|