power_stencil 0.4.18 → 0.4.19

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
  SHA1:
3
- metadata.gz: 80af1c57689a2ba89246da59fb373577dd48a31b
4
- data.tar.gz: 1c91918d21e15a9730929db9d58309b415c6098d
3
+ metadata.gz: 9e3d1927e39aa8060f7d38ce99b83f28ff6ef4aa
4
+ data.tar.gz: 9cfd4aeae7c9dbca4ebd76f51d61089df0521f68
5
5
  SHA512:
6
- metadata.gz: f4ee7f37502473381418bc6184c6436f5ab05d159ed819d4bfbd4cc39554130cddd9a2d0742db82db7f7103738d7b7614df3cd1753e0d29a9713fc98608d5999
7
- data.tar.gz: bd212747f02e36cc2d3d93f37246152c34ba7552af969757cada09122063ca1633e05b47a549abd9d703bb7bff3e9a8f8bc380f53b767475b0477cc4a745e5e5
6
+ metadata.gz: 2168d96b8d1a52ebc324b7931b59d712d364e3e352a7fd573743cb718fb835b88d92926172c9aca316e0743436c04eba1c6cb032914c8fced3a702ed4cc23cc3
7
+ data.tar.gz: b729958fc82e4dddc9f7180ca3198aabf32bc1475c61ad4258674db055d2df1af8b7c1432a9e34c79560419ca1137ab53c8b853e0a4e10cac8e5847766da08a1
data/README.md CHANGED
@@ -119,6 +119,7 @@ PowerStencil is the Swiss-army knife templating workflow for developers and ops.
119
119
  * create: Creates entities in the repository ...
120
120
  * edit: Edit entities from repository ...
121
121
  * delete: Delete entities from repository ...
122
+ * describe: Detailed information about entity types ...
122
123
  * build: Builds entities ...
