power_stencil 0.3.9 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 63b5292b83c11cf7fb867257189af4945225de5b
4
- data.tar.gz: 104f23b19dfc0d0851e06bdb34f8e8ec5fe2c59e
3
+ metadata.gz: cfcce3efeec28087203d838f24ebef0e9353aaa0
4
+ data.tar.gz: 80e819c42c39ce84926cd38facd980038888300a
5
5
  SHA512:
6
- metadata.gz: e6baf3d3caecbf9a102dbc42c272db77d7092dc77b97be2a87f98f6f1f807d3229c45fddcf36fc03bfbc678eb24aff074fdd9473652cc688e38a05e875aba76f
7
- data.tar.gz: 41353ec4a84de5acabee14f9338ba9f311e9aed5c9a82588037cba254ad22c8bbc8d5a8ca82da0e940e5fd48183984832e0b9147dd4bb022821516d39b757886
6
+ metadata.gz: 60b1544795adc76d57b7749c14173708fc89bcbb265ee4ad044dd8c539a5d48884c7e38ad8bbbf0904f0a429ff1eb2a3bce0aff41782939b70d4f5f1c20e4682
7
+ data.tar.gz: afe028a613e6f4e4236fb019b501316202c95bb736a8e1e4090506b9d0feba3ed7b87add6795f38c4df1de8884b2bf166382df45d99dd3e9d1d828c339419102
data/.gitignore CHANGED
@@ -10,4 +10,5 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  /.idea/
13
+ /.ruby-version
13
14
  /test/test_project/build/
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in power_stencil.gemspec
4
+
4
5
  gemspec
