power_stencil 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/etc/meta_templates/plugin_seed/etc/plugin_capabilities.yaml +7 -1
- data/etc/meta_templates/plugin_seed/lib/{entity}.rb.erb +12 -1
- data/etc/templates/plugin_definition/etc/plugin_capabilities.yaml +7 -1
- data/etc/templates/plugin_definition/lib/{entity}.rb.erb +12 -1
- data/lib/power_stencil/engine/build_handling.rb +36 -23
- data/lib/power_stencil/plugins/build.rb +9 -2
- data/lib/power_stencil/plugins/capabilities.rb +2 -2
- data/lib/power_stencil/version.rb +1 -1
- data/power_stencil.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c8c69b2dc3cdadebcdf0899978842ccf2fe9759
|
4
|
+
data.tar.gz: 7381be842bd05452ba6c71f8e6cffb417eb4d9eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efe862901f45e4c0df84304f5aa41ddf5985f898e85b73d3d8ebe1822478007c59eadb72fcce2adb73dddc0b8394bb4c15899478485e34fcdf50d849dfccad66
|
7
|
+
data.tar.gz: ed7abb218f9551d5bc5732016874db6e34375a2581fdc2b4b69cdff3663af5d1baeb80114b48b35c35cccf1e104dbc0a369a33aef5c21b18bcddbbdfde00b452
|
@@ -14,9 +14,15 @@
|
|
14
14
|
:processors:
|
15
15
|
<%= plugin_name %>: <%= plugin_module_name %>::Processor
|
16
16
|
|
17
|
+
|
18
|
+
# This is the name of the method called __instead__ of standard file detemplatization. This method has
|
19
|
+
# to be a module method in the `plugin_module` module.
|
20
|
+
:generate_build_files: generate_build_files
|
21
|
+
|
22
|
+
|
17
23
|
# This is the name of the method called after the files are detemplatized. This method has
|
18
24
|
# to be a module method in the `plugin_module` module.
|
19
|
-
:
|
25
|
+
:post_build: post_build_hook
|
20
26
|
|
21
27
|
# If a dsl module is declared it will be injected in the DSL available in the shell or templates
|
22
28
|
:dsl:
|
@@ -5,12 +5,23 @@ require '<%= plugin_name %>/dsl/<%= plugin_name %>_dsl'
|
|
5
5
|
|
6
6
|
module <%= plugin_module_name %>
|
7
7
|
|
8
|
+
extend Climatic::Utils::SafeExec
|
9
|
+
|
10
|
+
def self.generate_build_files(entity_to_build, target_directory)
|
11
|
+
# This is an example of what you could do to generate files, here using default detemplatization...
|
12
|
+
PowerStencil.logger.debug "By default plugin '<%= plugin_name %>' uses standard build..."
|
13
|
+
PowerStencil.project.engine.generate_build_files entity_to_build, target_directory
|
14
|
+
end
|
15
|
+
|
8
16
|
def self.post_build_hook(built_entity, generated_files_path)
|
9
17
|
# This is an example of what you could do after files are generated, ie pretty much anything...
|
10
18
|
case built_entity.type
|
11
19
|
when :<%= plugin_name %>_entity
|
12
20
|
generated_file = File.join generated_files_path, 'message.txt'
|
13
|
-
|
21
|
+
# Enclose in `safely_exec_code` code that is protected by the `--simulate` command-line flag.
|
22
|
+
safely_exec_code(message: "Displaying content of '#{generated_file}'.") do
|
23
|
+
puts File.readlines(generated_file)
|
24
|
+
end
|
14
25
|
else
|
15
26
|
raise PowerStencil::Error, 'Plugin <%= plugin_name %> doesnt know how handle the build of a <%= plugin_name %>_entity entity type !'
|
16
27
|
end
|
@@ -14,9 +14,15 @@
|
|
14
14
|
:processors:
|
15
15
|
<%= plugin_name %>: <%= plugin_module_name %>::Processor
|
16
16
|
|
17
|
+
|
18
|
+
# This is the name of the method called __instead__ of standard file detemplatization. This method has
|
19
|
+
# to be a module method in the `plugin_module` module.
|
20
|
+
:generate_build_files: generate_build_files
|
21
|
+
|
22
|
+
|
17
23
|
# This is the name of the method called after the files are detemplatized. This method has
|
18
24
|
# to be a module method in the `plugin_module` module.
|
19
|
-
:
|
25
|
+
:post_build: post_build_hook
|
20
26
|
|
21
27
|
# If a dsl module is declared it will be injected in the DSL available in the shell or templates
|
22
28
|
:dsl:
|
@@ -5,12 +5,23 @@ require '<%= plugin_name %>/dsl/<%= plugin_name %>_dsl'
|
|
5
5
|
|
6
6
|
module <%= plugin_module_name %>
|
7
7
|
|
8
|
+
extend Climatic::Utils::SafeExec
|
9
|
+
|
10
|
+
def self.generate_build_files(entity_to_build, target_directory)
|
11
|
+
# This is an example of what you could do to generate files, here using default detemplatization...
|
12
|
+
PowerStencil.logger.debug "By default plugin '<%= plugin_name %>' uses standard build..."
|
13
|
+
PowerStencil.project.engine.generate_build_files entity_to_build, target_directory
|
14
|
+
end
|
15
|
+
|
8
16
|
def self.post_build_hook(built_entity, generated_files_path)
|
9
17
|
# This is an example of what you could do after files are generated, ie pretty much anything...
|
10
18
|
case built_entity.type
|
11
19
|
when :<%= plugin_name %>_entity
|
12
20
|
generated_file = File.join generated_files_path, 'message.txt'
|
13
|
-
|
21
|
+
# Enclose in `safely_exec_code` code that is protected by the `--simulate` command-line flag.
|
22
|
+
safely_exec_code(message: "Displaying content of '#{generated_file}'.") do
|
23
|
+
puts File.readlines(generated_file)
|
24
|
+
end
|
14
25
|
else
|
15
26
|
raise PowerStencil::Error, 'Plugin <%= plugin_name %> doesnt know how handle the build of a <%= plugin_name %>_entity entity type !'
|
16
27
|
end
|
@@ -52,6 +52,28 @@ module PowerStencil
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
def generate_build_files(entity_to_build, target_path)
|
56
|
+
logger.info "Rendering '#{entity_to_build.as_path}' templates in '#{target_path}'"
|
57
|
+
render_source entity_to_build.templates_path, target_path, main_entry_point: entity_to_build.as_path
|
58
|
+
logger.info "Detemplatized files generated in '#{target_path}'"
|
59
|
+
manage_build_links target_path
|
60
|
+
end
|
61
|
+
|
62
|
+
def post_build_hook(entity_to_build, files_path)
|
63
|
+
case entity_to_build.type
|
64
|
+
when :simple_exec
|
65
|
+
script_to_execute = File.expand_path File.join(files_path, entity_to_build.post_process.process)
|
66
|
+
exec_options = {message: "Running '#{script_to_execute}'"}
|
67
|
+
exec_options[:show_output] = true if config[:verbose]
|
68
|
+
process_report = safely_exec_command "'#{script_to_execute}'", exec_options
|
69
|
+
unless process_report.exit_status.exitstatus == 0
|
70
|
+
raise PowerStencil::Error, "Process `#{process_report.command}` failed and returned exit code '#{process_report.exit_status.exitstatus}'"
|
71
|
+
end
|
72
|
+
process_report
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
55
77
|
private
|
56
78
|
|
57
79
|
def manage_build_links(last_build_path)
|
@@ -97,43 +119,34 @@ module PowerStencil
|
|
97
119
|
def build_entity(entity_to_build, target_path)
|
98
120
|
initial_directory = Dir.pwd
|
99
121
|
target_plugin_name = entity_to_build.buildable_by.to_s
|
100
|
-
|
122
|
+
|
123
|
+
# Files generation
|
124
|
+
if target_plugin_name.empty?
|
125
|
+
generate_build_files entity_to_build, target_path
|
126
|
+
else
|
127
|
+
target_plugin = project.plugins[target_plugin_name]
|
128
|
+
raise PowerStencil::Error, "Could not find plugin '#{target_plugin_name}' !" if target_plugin.nil?
|
129
|
+
raise PowerStencil::Error, "Plugin '#{target_plugin_name}' has no file generation capability !" unless target_plugin.capabilities[:generate_build_files]
|
130
|
+
target_plugin.generate_build_files entity_to_build, target_path
|
131
|
+
end
|
132
|
+
|
101
133
|
# Post processing executed from generated directory (#11)
|
102
134
|
Dir.chdir target_path
|
103
135
|
|
136
|
+
# Post generation action
|
104
137
|
if target_plugin_name.empty?
|
105
138
|
post_build_hook entity_to_build, target_path
|
106
139
|
else
|
107
140
|
target_plugin = project.plugins[target_plugin_name]
|
108
141
|
raise PowerStencil::Error, "Could not find plugin '#{target_plugin_name}' !" if target_plugin.nil?
|
109
|
-
raise PowerStencil::Error, "Plugin '#{target_plugin_name}' has no build capability !" unless target_plugin.capabilities[:
|
142
|
+
raise PowerStencil::Error, "Plugin '#{target_plugin_name}' has no post build capability !" unless target_plugin.capabilities[:post_build]
|
110
143
|
target_plugin.post_build_hook entity_to_build, target_path
|
111
144
|
end
|
145
|
+
|
112
146
|
ensure
|
113
147
|
Dir.chdir initial_directory
|
114
148
|
end
|
115
149
|
|
116
|
-
def default_build(entity_to_build, target_path)
|
117
|
-
logger.info "Building #{entity_to_build.as_path} in '#{target_path}'"
|
118
|
-
render_source entity_to_build.templates_path, target_path, main_entry_point: entity_to_build.as_path
|
119
|
-
logger.info "Detemplatized filed generated in '#{target_path}'"
|
120
|
-
manage_build_links target_path
|
121
|
-
end
|
122
|
-
|
123
|
-
def post_build_hook(entity_to_build, files_path)
|
124
|
-
case entity_to_build.type
|
125
|
-
when :simple_exec
|
126
|
-
script_to_execute = File.expand_path File.join(files_path, entity_to_build.post_process.process)
|
127
|
-
exec_options = {message: "Running '#{script_to_execute}'"}
|
128
|
-
exec_options[:show_output] = true if config[:verbose]
|
129
|
-
process_report = safely_exec_command "'#{script_to_execute}'", exec_options
|
130
|
-
unless process_report.exit_status.exitstatus == 0
|
131
|
-
raise PowerStencil::Error, "Process `#{process_report.command}` failed and returned exit code '#{process_report.exit_status.exitstatus}'"
|
132
|
-
end
|
133
|
-
process_report
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
150
|
end
|
138
151
|
|
139
152
|
end
|
@@ -3,9 +3,16 @@ module PowerStencil
|
|
3
3
|
|
4
4
|
module Build
|
5
5
|
|
6
|
+
def generate_build_files(*args)
|
7
|
+
build_method_name = plugin_definition[:generate_build_files]
|
8
|
+
msg = "Plugin '#{self.name}' doesn't contain the '#{build_method_name}' method in the '#{plugin_definition[:plugin_module]}' module. Cannot delegate !"
|
9
|
+
raise PowerStencil::Error, msg unless plugin_module.respond_to? build_method_name
|
10
|
+
plugin_module.send build_method_name, *args
|
11
|
+
end
|
12
|
+
|
6
13
|
def post_build_hook(*args)
|
7
|
-
build_method_name = plugin_definition[:
|
8
|
-
msg = "Plugin '#{self.name}' doesn't contain the '#{build_method_name}' method in the '#{plugin_definition[:plugin_module]}' module. Cannot
|
14
|
+
build_method_name = plugin_definition[:post_build]
|
15
|
+
msg = "Plugin '#{self.name}' doesn't contain the '#{build_method_name}' method in the '#{plugin_definition[:plugin_module]}' module. Cannot delegate !"
|
9
16
|
raise PowerStencil::Error, msg unless plugin_module.respond_to? build_method_name
|
10
17
|
plugin_module.send build_method_name, *args
|
11
18
|
end
|
@@ -5,7 +5,7 @@ module PowerStencil
|
|
5
5
|
|
6
6
|
include PowerStencil::Utils::FileHelper
|
7
7
|
|
8
|
-
CAPABILITIES = %i(config command_line processors
|
8
|
+
CAPABILITIES = %i(config command_line processors generate_build_files post_build dsl entity_definitions templates).freeze
|
9
9
|
|
10
10
|
attr_reader :plugin_definition
|
11
11
|
|
@@ -27,7 +27,7 @@ module PowerStencil
|
|
27
27
|
logger.debug "Loading plugin '#{self.name}' capabilities..."
|
28
28
|
begin
|
29
29
|
@plugin_definition = yaml_file_to_hash yaml_file
|
30
|
-
%i(processors entity_definitions templates
|
30
|
+
%i(processors entity_definitions templates generate_build_files post_build dsl).each do |capability|
|
31
31
|
unless plugin_definition[capability].nil? or plugin_definition[capability].empty?
|
32
32
|
capabilities[capability] = true
|
33
33
|
end
|
data/power_stencil.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
27
|
|
28
|
-
spec.add_dependency 'climatic', '~> 0.2.
|
28
|
+
spec.add_dependency 'climatic', '~> 0.2.35'
|
29
29
|
spec.add_dependency 'dir_glob_ignore', '~> 0.3'
|
30
30
|
spec.add_dependency 'universe_compiler', '~> 0.5.5'
|
31
31
|
spec.add_dependency 'pry'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: power_stencil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Laurent Briais
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.2.
|
61
|
+
version: 0.2.35
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.2.
|
68
|
+
version: 0.2.35
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: dir_glob_ignore
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -327,7 +327,7 @@ metadata:
|
|
327
327
|
documentation_uri: https://gitlab.com/tools4devops/power_stencil/blob/master/README.md
|
328
328
|
source_code_uri: https://gitlab.com/tools4devops/power_stencil
|
329
329
|
homepage_uri: https://powerstencil.brizone.org/
|
330
|
-
post_install_message: "\nThank you for installing PowerStencil 0.9.
|
330
|
+
post_install_message: "\nThank you for installing PowerStencil 0.9.4 !\nFrom the command
|
331
331
|
line you can run `power_stencil --help`\nIf your shell is not completing the command:\n
|
332
332
|
\ If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial Website
|
333
333
|
\ : https://powerstencil.brizone.org/\nFull documentation here : https://gitlab.com/tools4devops/power_stencil/blob/master/README.md\nFeel
|