power_stencil 0.9.8 → 0.10.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
- SHA1:
3
- metadata.gz: b4e9685088ebbf259c446b87fd7c40512110d612
4
- data.tar.gz: aa164a65cd37d8027b2ba814b0c78778bbb215e8
2
+ SHA256:
3
+ metadata.gz: fc4f20ce02555b3700fc39255dea0343e85964afebe0b3658be510294252b5f3
4
+ data.tar.gz: 18cbb67c91884f9d18ed2570c763e6f883ce1553fa7cd5ae02af2955288b471f
5
5
  SHA512:
6
- metadata.gz: 69a95cd3ff9b533b50e0c9a54229167e859f329393642911375f9c9d27a5c331bad6b7162369d525de26ca558c0ac2fb9dc681fb55c06ed758229025cccd2439
7
- data.tar.gz: b66e180061373d758e81839625dfd3971fce24f2dd0242c9fa30f1579ad97d918ab321d06b0426c18aa3743580b7f2942e74a0b2ff0d88e8b58d46e6ec109df3
6
+ metadata.gz: de64a256d395c0dc7501da6e62b469d78b5f96e798c32b2801ddefce232df93745874c4d6614af46d4727150a0ffaab589c94a7ff033ae1f215ff745d770771e
7
+ data.tar.gz: 073ef7a1c0043972b3d1ca9358926bac0ee871e1a42147e709989d138860d9207fa9a2f09603f4aca295fb0c77ce32a5b0dca8ec698769af861f11ed27bb3311
data/.gitlab-ci.yml CHANGED
@@ -1,4 +1,4 @@
1
- image: "ruby:2.3"
1
+ image: "ruby:3.1"
2
2
 
3
3
  before_script:
4
4
  - gem install bundler --no-document
data/README.md CHANGED
@@ -72,14 +72,14 @@ So `PowerStencil` is definitely not a templating engine, it is actually much mor
72
72
 
73
73
  # Installation
74
74
 
75
- You need a working install of the [Ruby] language (>= 2.3).
75
+ You need a working install of the [Ruby] language (>= 2.3). You should have `bundler` installed (`gem install bundler`). This is not added as an automatic dependency as updating `bundler` may not be what you want. Yet any working install of Ruby should consider having `bundler` installed.
76
+
77
+ :hand: It is **strongly** advised to have `git` installed on your system, as `PowerStencil` is integrated with `git` to provide a better user experience.
76
78
 
77
79
  Then you can install the `PowerStencil` gem by issuing the usual:
78
80
 
79
81
  $ gem install power_stencil
80
82
 
81
- :hand: It is **strongly** advised to have `git` installed on your system, as `PowerStencil` is integrated with `git` to provide a better user experience.
82
-
83
83
  If you want to create [Graphviz] graphs, you probably may want to install it for your system. If you are using an _apt-based_ system like Ubuntu or Debian it may probably be as simple as:
84
84
 
85
85
  $ sudo apt install graphviz
@@ -205,7 +205,7 @@ It provides a very useful auto-completion for sub-commands, options as well as o
205
205
 
206
206
  * Project independent completion is generated in `~/.zsh/completion/_power_stencil`, whereas completion related to new commands or options, coming from plugins used in a project, is generated (and versioned) within the project itself, in `.ps_project/.zsh_project_completion`.
207
207
 
208
- * Meaning that if you want to benefit from the "_full_" completion from within a project you may have to re-run `power_stencil add --zsh-completion` from within any project where you use extra plugins, in order to generate that `.ps_project/.zsh_project_completion` file. If you don't, it is not a big deal, but then you will only have access to the "_generic_" completion, ie completion not taking in account any of the extra commands or options you are using in this project brought by plugins you may use...
208
+ * Meaning that if you want to benefit from the "_full_" completion from within a project (ie including extra command line options brought by the project itself), you may have to re-run `power_stencil add --zsh-completion` from within any project where you use extra plugins, in order to (re)generate the `.ps_project/.zsh_project_completion` file. If you don't, it is not a big deal, but then you will only have access to the "_generic_" completion, ie completion not taking in account any of the extra commands or options you are using in this project brought by plugins you may use...
209
209
 
210
210
  ### Entities
211
211
 