data/README.md CHANGED
@@ -13,6 +13,7 @@ PowerStencil
13
13
  - [Creating a `PowerStencil` project](#creating-a-powerstencil-project)
14
14
  - [`PowerStencil` project structure](#powerstencil-project-structure)
15
15
  - [Getting started](#getting-started)
16
+ - [Project status](#project-status)
16
17
  - [Contributing](#contributing)
17
18
  - [License](#license)
18
19
  - [Code of Conduct](#code-of-conduct)
@@ -23,7 +24,7 @@ PowerStencil
23
24
 
24
25
  `PowerStencil` proposes a radical approach on how to manage your shared configuration.
25
26
 
26
- Configuration is one of the most complex things to maintain, and anyone who participated in a large scale piece of software or documentation knows how complex it is to maintain, keep consistent and avoid duplication on the long run across the various projects that may share this configuration.
27
+ **Configuration** is one of the most complex things to maintain, and anyone who participated in a large scale piece of software or documentation knows how complex it is to maintain, **keep consistent and avoid duplication** on the long run across the various projects that may share this configuration.
27
28
 
28
29
  From a very high level point of view, the workfow `PowerStencil` proposes looks like:
29
30
 
@@ -35,6 +36,8 @@ It is a common pattern to introduce a database to manage shared configuration fo
35
36
 
36
37
  A `PowerStencil` project is composed of a data repository and a pretty standard templating flow to generate whatever is needed by your project or organization and **with `PowerStencil` everything is maintained in a git repository**: data, templates, specific code **without sacrificing on data integrity and relational features**. No more config loss, no more change applied without a full lineage.
37
38
 
39
+ **:information_source: With `PowerStencil` data can either be managed as documents to edit (Yaml) or code !!**. Use the best method depending on what you are doing.
40
+
38
41
  The `PowerStencil` gem provides the `power_stencil` executable which is a pluggable CLI to:
39
42
 
40
43
  - Manage the project data
@@ -174,6 +177,9 @@ And course, you may:
174
177
  - Read the [F.A.Q.]
175
178
  - See some real world [example use cases].
176
179
 
180
+ # Project status
181
+
182
+ Check `PowerStencil` [status in the F.A.Q.].
177
183
 
178
184
  # Contributing
179
185
 
@@ -196,6 +202,7 @@ Everyone interacting in the PowerStencil project’s codebases, issue trackers,
196
202
  [plugins]: doc/plugins.md "Plugins in PowerStencil"
197
203
  [example use cases]: doc/example_use_cases.md "Example uses cases using PowerStencil"
198
204
  [F.A.Q.]: doc/faq.md "PowerStencil F.A.Q."
205
+ [status in the F.A.Q.]: doc/faq.md#what-is-the-status-of-powerstencil- "PowerStencil project status"
199
206
  [code of conduct]: CODE_OF_CONDUCT.md
200
207
 
201
208
  <!-- Code links -->
@@ -208,4 +215,4 @@ Everyone interacting in the PowerStencil project’s codebases, issue trackers,
208
215
  [MIT License]: http://opensource.org/licenses/MIT "The MIT license"
209
216
  [ERB]: https://ruby-doc.org/stdlib-2.6.3/libdoc/erb/rdoc/ERB.html "Quick ERB description"
210
217
  [Haml]: http://haml.info/ "The templating engine for XML-like documents"
211
- [Ruby]: https://www.ruby-lang.org "The powerful Ruby language"
218
+ [Ruby]: https://www.ruby-lang.org "The powerful Ruby language"
@@ -272,7 +272,12 @@ $ power_stencil get base_entity --names-only --regexp
272
272
 
273
273
  - my_1st_entity
274
274
  ```
275
- There are 2 other options (`--compiled` and `--scenario`) but they will be covered in the scope of [builds].
275
+ There are 2 other interesting options (`--compiled` and `--scenario`) but they will be covered in the scope of [builds].
276
+
277
+ :information_source: Another very interesting option is `--graph`. **It will generate a [Graphviz] graph of the relations of the entities within the repository.** This is actually provided by the [universe_compiler] Gem. The display of this graph can be completed customized at project level (the 2 versioned and unversioned config files), at entity level (by providing a `#graphviz_label` method in your entities. You'll see later in that document what it means in [creating custom entity types](#creating-custom-entity-types)), and even at plugin level.
278
+
279
+ By default the graph is generated in a temporary folder, but of course you can specify the file name using the `--graph-file` options. The default is to generate an svg file (best viewed in a browser as it contains _hover_ over its nodes).
280
+
276
281
 
277
282
  ## Creating entities
278
283
 
@@ -664,6 +669,8 @@ So you see that if we try to set parent with something wrong, the accessor seems
664
669
 
665
670
  :information_source: The `name` property of the `has_one` directive is optional. If not present the field will be named from the entity_type referenced instead...
666
671
 
672
+ **:warning: See more advanced features, like reverse methods in the [universe_compiler advanced relations documentation].**
673
+
667
674
  ### has_many
668
675
 
669
676
  Once you know the `has_one` directive, you should not be surprised by the `has_many` directive...
@@ -712,6 +719,8 @@ Which translates at persistence level as:
712
719
  ```
713
720
  Nice !
714
721
 
722
+ **:warning: See more advanced features, like reverse methods in the [universe_compiler advanced relations documentation].**
723
+
715
724
  ### is_array
716
725
 
717
726
  You can define a field as being an array:
@@ -963,4 +972,6 @@ Now you know an entity type is just a regular Ruby class. As such you could add
963
972
  [Pry]: https://github.com/pry/pry "The awesome Pry console"
964
973
  [ActiveRecord]: https://guides.rubyonrails.org/active_record_basics.html "The ultimate ORM"
965
974
  [Ruby On Rails]: https://rubyonrails.org/ "One of the best Web framework"
966
- [universe_compiler]: https://gitlab.com/tools4devops/universe_compiler "The underlying engine to manage entities and compilation !"
975
+ [universe_compiler]: https://gitlab.com/tools4devops/universe_compiler "The underlying engine to manage entities and compilation !"
976
+ [universe_compiler advanced relations documentation]: https://gitlab.com/tools4devops/universe_compiler#advanced-relations "Advanced relational features"
977
+ [Graphviz]: (https://www.graphviz.org/) "Graph Visualization Software"
@@ -148,6 +148,11 @@
148
148
  :summary: Displays the query result as a graph.
149
149
  :short_aliases:
150
150
  - g
151
+ graph-file:
152
+ :type: string
153
+ :summary: Displays the query result as a graph in the specified file.
154
+ :long_aliases:
155
+ - gf
151
156
  shell:
152
157
  :banner: |
153
158
  Opens a shell to interact with entities.
@@ -1,4 +1,28 @@
1
1
  # This config file provided by the plugin '<%= main_entry_point %>' will be
2
2
  # automatically merged into the global project config
3
3
 
4
- # :<%= plugin_name %>.property1: value 1
4
+ :<%= plugin_name %>.property1: value 1
5
+
6
+ # Graphviz configuration
7
+ #
8
+ # If you are under Gnome, chances are that you have 'eog' installed
9
+ # or put you own there. Unless in the path specify full path to it:
10
+ # node defines the default graphviz node attributes. In customization
11
+ # each key can be an entity type, that you can fully customize using the
12
+ # same mechanism
13
+
14
+ #:graphviz:
15
+ # :viewer: eog '%s'
16
+ # :label: < Repository Entities <br/> >
17
+ # :labelloc: :t
18
+ # :show_config: false
19
+ # :file_type: svg
20
+ # :graph_type: :digraph
21
+ # :node:
22
+ # :shape: box
23
+ # :style: filled
24
+ # :fillcolor: grey95
25
+ # :customizations:
26
+ # :my_custom_entity:
27
+ # :shape: circle
28
+ # :fillcolor: red
@@ -9,7 +9,6 @@ module <%= plugin_module_name %>
9
9
 
10
10
  def execute
11
11
  puts '<%= main_entry_point.upcase %> PLUGIN WAZ HERE'
12
- puts_and_logs config[].to_yaml
13
12
  end
14
13
 
15
14
 
@@ -82,7 +82,20 @@
82
82
  # are automatically discovered and loaded.
83
83
  :project_plugins: []
84
84
 
85
-
85
+ # Graphviz
86
+
87
+ # Customize graphviz properties
88
+ :graphviz:
89
+ :label: < Repository Entities <br/> >
90
+ :labelloc: :t
91
+ :show_config: false
92
+ :file_type: :svg
93
+ :graph_type: :digraph
94
+ :node:
95
+ :shape: box
96
+ :style: filled
97
+ :fillcolor: grey95
98
+ :customizations: {}
86
99
 
87
100
  # MISC
88
101
 
@@ -1,4 +1,28 @@
1
1
  # This config file provided by the plugin '<%= main_entry_point %>' will be
2
2
  # automatically merged into the global project config
3
3
 
4
- # :<%= plugin_name %>.property1: value 1
4
+ :<%= plugin_name %>.property1: value 1
5
+
6
+ # Graphviz configuration
7
+ #
8
+ # If you are under Gnome, chances are that you have 'eog' installed
9
+ # or put you own there. Unless in the path specify full path to it:
10
+ # node defines the default graphviz node attributes. In customization
11
+ # each key can be an entity type, that you can fully customize using the
12
+ # same mechanism
13
+
14
+ #:graphviz:
15
+ # :viewer: eog '%s'
16
+ # :label: < Repository Entities <br/> >
17
+ # :labelloc: :t
18
+ # :show_config: false
19
+ # :file_type: svg
20
+ # :graph_type: :digraph
21
+ # :node:
22
+ # :shape: box
23
+ # :style: filled
24
+ # :fillcolor: grey95
25
+ # :customizations:
26
+ # :my_custom_entity:
27
+ # :shape: circle
28
+ # :fillcolor: red
@@ -9,7 +9,6 @@ module <%= plugin_module_name %>
9
9
 
10
10
  def execute
11
11
  puts '<%= main_entry_point.upcase %> PLUGIN WAZ HERE'
12
- puts_and_logs config[].to_yaml
13
12
  end
14
13
 
15
14
 
@@ -2,7 +2,32 @@
2
2
  # THIS FILE *IS NOT* MEANT TO BE VERSIONED (and is not by default)
3
3
  # You can use it for any configuration you want to keep local
4
4
 
5
+ # Common configuration
6
+
5
7
  # :debug: true
6
- # :log-level: 2
8
+ :log-level: 2
7
9
  # :debug-on-stderr: true
8
- # :verbose: true
10
+ # :verbose: true
11
+
12
+ # Graphviz configuration
13
+ #
14
+ # If you are under Gnome, chances are that you have 'eog' installed
15
+ # or put you own there. Unless in the path specify full path to it:
16
+ # node defines the default graphviz node attributes. In customization
17
+ # each key can be an entity type, that you can fully customize using the
18
+ # same mechanism
19
+
20
+ #:graphviz:
21
+ # :viewer: eog '%s'
22
+ # :label: < Repository Entities <br/> >
23
+ # :labelloc: :t
24
+ # :show_config: false
25
+ # :file_type: svg
26
+ # :node:
27
+ # :shape: box
28
+ # :style: filled
29
+ # :fillcolor: grey95
30
+ # :customizations:
31
+ # :my_custom_entity:
32
+ # :shape: circle
33
+ # :fillcolor: red
@@ -3,4 +3,27 @@
3
3
  # You can use it for any configuration you want to keep at repository level
4
4
 
5
5
  # If you want to ensure a minimal version number of PowerStencil
6
- :min_power_stencil_version: <%= PowerStencil::VERSION %>
6
+ :min_power_stencil_version: <%= PowerStencil::VERSION %>
7
+
8
+ # Graphviz configuration
9
+ #
10
+ # If you are under Gnome, chances are that you have 'eog' installed
11
+ # or put you own there. Unless in the path specify full path to it:
12
+ # node defines the default graphviz node attributes. In customization
13
+ # each key can be an entity type, that you can fully customize using the
14
+ # same mechanism
15
+
16
+ #:graphviz:
17
+ # :viewer: eog '%s'
18
+ # :label: < Repository Entities <br/> >
19
+ # :labelloc: :t
20
+ # :show_config: false
21
+ # :file_type: svg
22
+ # :node:
23
+ # :shape: box
24
+ # :style: filled
25
+ # :fillcolor: grey95
26
+ # :customizations:
27
+ # :my_custom_entity:
28
+ # :shape: circle
29
+ # :fillcolor: red
@@ -13,6 +13,7 @@ require 'power_stencil/utils/directory_processor'
13
13
  require 'power_stencil/utils/secure_require'
14
14
  require 'power_stencil/utils/gem_utils'
15
15
  require 'power_stencil/utils/file_edit'
16
+ require 'power_stencil/utils/graphviz'
16
17
 
17
18
  require 'climatic/script/unimplemented_processor'
18
19
  require 'power_stencil/project/proxy'
@@ -7,15 +7,25 @@ module PowerStencil
7
7
  include Climatic::Proxy
8
8
  include PowerStencil::Project::Proxy
9
9
  include PowerStencil::CommandProcessors::EntityHelper
10
+ include PowerStencil::Utils::Graphviz
10
11
 
11
12
  def execute
12
13
  targets = targets_from_criteria analyse_extra_params, project.engine.root_universe
13
- targets.sort{|a, b| a.as_path <=> b.as_path}.each do |target|
14
- display_entity target
14
+ if config[:graph] || config[:'graph-file']
15
+ filename = graph_entities targets, config[:'graph-file']
16
+ msg = "Graphviz graph saved into '#{filename}'."
17
+ logger.info msg
18
+ puts msg
19
+ if config[:graphviz][:viewer]
20
+ cmd = config[:graphviz][:viewer] % [filename]
21
+ `#{cmd}`
22
+ end
23
+ else
24
+ targets.sort{|a, b| a.as_path <=> b.as_path}.each {|target| display_entity target }
15
25
  end
16
26
  end
17
-
18
27
  end
19
28
 
20
29
  end
30
+
21
31
  end
@@ -13,10 +13,36 @@ module PowerStencil
13
13
  e.nil? ? entity(type.to_sym, name) : e
14
14
  end
15
15
 
16
- def entity(type, name)
16
+ def entity(type_or_path, name = nil)
17
+ type, name = if name.nil?
18
+ md = type_or_path.match /^(?<type>[^\/]+)\/(?<name>.*)$/
19
+ if md
20
+ [md['type'].to_sym, md['name']]
21
+ else
22
+ raise PowerStencil::Error, "Invalid entity id: '#{type_or_path}'"
23
+ end
24
+ else
25
+ [type_or_path, name]
26
+ end
17
27
  PowerStencil.project.engine.entity type, name, @universe
18
28
  end
19
29
 
30
+ # Need to implement a `replace` method which would rename files before...
31
+ # def edit_entity(type, name)
32
+ # tmp = Object.new
33
+ # tmp.extend PowerStencil::Utils::FileEdit
34
+ # org = entity(type, name)
35
+ # unless org.nil?
36
+ # mod = tmp.securely_edit_entity entity(type, name)
37
+ # raise PowerStencil::Error "You cannot "
38
+ #
39
+ #
40
+ # universe = org.universe
41
+ # universe.delete org
42
+ # universe.add mod
43
+ # end
44
+ # end
45
+
20
46
  def entities(criterion: nil, value: nil, &filter_block)
21
47
  PowerStencil.project.engine.entities @universe, criterion: criterion, value: value, &filter_block
22
48
  end
@@ -45,8 +45,10 @@ module PowerStencil
45
45
  def delete_entity(work_universe, type, name, delete_files: false)
46
46
  entity_to_delete = work_universe.get_entity type, name
47
47
  get_user_confirmation prompt: "Are you sure you want delete '#{[type, name].join '/'}' ?" do
48
+ work_universe.delete(entity_to_delete).each do |impacted_entity, _|
49
+ impacted_entity.save raise_error: false, force_save: true
50
+ end
48
51
  entity_to_delete.delete force_files_deletion: delete_files
49
- entity_to_delete.universe = nil
50
52
  entity_to_delete
51
53
  end
52
54
  end
@@ -3,8 +3,8 @@ module PowerStencil
3
3
 
4
4
  module EntityProjectCommon
5
5
 
6
- def save(uri = source_uri, force_files_generation: false)
7
- super(uri)
6
+ def save(uri = source_uri, raise_error: true, force_save: false, force_files_generation: false )
7
+ super(source_uri, raise_error: raise_error, force_save: force_save)
8
8
  unless PowerStencil.project.entity_type_templates[type].nil?
9
9
  PowerStencil.project.generate_entity_dir_for_entity self, force: force_files_generation
10
10
  end
@@ -3,7 +3,7 @@ module PowerStencil
3
3
 
4
4
  module NonPersistent
5
5
 
6
- def save(uri = source_uri)
6
+ def save
7
7
  PowerStencil.logger.debug "Won't save '#{self.class.to_s}' because defined as non persistent"
8
8
  self
9
9
  end
@@ -26,10 +26,10 @@ module PowerStencil
26
26
  super(raise_error: raise_error)
27
27
  end
28
28
 
29
- def save(uri = source_uri, force_files_generation: false)
30
- valid?
29
+ def save(uri = source_uri, raise_error: true, force_save: false, force_files_generation: false )
30
+ valid? raise_error: raise_error
31
31
  self.post_process.save
32
- super(uri, force_files_generation: force_files_generation)
32
+ super
33
33
  end
34
34
 
35
35
  def delete(force_files_deletion: false)
@@ -25,7 +25,7 @@ module PowerStencil
25
25
  def securely_edit_entity(entity, &modifications_validation_block)
26
26
  initial_uri = entity.source_uri
27
27
  modified_entity = nil
28
- Tempfile.create([entity.type.to_s, entity.name.to_s]) do |tmpfile|
28
+ Tempfile.create(["#{entity.type.to_s}_#{entity.name.to_s}", '.yaml']) do |tmpfile|
29
29
  tmpfile.puts entity.to_yaml
30
30
  tmpfile.flush
31
31
  securely_edit_file(tmpfile, &modifications_validation_block)
@@ -0,0 +1,61 @@
1
+ module PowerStencil
2
+ module Utils
3
+
4
+ module Graphviz
5
+
6
+ include UniverseCompiler::Utils::Graphviz
7
+
8
+ def graph_entities(entities, filename = nil)
9
+ entities_to_process = unless config[:graphviz][:show_config]
10
+ entities.reject {|e| e.type == :project_config}
11
+ else
12
+ entities
13
+ end
14
+
15
+ graph_options = {
16
+ output_file_name: filename,
17
+ graph_type: config[:graphviz][:graph_type],
18
+ file_type: config[:graphviz][:file_type]
19
+ }
20
+
21
+ graph_entities_to_file entities_to_process, graph_options do |graph, cache|
22
+ graph[:label] = config[:graphviz][:label]
23
+ graph[:labelloc] = config[:graphviz][:labelloc]
24
+ graph.each_node do |node_name|
25
+ node = graph.get_node node_name
26
+ entity = cache[:by_node][node]
27
+
28
+ # Set default node attributes
29
+ config[:graphviz][:node].each do |k,v|
30
+ node[k] = v
31
+ end
32
+ fields_to_display = {}
33
+
34
+ # Define node tooltip
35
+ entity.fields.keys.each do |field_name|
36
+ constraints = entity.class.fields_constraints[field_name]
37
+ unless constraints.nil?
38
+ # Remove relations as they are represented as edges
39
+ next if constraints.keys.include? :has_one
40
+ next if constraints.keys.include? :has_many
41
+ end
42
+ fields_to_display[field_name] = entity[field_name]
43
+ end
44
+ node[:tooltip] = fields_to_display.to_yaml
45
+
46
+ # specific customizations
47
+ if config[:graphviz][:customizations][entity.type]
48
+ config[:graphviz][:customizations][entity.type].each do |k,v|
49
+ node[k] = v
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module PowerStencil
2
- VERSION = '0.3.9'.freeze
2
+ VERSION = '0.4.4'.freeze
3
3
  end
@@ -25,9 +25,9 @@ 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', '>= 0.2.28'
28
+ spec.add_dependency 'climatic', '~> 0.2.29'
29
29
  spec.add_dependency 'dir_glob_ignore', '~> 0.3'
30
- spec.add_dependency 'universe_compiler', '~> 0.2', '>= 0.2.16'
30
+ spec.add_dependency 'universe_compiler', '~> 0.4.1'
31
31
  spec.add_dependency 'pry'
32
32
 
33
33
  spec.post_install_message = %Q{
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.3.9
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent B.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-13 00:00:00.000000000 Z
11
+ date: 2019-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,20 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.2'
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: 0.2.28
61
+ version: 0.2.29
65
62
  type: :runtime
66
63
  prerelease: false
67
64
  version_requirements: !ruby/object:Gem::Requirement
68
65
  requirements:
69
66
  - - "~>"
70
67
  - !ruby/object:Gem::Version
71
- version: '0.2'
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: 0.2.28
68
+ version: 0.2.29
75
69
  - !ruby/object:Gem::Dependency
76
70
  name: dir_glob_ignore
77
71
  requirement: !ruby/object:Gem::Requirement
@@ -92,20 +86,14 @@ dependencies:
92
86
  requirements:
93
87
  - - "~>"
94
88
  - !ruby/object:Gem::Version
95
- version: '0.2'
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: 0.2.16
89
+ version: 0.4.1
99
90
  type: :runtime
100
91
  prerelease: false
101
92
  version_requirements: !ruby/object:Gem::Requirement
102
93
  requirements:
103
94
  - - "~>"
104
95
  - !ruby/object:Gem::Version
105
- version: '0.2'
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- version: 0.2.16
96
+ version: 0.4.1
109
97
  - !ruby/object:Gem::Dependency
110
98
  name: pry
111
99
  requirement: !ruby/object:Gem::Requirement
@@ -256,6 +244,7 @@ files:
256
244
  - lib/power_stencil/utils/file_edit.rb
257
245
  - lib/power_stencil/utils/file_helper.rb
258
246
  - lib/power_stencil/utils/gem_utils.rb
247
+ - lib/power_stencil/utils/graphviz.rb
259
248
  - lib/power_stencil/utils/secure_require.rb
260
249
  - lib/power_stencil/utils/semantic_version.rb
261
250
  - lib/power_stencil/version.rb
@@ -264,7 +253,7 @@ homepage: https://gitlab.com/tools4devops/power_stencil
264
253
  licenses:
265
254
  - MIT
266
255
  metadata: {}
267
- post_install_message: "\nThank you for installing PowerStencil 0.3.9 !\nFrom the command
256
+ post_install_message: "\nThank you for installing PowerStencil 0.4.4 !\nFrom the command
268
257
  line you can run `power_stencil --help`\nIf your shell is not completing the command:\n
269
258
  \ If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nFull documentation
270
259
  here : https://gitlab.com/tools4devops/power_stencil/blob/master/README.md\nFeel