123
124
  ```
124
125
 
@@ -146,7 +146,32 @@ Here are the main methods:
146
146
  - `build_target` will return the entity that you are currently building.
147
147
  - `project_config` is a shortcut to the project entity. You could actually retrieve it using the `entity(:project_config, 'Project Config')` method.
148
148
 
149
- And of course you have access like in `power_stencil shell` to any class brought by `PowerStencil`, you could create entities there, destroy some, **but you should not do it**, as it would be very weird to do that during the process of detemplating !
149
+ And of course you have access like in `power_stencil shell` to any class brought by `PowerStencil`, you could create entities there, destroy some, **but you should not do it**, as doing this during the process of detemplating could lead to strange behaviours !
150
+
151
+ Nevertheless you can of course use entities data and methods within your templates. Any data can be directly accessed using [entity field] mechanism. But entities may bring as well methods you may want to use within your templates. How can we know what can be done with an entity **without reading the code** ? The answer is `power_stencil describe`...
152
+
153
+ :information_source: If you do `power_stencil describe` on any entity type, you will get a comprehensive report of what you can do with this or this entity type (by default all entity types are displayed).
154
+
155
+ Here is a (not so interesting) example:
156
+
157
+ ```
158
+ $ power_stencil describe simple_exec
159
+ --------------------------------------------------------------------------------
160
+ => simple_exec (class: PowerStencil::SystemEntityDefinitions::SimpleExec)
161
+ - PARENT ENTITY TYPE: base_entity
162
+ - FIELDS:
163
+ - description
164
+ - post_process:
165
+ - has_one: process_descriptor
166
+ - not_null: true
167
+ - METHODS:
168
+ - delete
169
+ - valid?
170
+ - save
171
+ ```
172
+
173
+ This should be self explanatory, there is another part that could be displayed in case you defined complex relation using the [reverse methods] mechanism...
174
+
150
175
 
151
176
  # Where do I create templates ?
152
177
 
@@ -324,7 +349,8 @@ Flawless victory !!
324
349
  [plugins]: plugins.md "Plugins in PowerStencil"
325
350
  [example use cases]: example_use_cases.md "Example uses cases using PowerStencil"
326
351
  [buildable]: entities.md#buildable-and-buildable_by "How to make an entity buildable ?"
327
-
352
+ [entity field]: entities.md#field "How to access basic entity data"
353
+ [reverse methods]: entities.md#has_one "Check reverse methods"
328
354
  <!-- Code links -->
329
355
 
330
356
 
@@ -201,7 +201,7 @@
201
201
  :options:
202
202
  property:
203
203
  :type: array
204
- :summary: Specifiies a first-level property for the entity
204
+ :summary: Specifies a first-level property for the entity
205
205
  :short_aliases:
206
206
  - p
207
207
  edit:
@@ -230,7 +230,7 @@
230
230
 
231
231
  Usage:
232
232
 
233
- edit [object_type[[/ ]object_name]] [options]
233
+ edit [entity_type[[/ ]entity_name]] [options]
234
234
 
235
235
  Edits repository entities. Parameters are used the same way as in 'get'.
236
236
  :options:
@@ -246,7 +246,7 @@
246
246
 
247
247
  Usage:
248
248
 
249
- delete [object_type[[/ ]object_name]] [options]
249
+ delete [entity_type[[/ ]entity_name]] [options]
250
250
 
251
251
  Deletes repository entities. Parameters are used the same way as in 'get'.
252
252
  :options:
@@ -254,6 +254,16 @@
254
254
  delete-files:
255
255
  :type: bool
256
256
  :summary: Will also remove files related to the entity.
257
+ describe:
258
+ :banner: |
259
+ Detailed information about entity types.
260
+
261
+ Usage:
262
+
263
+ describe [entity_type]* [options]
264
+
265
+ Displays information about core properties of given entity types.
266
+ By default will describe all entity types.
257
267
  build:
258
268
  :banner: |
259
269
  Builds entities.
@@ -32,6 +32,7 @@ require 'power_stencil/command_processors/delete'
32
32
  require 'power_stencil/command_processors/shell'
33
33
  require 'power_stencil/command_processors/plugin'
34
34
  require 'power_stencil/command_processors/build'
35
+ require 'power_stencil/command_processors/describe'
35
36
 
36
37
 
37
38
  module PowerStencil
@@ -0,0 +1,19 @@
1
+ module PowerStencil
2
+ module CommandProcessors
3
+
4
+ class Describe
5
+
6
+ include Climatic::Script::UnimplementedProcessor
7
+ include Climatic::Proxy
8
+ include PowerStencil::Project::Proxy
9
+ include PowerStencil::CommandProcessors::EntityHelper
10
+
11
+ def execute
12
+ targets = extra_params_to_entity_types
13
+ describe_entity_types targets
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -9,6 +9,49 @@ module PowerStencil
9
9
  end
10
10
  end
11
11
 
12
+ def describe_entity_types(entity_types)
13
+ report = {}
14
+ project.engine.available_entity_types.each { |entity_type| report = build_entity_type_report entity_type, report }
15
+ scoped_classes = report.keys
16
+
17
+ report.select{|klass, _| entity_types.include? klass.entity_type}
18
+ .sort_by {|klass, _| klass.entity_type.to_s}
19
+ .each do |klass, info|
20
+ puts '-' * 80
21
+ puts "=> #{klass.entity_type} (class: #{klass.name})"
22
+ puts " - PARENT ENTITY TYPE: #{klass.superclass.entity_type}" if scoped_classes.include? klass.superclass
23
+ unless info[:fields].empty?
24
+ puts ' - FIELDS:'
25
+ info[:fields].each do |field_name, constraints|
26
+ if constraints.empty?
27
+ puts " - #{field_name}"
28
+ else
29
+ puts " - #{field_name}:"
30
+ constraints.each do |name, value|
31
+ puts " - #{name}: #{value}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ unless info[:methods].empty?
37
+ puts ' - METHODS:'
38
+ info[:methods].each do |method_name, _|
39
+ puts " - #{method_name}"
40
+ end
41
+ end
42
+ unless info[:special_methods].empty?
43
+ puts ' - SPECIAL METHODS:'
44
+ info[:special_methods].each do |method_name, method_info|
45
+ puts " - #{method_name} (reverse method defined from relation '#{method_info[:source_field]}' in entity type '#{method_info[:source_entity]}')"
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+
54
+
12
55
  def display_entity(entity)
13
56
  puts_and_logs "# Entity '#{entity.name}' (#{entity.type})"
14
57
  if config[:'names-only']
@@ -66,6 +109,20 @@ module PowerStencil
66
109
  end
67
110
  end
68
111
 
112
+ def extra_params_to_entity_types(params = config.command_line_layer.extra_parameters)
113
+ known_entity_types = project.engine.available_entity_types
114
+ return known_entity_types if params.empty?
115
+
116
+ params.map do |possible_entity_type|
117
+ possible_entity_type = possible_entity_type.to_sym
118
+ raise PowerStencil::Error, "Invalid entity type '#{possible_entity_type}' !" unless known_entity_types.include? possible_entity_type
119
+ possible_entity_type
120
+ end
121
+ end
122
+
123
+
124
+
125
+
69
126
  def extra_params_to_entity_search_criteria(params)
70
127
  criteria = []
71
128
  next_entity_reference = EntitySearchReference.new
@@ -101,6 +158,34 @@ module PowerStencil
101
158
  private
102
159
 
103
160
 
161
+ def build_entity_type_report(entity_type, report = {})
162
+ klass = project.engine.available_entities_hash[entity_type]
163
+ report[klass] ||= {fields: {}, methods: {}, special_methods: {}}
164
+ entity_type_info = report[klass]
165
+
166
+ # Fields
167
+ klass.fields_constraints.each do |field_name, constraints|
168
+ next if constraints[:reverse_method]
169
+ entity_type_info[:fields][field_name] = {}
170
+ constraints.each do |constraint_name, constraints_value|
171
+ entity_type_info[:fields][field_name][constraint_name] = constraints_value
172
+ end
173
+ end
174
+ # Methods
175
+ klass.public_instance_methods(false).select do |method_name|
176
+ klass.method_defined? method_name
177
+ end .each do |method_name|
178
+ entity_type_info[:methods][method_name] = klass
179
+ end
180
+ # Special methods
181
+ klass.fields_constraints.each do |method_name, constraints|
182
+ next unless constraints[:reverse_method]
183
+ entity_type_info[:special_methods][method_name] = constraints[:reverse_method]
184
+ end
185
+
186
+ report
187
+ end
188
+
104
189
  def analyse_extra_params(extra_params = config.command_line_layer.extra_parameters, default: [''])
105
190
  params_to_check = if extra_params.empty? then
106
191
  config[:regexp] = true
@@ -48,7 +48,8 @@ module PowerStencil
48
48
  delete: PowerStencil::CommandProcessors::Delete,
49
49
  shell: PowerStencil::CommandProcessors::Shell,
50
50
  plugin: PowerStencil::CommandProcessors::Plugin,
51
- build: PowerStencil::CommandProcessors::Build
51
+ build: PowerStencil::CommandProcessors::Build,
52
+ describe: PowerStencil::CommandProcessors::Describe
52
53
  }.each do |command_name, processor|
53
54
  command_line_manager.register_processor command_line_manager.command_by_alias(command_name),
54
55
  processor.new
@@ -5,7 +5,11 @@ module PowerStencil
5
5
 
6
6
  def check_project_version
7
7
  return if project_version_valid?
8
- raise PowerStencil::Error, msg
8
+ msg = <<~EOM
9
+ This PowerStencil project requires a version of PowerStencil >= #{config[:min_power_stencil_version]} (You are using version #{PowerStencil::VERSION}) !
10
+ You should consider upgrading by doing 'gem install power_stencil'...
11
+ EOM
12
+ raise PowerStencil::Error, msg.chomp
9
13
  end
10
14
 
11
15
  private
@@ -1,3 +1,3 @@
1
1
  module PowerStencil
2
- VERSION = '0.4.18'.freeze
2
+ VERSION = '0.4.19'.freeze
3
3
  end
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.4.18
4
+ version: 0.4.19
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-10-04 00:00:00.000000000 Z
11
+ date: 2019-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -191,6 +191,7 @@ files:
191
191
  - lib/power_stencil/command_processors/check.rb
192
192
  - lib/power_stencil/command_processors/create.rb
193
193
  - lib/power_stencil/command_processors/delete.rb
194
+ - lib/power_stencil/command_processors/describe.rb
194
195
  - lib/power_stencil/command_processors/edit.rb
195
196
  - lib/power_stencil/command_processors/entity_helper.rb
196
197
  - lib/power_stencil/command_processors/get.rb
@@ -260,7 +261,7 @@ metadata:
260
261
  documentation_uri: https://gitlab.com/tools4devops/power_stencil/blob/master/README.md
261
262
  source_code_uri: https://gitlab.com/tools4devops/power_stencil
262
263
  homepage_uri: https://powerstencil.brizone.org/
263
- post_install_message: "\nThank you for installing PowerStencil 0.4.18 !\nFrom the
264
+ post_install_message: "\nThank you for installing PowerStencil 0.4.19 !\nFrom the
264
265
  command line you can run `power_stencil --help`\nIf your shell is not completing
265
266
  the command:\n If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial
266
267
  Website : https://powerstencil.brizone.org/\nFull documentation here :