power_stencil 0.8.13 → 0.8.14

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: 658cd6b4a3099ebad88b964d3d2d29125e2d2632
4
- data.tar.gz: d4593e14e6b18d7dcd7888881d4ab8e2cc0188d7
3
+ metadata.gz: 953c643a9a919791eeb8dc12c8e725c2a8ab80c6
4
+ data.tar.gz: 8231bae8f9f3d2fe16987b758ffcc8e22be3f295
5
5
  SHA512:
6
- metadata.gz: e8907db7dd9cc04235d905999303b07d643cfd4907cbfb9f67f3efd1eb56469a2436853bb626745f1e768daab7588e951890975fc2614f860876c27d145a8758
7
- data.tar.gz: 95a384be8f2a4587af1c46710fdbf6ad10024d439a41c4f96889dfbdf57eb7dcf2ac8860e2f08ccf0e4d0d213a5f2fc957b4d5340d51efa905ada5566701386c
6
+ metadata.gz: dfede811fa8dc0efc67e158abf08e93aac47fb327c6642fff344d6caa0bb7b908443ad31bc229c9b165ab3868c1f311adb63c7d24d168e5fbef98b09495634a4
7
+ data.tar.gz: 1b962bde64576cc9cb8a20f272a048289e42caf212d4fa63814c778fb672e1b0e137ff3dcedb3ecfab6a30488942f1db37e26eceb8b2e687a39156ec13419268
@@ -110,6 +110,7 @@
110
110
  :completion_target:
111
111
  :zsh:
112
112
  :completion_dir: ~/.zsh/completion
113
+ :project_completion_filename: .zsh_project_completion
113
114
 
114
115
 
115
116
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  # zsh shell completion script for <%= script_name %>
4
4
  # To regenerate this file: '<%= script_name %> adm --zsh-completion'
5
- # Generated on the <%= Time.now %> by <%= script_name %> v<%= PowerStencil::VERSION %>
5
+ # Generated<%= timestamp %> by <%= script_name %> v<%= PowerStencil::VERSION %>
6
6
 
7
- <% commands = PowerStencil.command_line_manager.commands -%>
8
- _<%= script_name %>() {
7
+ <% commands = context_commands -%>
8
+ _<%= script_name %>_first_level() {
9
9
  local cmd
10
10
  local <%= script_name %>_sub_commands
11
11
  <%= script_name %>_sub_commands=(<%= commands.reject { |c| c.name.empty? }.sort { |a,b| a.name <=> b.name }.map(&:name).join ' ' %>)
@@ -21,7 +21,7 @@ _<%= script_name %>() {
21
21
  (( $+functions[_<%= script_name %>_cmd_$cmd] )) && _<%= script_name %>_cmd_$cmd
22
22
  else
23
23
  _values : \
24
- <%= continued_multilines(root_command(commands).options.sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}, number_spaces: 10) %>
24
+ <%= continued_multilines(context_options(root_command commands).sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}, number_spaces: 10) %>
25
25
  fi
26
26
  else
27
27
  _values : \
@@ -33,7 +33,7 @@ _<%= script_name %>() {
33
33
  <% end -%>
34
34
  <%= command_representation command %> \
35
35
  <% end -%>
36
- <%= continued_multilines(root_command.options.sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}, number_spaces: 8) %>
36
+ <%= continued_multilines(context_options(root_command).sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}, number_spaces: 8) %>
37
37
  fi
38
38
  }
39
39
 
@@ -46,7 +46,7 @@ _<%= script_name %>_cmd_<%= command.name %>() {
46
46
  _arguments -s : \
47
47
  <%
48
48
  command_param = default_command_param_type command
49
- options_lines = command.options.sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}
49
+ options_lines = context_options(command).sort { |a,b| a.name <=> b.name }.map {|o| option_representation o}
50
50
  options_lines << command_param unless command_param.empty?
51
51
  -%>
52
52
  <%= continued_multilines(options_lines) %>
@@ -124,5 +124,15 @@ _power_stencil_do_nothing() {
124
124
  return 1
125
125
  }
126
126
 