data/doc/plugins.md CHANGED
@@ -12,6 +12,7 @@ Plugins
12
12
  - [Creating plugin local to the project](#creating-plugin-local-to-the-project)
13
13
  - [Plugin creation](#plugin-creation)
14
14
  - [Adding new subcommands to `PowerStencil`](#adding-new-subcommands-to-powerstencil)
15
+ - [Updating zsh auto-completion](#updating-zsh-auto-completion)
15
16
  - [Providing entity types and templates](#providing-entity-types-and-templates)
16
17
  - [Providing custom build process](#providing-custom-build-process)
17
18
  - [Plugin capabilities and structure](#plugin-capabilities-and-structure)
@@ -183,6 +184,15 @@ MYPLUGIN PLUGIN WAZ HERE !!
183
184
 
184
185
  Wow it worked ! Useless, but worked ! But it's a good demo on how to create your own subcommands in `PowerStencil`.
185
186
 
187
+ ## Updating zsh auto-completion
188
+
189
+ When you add a plugin to a project, be it local or from a separated gem, you may want to update the command-line auto-completion for that project as new plugins may add extra command-line options and sub-commands.
190
+
191
+ You do that as you probably already [dit it initially][completion].
192
+
193
+ $ power_stencil adm --zsh-completion
194
+
195
+
186
196
  ## Providing entity types and templates
187
197
 
188
198
  Of course you can provide new entity types and templates templates within plugin. The plugin created contains a demo entity type which brings its own template template (and even a custom build, but we will see that in next paragraph).
@@ -507,6 +517,7 @@ The documentation for plugins is not fully complete, so you are encouraged to re
507
517
  [builds]: builds.md "Builds in PowerStencil"
508
518
  [templates]: templates.md "Templates in PowerStencil"
509
519
  [post-process]: builds.md#post-process-actions "post-process actions in builds"
520
+ [completion]: ../README.md#command-line-auto-completion "how to setup zsh command-line auto-completion"
510
521
 
511
522
  <!-- Code links -->
512
523
 
@@ -5,11 +5,22 @@ PowerStencil entity definitions
5
5
  In this directory, you can define project specific entity definitions
6
6
  which basically are plain ruby files processed in alphabetical order.
7
7
 
8
- You can create classes that are inheriting from `PowerStencil::SystemEntityDefinition::Base`
8
+ You can create classes that are inheriting from `PowerStencil::SystemEntityDefinitions::ProjectEntity`
9
9
  To express relations between entities you should use the ActiveRecord-like
10
10
  syntax provided by the `universe_compiler` gem.
11
11
 
12
12
 
13
13
  __It is strongly advised to keep this directory under source control__
14
14
 
15
- This should be the PowerStencil default behaviour.
15
+ This should be the PowerStencil default behaviour.
16
+
17
+ example class:
18
+
19
+ ```ruby
20
+ class ExampleEntity < PowerStencil::SystemEntityDefinitions::ProjectEntity
21
+ entity_type :example
22
+
23
+ [...]
24
+
25
+ end
26
+ ```
@@ -14,7 +14,7 @@ module PowerStencil
14
14
 
15
15
  def execute
16
16
  setup_project_path
17
- # log_startup_context
17
+ # log_startup_context
18
18
  puts_and_logs "Creating new project structure in '#{config[:'project-path']}'", check_verbose: false
19
19
  PowerStencil::Project::Base.create_project_tree config[:'project-path']
20
20
  puts_and_logs 'Done.', check_verbose: false
@@ -44,4 +44,4 @@ module PowerStencil
44
44
  end
45
45
 
46
46
  end
47
- end
47
+ end
@@ -55,10 +55,15 @@ module PowerStencil
55
55
  def generate_build_files(entity_to_build, target_path)
56
56
  logger.info "Rendering '#{entity_to_build.as_path}' templates in '#{target_path}'"
57
57
  render_source entity_to_build.templates_path, target_path, main_entry_point: entity_to_build.as_path
58
+ render_entity entity_to_build, target_path if entity_to_build.class.provides_own_build?
58
59
  logger.info "Detemplatized files generated in '#{target_path}'"
59
60
  manage_build_links target_path
60
61
  end
61
62
 
63
+ def render_entity(entity_to_build, target_path)
64
+ entity_to_build.class.entity_build entity_to_build, target_path
65
+ end
66
+
62
67
  def post_build_hook(entity_to_build, files_path)
63
68
  case entity_to_build.type
64
69
  when :simple_exec
@@ -127,7 +132,7 @@ module PowerStencil
127
132
  target_plugin = project.plugins[target_plugin_name]
128
133
  raise PowerStencil::Error, "Could not find plugin '#{target_plugin_name}' !" if target_plugin.nil?
129
134
  if target_plugin.capabilities[:generate_build_files]
130
- target_plugin.generate_build_files entity_to_build, target_path
135
+ target_plugin.generate_build_files entity_to_build, target_path, &:generate_build_files
131
136
  else
132
137
  logger.info 'Falling back to PowerStencil core build files generation process...'
133
138
  generate_build_files entity_to_build, target_path
@@ -8,7 +8,7 @@ module PowerStencil
8
8
 
9
9
  def render_erb_template(source, context)
10
10
  logger.debug "Using ERB to render file '#{source}'"
11
- ERB.new(File.read(source), nil, '-').result(context)
11
+ ERB.new(File.read(source), trim_mode: '-').result(context)
12
12
  rescue => e
13
13
  logger.debug PowerStencil::Error.report_error(e)
14
14
  raise PowerStencil::Error, "Error rendering '#{source}': '#{e.message}'"
@@ -15,7 +15,7 @@ module PowerStencil
15
15
  def bootstrap(cmd_line_args = ARGV.dup)
16
16
  setup_climatic cmd_line_args
17
17
  logger.debug 'Starting PowerStencil initialization...'
18
- setup_system_processors
18
+ register_system_processors
19
19
  setup_universe_compiler_logger
20
20
  project fail_on_error: false
21
21
  logger.debug 'PowerStencil initialization complete'
@@ -38,7 +38,7 @@ module PowerStencil
38
38
 
39
39
  end
40
40
 
41
- def setup_system_processors
41
+ def register_system_processors
42
42
  logger.debug 'Registering system processors'
43
43
  {
44
44
  '' => PowerStencil::CommandProcessors::Root,
@@ -17,6 +17,10 @@ module PowerStencil
17
17
  not @build_plugin_name.nil?
18
18
  end
19
19
 
20
+ def provides_own_build?
21
+ respond_to? :entity_build
22
+ end
23
+
20
24
  end
21
25
 
22
26
  end
@@ -24,7 +24,6 @@ class UltraCommandLine::Manager::Base
24
24
  end
25
25
  end
26
26
 
27
- # private
28
27
 
29
28
  def internal_provider_mapping
30
29
  @internal_provider_mapping ||= {}
@@ -32,4 +31,22 @@ class UltraCommandLine::Manager::Base
32
31
 
33
32
  end
34
33
 
34
+ # def contribute_to_definition(hash, layer_name: :unknown_layer)
35
+ # super
36
+ # end
37
+
38
+
39
+
40
+ def processor
41
+ processor_candidates = processors_hash.fetch(command(cmd_line_args).name, []) .select do |processor|
42
+ processor.check_params command.cmd_line_args
43
+ end
44
+ raise UltraCommandLine::Error, 'No processor found for this command line' if processor_candidates.empty?
45
+ return processor_candidates.first if processor_candidates.size == 1
46
+
47
+
48
+ raise UltraCommandLine::Error, 'Too many possible processors' unless processor_candidates.size == 1
49
+ processor_candidates.first
50
+ end
51
+
35
52
  end
@@ -1,3 +1,3 @@
1
1
  module PowerStencil
2
- VERSION = '0.9.8'.freeze
2
+ VERSION = '0.10.0'.freeze
3
3
  end
@@ -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.38'
28
+ spec.add_dependency 'climatic', '~> 0.2.40'
29
29
  spec.add_dependency 'dir_glob_ignore', '~> 0.3'
30
30
  spec.add_dependency 'universe_compiler', '~> 0.5.6'
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.8
4
+ version: 0.10.0
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-22 00:00:00.000000000 Z
11
+ date: 2023-07-24 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.38
61
+ version: 0.2.40
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.38
68
+ version: 0.2.40
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dir_glob_ignore
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -329,12 +329,13 @@ metadata:
329
329
  documentation_uri: https://gitlab.com/tools4devops/power_stencil/blob/master/README.md
330
330
  source_code_uri: https://gitlab.com/tools4devops/power_stencil
331
331
  homepage_uri: https://powerstencil.brizone.org/
332
- post_install_message: "\nThank you for installing PowerStencil 0.9.8 !\nFrom the command
333
- line you can run `power_stencil --help`\nIf your shell is not completing the command:\n
334
- \ If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial Website
335
- \ : https://powerstencil.brizone.org/\nFull documentation here : https://gitlab.com/tools4devops/power_stencil/blob/master/README.md\nFeel
336
- free to report issues: https://gitlab.com/tools4devops/power_stencil/issues\n\nType
337
- 'power_stencil adm --zsh-completion' to install auto-completion for zsh.\n\n "
332
+ post_install_message: "\nThank you for installing PowerStencil 0.10.0 !\nFrom the
333
+ command line you can run `power_stencil --help`\nIf your shell is not completing
334
+ the command:\n If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial
335
+ Website : https://powerstencil.brizone.org/\nFull documentation here :
336
+ https://gitlab.com/tools4devops/power_stencil/blob/master/README.md\nFeel free to
337
+ report issues: https://gitlab.com/tools4devops/power_stencil/issues\n\nType 'power_stencil
338
+ adm --zsh-completion' to install auto-completion for zsh.\n\n "
338
339
  rdoc_options: []
339
340
  require_paths:
340
341
  - lib
@@ -349,8 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
349
350
  - !ruby/object:Gem::Version
350
351
  version: '0'
351
352
  requirements: []
352
- rubyforge_project:
353
- rubygems_version: 2.5.1
353
+ rubygems_version: 3.3.26
354
354
  signing_key:
355
355
  specification_version: 4
356
356
  summary: PowerStencil is the Swiss-army knife templating workflow for developers and