127
- # Let's rock
128
- _<%= script_name %> "$@"
127
+
128
+ _<%= script_name %>() {
129
+ if $( _within_power_stencil_project ); then
130
+ local project_root=$( _power_stencil_project_root )
131
+ if [ -f "${project_root}/.ps_project/<%= PowerStencil.config[:completion_target][:zsh][:project_completion_filename] %>" ]; then
132
+ . "${project_root}/.ps_project/<%= PowerStencil.config[:completion_target][:zsh][:project_completion_filename] %>"
133
+ fi
134
+ else
135
+ . "<%= File.expand_path(File.join PowerStencil.config[:completion_target][:zsh][:completion_dir], "_#{script_name}") %>"
136
+ fi
137
+ _<%= script_name %>_first_level "$@"
138
+ }
@@ -5,6 +5,10 @@ require 'dir_glob_ignore'
5
5
 
6
6
  $DO_NOT_AUTOSTART_CLIMATIC=true
7
7
  require 'climatic'
8
+ require 'power_stencil/ultra_command_line/command_line_manager'
9
+ require 'power_stencil/ultra_command_line/providers_manager'
10
+ require 'power_stencil/ultra_command_line/option_definition'
11
+ require 'power_stencil/ultra_command_line/sub_command'
8
12
 
9
13
  require 'power_stencil/error'
10
14
  require 'power_stencil/utils/os'
@@ -12,7 +12,35 @@ module PowerStencil
12
12
  def execute
13
13
 
14
14
  if config[:'zsh-completion']
15
- generate_zsh_completion 'power_stencil'
15
+ target_dir = File.expand_path config[:completion_target][:zsh][:completion_dir]
16
+ script_name = 'power_stencil'
17
+ user_completion_script = File.join target_dir, "_#{script_name}"
18
+ begin
19
+ current_dir = Dir.pwd
20
+ Dir.mktmpdir 'completion_generation' do |tmpdir|
21
+ Dir.chdir tmpdir
22
+ generate_zsh_completion script_name, user_completion_script, false
23
+ end
24
+ ensure
25
+ Dir.chdir current_dir
26
+ end
27
+
28
+ begin
29
+ project
30
+ shortname_project_completion_script = File.join config[:default_config_directory_name], config[:completion_target][:zsh][:project_completion_filename]
31
+ project.track_action_with_git("Adding project specific zsh completion file: '#{ shortname_project_completion_script }'.") do
32
+ project_completion_script = File.join project.project_config_root, config[:completion_target][:zsh][:project_completion_filename]
33
+ generate_zsh_completion script_name, project_completion_script, true
34
+ puts_and_logs "A specific completion has been generated for this project in '#{project_completion_script}'.", check_verbose: false
35
+ end
36
+ rescue
37
+ # Do not check errors. This is just to load project config...
38
+ logger.debug "Outside of a PowerStencil project... Not generating zsh project completion."
39
+ end
40
+ puts_and_logs "zsh global auto_completion has been installed in '#{user_completion_script}'.", check_verbose: false
41
+ puts
42
+ puts "You should ensure you have something like 'fpath=(#{target_dir} $fpath)' in your ~/.zshrc file..."
43
+ puts 'You may have to relog for changes to be applied.'
16
44
  return
17
45
  end
18
46
 
@@ -5,15 +5,52 @@ module PowerStencil
5
5
 
6
6
  class << self
7
7
  attr_accessor :script_name
8
+ attr_accessor :generating_project_completion
8
9
  end
9
10
 
10
11
  attr_reader :encountered_types
11
12
 
13
+ def timestamp
14
+ if generating_user_completion?
15
+ " on the #{Time.now}"
16
+ else
17
+ ''
18
+ end
19
+ end
20
+
12
21
  def initialize(universe)
13
22
  super
14
23
  @encountered_types = {}
15
24
  end
16
25
 
26
+ def generating_project_completion?
27
+ self.class.generating_project_completion
28
+ end
29
+
30
+ def generating_user_completion?
31
+ !self.class.generating_project_completion
32
+ end
33
+
34
+ def context_commands
35
+ if generating_user_completion?
36
+ PowerStencil.command_line_manager.commands.select do |command|
37
+ command.providers.include? PowerStencil
38
+ end
39
+ else
40
+ PowerStencil.command_line_manager.commands
41
+ end
42
+ end
43
+
44
+ def context_options(command)
45
+ if generating_user_completion?
46
+ command.options.select do |option|
47
+ option.providers.include? PowerStencil
48
+ end
49
+ else
50
+ command.options
51
+ end
52
+ end
53
+
17
54
  def script_name
18
55
  self.class.script_name
19
56
  end
@@ -30,10 +30,27 @@ module PowerStencil
30
30
  end
31
31
  end
32
32
  ensure
33
- @rendering_context = nil
33
+ @files_not_to_rename = nil
34
34
  @files_not_to_render = nil
35
35
  end
36
36
 
37
+
38
+ def render_single_template_file(source_template, destination_file, main_entry_point: nil)
39
+ compiled_universe = root_universe.compile scenario: config[:scenario]
40
+ puts_and_logs 'Entities analysis completed.'
41
+
42
+ logger.info 'Generating target file...'
43
+
44
+ process_file source_template, destination_file,
45
+ compiled_universe,
46
+ overwrite_files: true,
47
+ main_entry_point: main_entry_point
48
+ ensure
49
+ @files_not_to_rename = nil
50
+ @files_not_to_render = nil
51
+ end
52
+
53
+
37
54
  private
38
55
 
39
56
  def detemplatized_file_name(filename, replacement_text)
@@ -55,14 +55,19 @@ module PowerStencil
55
55
  describe: PowerStencil::CommandProcessors::Describe,
56
56
  adm: PowerStencil::CommandProcessors::Adm
57
57
  }.each do |command_name, processor|
58
- command_line_manager.register_processor command_line_manager.command_by_alias(command_name),
58
+ command = command_line_manager.command_by_alias(command_name)
59
+ command_line_manager.register_processor command,
59
60
  processor.new
61
+ command.add_provider self
60
62
  end
61
63
  end
62
64
 
63
65
  def setup_climatic(cmd_line_args)
64
66
  mngr = Climatic::ConfigLayers::CommandLineLayer.build_command_line_manager base_commands_definition_file
65
67
  Climatic.bootstrap cmd_line_args: cmd_line_args, command_manager: mngr
68
+ mngr.commands.each do |command|
69
+ command.add_provider PowerStencil
70
+ end
66
71
  begin
67
72
  # Fix command line layer priority to allow a bigger number of plugins
68
73
  config.command_line_layer.priority = 999
@@ -10,7 +10,9 @@ module PowerStencil
10
10
  clm = PowerStencil.command_line_manager
11
11
  plugin_definition[:processors].each do |processors_name, processor|
12
12
  processor_class = Object.const_get processor
13
- clm.register_processor clm.command_by_alias(processors_name), processor_class.new
13
+ command = clm.command_by_alias(processors_name)
14
+ clm.register_processor command, processor_class.new
15
+ command.add_provider self
14
16
  end
15
17
  end
16
18
 
@@ -0,0 +1,35 @@
1
+ class UltraCommandLine::Manager::Base
2
+
3
+ class << self
4
+
5
+ def add_provider_for(command_or_option, provider)
6
+ providers = providers_for command_or_option
7
+ providers << provider unless providers.include? provider
8
+ end
9
+
10
+ def providers_for(command_or_option)
11
+ default_command_data = {options: {}, providers: []}
12
+ case command_or_option
13
+ when UltraCommandLine::Commands::SubCommand
14
+ sc = command_or_option
15
+ internal_provider_mapping[sc.name] ||= default_command_data
16
+ internal_provider_mapping[sc.name][:providers]
17
+ when UltraCommandLine::Commands::OptionDefinition
18
+ sco = command_or_option
19
+ internal_provider_mapping[sco.sub_command.name] ||= default_command_data
20
+ internal_provider_mapping[sco.sub_command.name][:options][sco.name] ||= []
21
+ internal_provider_mapping[sco.sub_command.name][:options][sco.name]
22
+ else
23
+ raise PowerStencil::Error, "Invalid command or option"
24
+ end
25
+ end
26
+
27
+ # private
28
+
29
+ def internal_provider_mapping
30
+ @internal_provider_mapping ||= {}
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,5 @@
1
+ class UltraCommandLine::Commands::OptionDefinition
2
+
3
+ include PowerStencil::UltraCommandLine::ProvidersManager
4
+
5
+ end
@@ -0,0 +1,21 @@
1
+ module PowerStencil
2
+ module UltraCommandLine
3
+
4
+ module ProvidersManager
5
+
6
+ def providers_manager
7
+ PowerStencil.command_line_manager.class
8
+ end
9
+
10
+ def providers
11
+ providers_manager.providers_for self
12
+ end
13
+
14
+ def add_provider(provider)
15
+ providers_manager.add_provider_for self, provider
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ class UltraCommandLine::Commands::SubCommand
2
+
3
+ include PowerStencil::UltraCommandLine::ProvidersManager
4
+
5
+ def add_provider(provider)
6
+ super
7
+ options.each do |option|
8
+ option.add_provider provider
9
+ end
10
+ end
11
+
12
+ end
@@ -3,24 +3,34 @@ module PowerStencil
3
3
 
4
4
  module Completion
5
5
 
6
- include PowerStencil::Utils::DirectoryProcessor
6
+ class FakeIgnoreList
7
+ attr_accessor :return_value
8
+ def ignore_file?(file)
9
+ return_value
10
+ end
11
+ end
7
12
 
8
- def generate_zsh_completion(script_name)
13
+ include PowerStencil::Utils::DirectoryProcessor
9
14
 
10
- # Dirty hack
11
- config.executable_gem_layer[:file_renaming_patterns] = {'(.+)_power_stencil.sh.erb' => '\1_power_stencil' }
15
+ def generate_zsh_completion(script_name, target_file, generating_project_completion)
12
16
 
13
- target_dir = File.expand_path config[:completion_target][:zsh][:completion_dir]
14
17
  source_dir = File.join PowerStencil::Project::Paths.system_templates_templates_path, 'zsh_command_line_completion'
18
+ source_template = File.join source_dir, '_power_stencil.sh.erb'
15
19
 
16
20
  engine = PowerStencil::Engine::InitEngine.new
17
21
  engine.dsl = PowerStencil::Dsl::Completion
18
22
  engine.dsl.script_name = script_name
19
- engine.render_source source_dir, target_dir, overwrite_files: true
23
+ engine.dsl.generating_project_completion = generating_project_completion
24
+
25
+ engine.instance_eval do
26
+ @files_not_to_rename = FakeIgnoreList.new
27
+ files_not_to_rename.return_value = true
28
+ @files_not_to_render = FakeIgnoreList.new
29
+ files_not_to_render.return_value = false
30
+ end
31
+
32
+ engine.render_single_template_file source_template, target_file
20
33
 
21
- puts_and_logs "zsh auto_completion has been installed in '#{File.join target_dir, "_#{script_name}"}'.", check_verbose: false
22
- puts "You should ensure you have something like 'fpath=(#{target_dir} $fpath)' in your ~/.zshrc file..."
23
- puts 'You may have to relog for changes to be applied.'
24
34
  end
25
35
 
26
36
  end
@@ -1,3 +1,3 @@
1
1
  module PowerStencil
2
- VERSION = '0.8.13'.freeze
2
+ VERSION = '0.8.14'.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.33'
28
+ spec.add_dependency 'climatic', '~> 0.2.34'
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.8.13
4
+ version: 0.8.14
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-07 00:00:00.000000000 Z
11
+ date: 2019-11-09 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.33
61
+ version: 0.2.34
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.33
68
+ version: 0.2.34
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dir_glob_ignore
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -282,6 +282,10 @@ files:
282
282
  - lib/power_stencil/system_entity_definitions/project_entity.rb
283
283
  - lib/power_stencil/system_entity_definitions/simple_exec.rb
284
284
  - lib/power_stencil/system_entity_definitions/source_provider.rb
285
+ - lib/power_stencil/ultra_command_line/command_line_manager.rb
286
+ - lib/power_stencil/ultra_command_line/option_definition.rb
287
+ - lib/power_stencil/ultra_command_line/providers_manager.rb
288
+ - lib/power_stencil/ultra_command_line/sub_command.rb
285
289
  - lib/power_stencil/utils/completion.rb
286
290
  - lib/power_stencil/utils/directory_processor.rb
287
291
  - lib/power_stencil/utils/file_edit.rb
@@ -302,7 +306,7 @@ metadata:
302
306
  documentation_uri: https://gitlab.com/tools4devops/power_stencil/blob/master/README.md
303
307
  source_code_uri: https://gitlab.com/tools4devops/power_stencil
304
308
  homepage_uri: https://powerstencil.brizone.org/
305
- post_install_message: "\nThank you for installing PowerStencil 0.8.13 !\nFrom the
309
+ post_install_message: "\nThank you for installing PowerStencil 0.8.14 !\nFrom the
306
310
  command line you can run `power_stencil --help`\nIf your shell is not completing
307
311
  the command:\n If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial
308
312
  Website : https://powerstencil.brizone.org/\nFull documentation here :