hammer_cli 2.3.1 → 2.4.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
2
  SHA256:
3
- metadata.gz: dae98160a2f04eb29858cd97cc219ebc440dbe8db359cd4c5c742ef164fb3c7d
4
- data.tar.gz: 3c062268d65695c331953183322e23e373ac1359bc3110a1f48aed8d93f818f9
3
+ metadata.gz: ef5d5eb556461a6873fe0b3b05bcc8a30aea17f88719b3c10c25106c73224884
4
+ data.tar.gz: 564721c9765ccd22b82fee81eea83be8b29da7ee0e415fd492deece64ca55b53
5
5
  SHA512:
6
- metadata.gz: d12884641c2450d7b9893f5b8db2d13ad27958aabfbd06e9d763d8f35eb86ba813290c73933c6a4cdbf456c32f38d82ff96247f048ad6db4fe4bbd4feb0f0ad1
7
- data.tar.gz: 05c7c44cbc98c2e3a4e4e3419120e7bacdc9131f8b0ec086762afe655179ccb7985764042d53e03839358447d5d87bcf20025a5635e0804ac45ec5fc694c0c27
6
+ metadata.gz: efde2a000ba9e27da2a466496232399da3861bb69705631ca9113ecc88920cc0af9ff344536c858fe4fbb77e60fe886582919885983d03b4235da70b0e80a6dd
7
+ data.tar.gz: a2673ec7bb6c5ed621c7a068e67962fec2c038f99b12abe1f0f19fa85fad3711598aaa3abf52e7896e72db938f74c7726b350e8bebcd5eaf04c6ef02806c96f5
data/bin/hammer-complete CHANGED
@@ -5,9 +5,7 @@ require 'English'
5
5
  $LOAD_PATH.unshift(File.join(@project_root, 'lib'))
6
6
  HAMMER = ENV['HAMMER'] || File.join(@project_root, 'bin/hammer')
7
7
 
8
- require 'yaml'
9
-
10
- completion_cache_file = ENV['HAMMER_COMPLETION_CACHE'] || '~/.cache/hammer_completion.yml'
8
+ completion_cache_file = ENV['HAMMER_COMPLETION_CACHE'] || '~/.cache/hammer_completion.json'
11
9
  completion_cache_file = File.expand_path(completion_cache_file)
12
10
 
13
11
  # build the cache if it does not exist
@@ -45,7 +45,7 @@
45
45
  #:log_pattern: '[%5l %d %c] %m'
46
46
 
47
47
  # Location of cache for bash completion
48
- :completion_cache_file: '~/.cache/hammer_completion.yml'
48
+ :completion_cache_file: '~/.cache/hammer_completion.json'
49
49
 
50
50
  # SSL auth options
51
51
  #:ssl:
data/doc/installation.md CHANGED
@@ -144,7 +144,7 @@ executable specified in `/etc/bash_completion.d/hammer`.
144
144
 
145
145
  Bash completion for hammer needs pre-built cache that holds description of
146
146
  all subcommands and its parameters. The cache is located by default in
147
- `~/.cache/hammer_completion.yml`. The location can be changed in hammer's
147
+ `~/.cache/hammer_completion.json`. The location can be changed in hammer's
148
148
  config file. The cache can be built manually with
149
149
  `hammer prebuild-bash-completion` or is built automatically when completion is
150
150
  used and the cache is missing (this may cause slight delay). The cache expires
data/doc/release_notes.md CHANGED
@@ -1,14 +1,9 @@
1
1
  Release notes
2
2
  =============
3
- ### 2.3.1 (2021-05-04)
4
- * Better family assignment for options, [#30996](http://projects.theforeman.org/issues/30996)
5
-
6
- ### 2.3.0 (2020-11-03)
7
- * Stop sending empty compute attrs param, [#30815](http://projects.theforeman.org/issues/30815)
8
- * Make fuzzy search work in hammer shell ([PR #335](https://github.com/theforeman/hammer-cli/pull/335)), [#30747](http://projects.theforeman.org/issues/30747)
9
- * Add details to installation from source doc ([PR #334](https://github.com/theforeman/hammer-cli/pull/334)), [#30666](http://projects.theforeman.org/issues/30666)
10
- * Bump to 2.3.0-develop
11
- * Bump to 2.2.0
3
+ ### 2.4.0 (2021-02-01)
4
+ * Expand path for bash completion file, [#30639](http://projects.theforeman.org/issues/30639)
5
+ * Remove release notes written twice
6
+ * Bump to 2.4.0-develop
12
7
 
13
8
  ### 2.3.0 (2020-11-03)
14
9
  * Stop sending empty compute attrs param, [#30815](http://projects.theforeman.org/issues/30815)
@@ -190,9 +190,18 @@ module HammerCLI
190
190
 
191
191
  option_builder.build(builder_params).each do |option|
192
192
  # skip switches that are already defined
193
- next if option.nil? || option.switches.any? { |s| find_option(s) }
194
-
195
- adjust_family(option) if option.respond_to?(:family)
193
+ next if option.nil? or option.switches.any? {|s| find_option(s) }
194
+
195
+ if option.respond_to?(:referenced_resource)
196
+ # Collect options that don't have family, but related to this parent.
197
+ children = find_options(
198
+ referenced_resource: option.referenced_resource.to_s,
199
+ aliased_resource: option.aliased_resource.to_s
200
+ ).select { |o| o.family.nil? || o.family.head.nil? }
201
+ children.each do |child|
202
+ option.family.adopt(child) if option.family
203
+ end
204
+ end
196
205
  declared_options << option
197
206
  block ||= option.default_conversion_block
198
207
  define_accessors_for(option, &block)
@@ -402,32 +411,6 @@ module HammerCLI
402
411
 
403
412
  private
404
413
 
405
- def self.adjust_family(option)
406
- # Collect options that should share the same family
407
- # If those options have family, adopt the current one
408
- # Else adopt those options to the family of the current option
409
- # NOTE: this shouldn't rewrite any options,
410
- # although options from similar family could be adopted (appended)
411
- options = find_options(
412
- aliased_resource: option.aliased_resource.to_s
413
- ).select { |o| o.family.nil? || o.family.formats.include?(option.value_formatter.class) }.group_by do |o|
414
- next :to_skip if option.family.children.include?(o)
415
- next :to_adopt if o.family.nil? || o.family.head.nil?
416
- next :to_skip if o.family.children.include?(option)
417
- # If both family heads handle the same switch
418
- # then `option` is probably from similar family and can be adopted
419
- next :adopt_by if option.family.head.nil? || o.family.head.handles?(option.family.head.long_switch)
420
-
421
- :to_skip
422
- end
423
- options[:to_adopt]&.each do |child|
424
- option.family&.adopt(child)
425
- end
426
- options[:adopt_by]&.map(&:family)&.uniq&.each do |family|
427
- family.adopt(option)
428
- end
429
- end
430
-
431
414
  def self.inherited_output_definition
432
415
  od = nil
433
416
  if superclass.respond_to? :output_definition
@@ -3,10 +3,12 @@ module HammerCLI
3
3
  class PrebuildCompletionCommand < HammerCLI::AbstractCommand
4
4
  def execute
5
5
  map = HammerCLI::MainCommand.completion_map
6
- cache_file = HammerCLI::Settings.get(:completion_cache_file)
6
+ cache_file = File.expand_path(
7
+ HammerCLI::Settings.get(:completion_cache_file)
8
+ )
7
9
  cache_dir = File.dirname(cache_file)
8
10
  FileUtils.mkdir_p(cache_dir) unless File.directory?(cache_dir)
9
- File.write(File.expand_path(cache_file), map.to_json)
11
+ File.write(cache_file, map.to_json)
10
12
 
11
13
  HammerCLI::EX_OK
12
14
  end
@@ -5,7 +5,7 @@ module HammerCLI
5
5
  class OptionFamily
6
6
  attr_reader :children
7
7
 
8
- IDS_REGEX = /(\A[Ii][Dd][s]?)|\s([Ii][Dd][s]?)\W|([Ii][Dd][s]?\Z)/
8
+ IDS_REGEX = /\s?([Ii][Dd][s]?)\W|([Ii][Dd][s]?\Z)/
9
9
 
10
10
  def initialize(options = {})
11
11
  @all = []
@@ -13,32 +13,26 @@ module HammerCLI
13
13
  @options = options
14
14
  @creator = options[:creator] || Class.new(HammerCLI::Apipie::Command)
15
15
  @prefix = options[:prefix]
16
+ @description = options[:description]
16
17
  @root = options[:root] || options[:aliased_resource] || options[:referenced_resource]
17
18
  end
18
19
 
19
20
  def description
20
21
  types = all.map(&:type).map { |s| s.split('_').last.to_s }
21
- .map(&:downcase).join('/')
22
- parent_desc = @parent.help[1].gsub(IDS_REGEX) { |w| w.gsub(/\w+/, types) }
23
- desc = parent_desc.strip.empty? ? @options[:description] : parent_desc
22
+ .map(&:capitalize).join('/')
23
+ @description ||= @parent.help[1].gsub(IDS_REGEX) { |w| w.gsub(/\w+/, types) }
24
24
  if @options[:deprecation].class <= String
25
- format_deprecation_msg(desc, _('Deprecated: %{deprecated_msg}') % { deprecated_msg: @options[:deprecation] })
25
+ format_deprecation_msg(@description, _('Deprecated: %{deprecated_msg}') % { deprecated_msg: @options[:deprecation] })
26
26
  elsif @options[:deprecation].class <= Hash
27
27
  full_msg = @options[:deprecation].map do |flag, msg|
28
28
  _('%{flag} is deprecated: %{deprecated_msg}') % { flag: flag, deprecated_msg: msg }
29
29
  end.join(', ')
30
- format_deprecation_msg(desc, full_msg)
30
+ format_deprecation_msg(@description, full_msg)
31
31
  else
32
- desc
32
+ @description
33
33
  end
34
34
  end
35
35
 
36
- def formats
37
- return [@options[:format].class] if @options[:format]
38
-
39
- all.map(&:value_formatter).map(&:class).uniq
40
- end
41
-
42
36
  def switch
43
37
  return if @parent.nil? && @children.empty?
44
38
  return @parent.help_lhs.strip if @children.empty?
@@ -73,9 +67,6 @@ module HammerCLI
73
67
  end
74
68
 
75
69
  def adopt(child)
76
- raise ArgumentError, 'Parent cannot be a child within the same family' if child == @parent
77
- raise ArgumentError, 'Child is already in the family' if @children.include?(child)
78
-
79
70
  child.family = self
80
71
  @children << child
81
72
  end
@@ -112,7 +103,9 @@ module HammerCLI
112
103
  max_len.downto(0) do |curr_len|
113
104
  0.upto(max_len - curr_len) do |start|
114
105
  root = shortest[start, curr_len]
115
- return root[2..-1].chomp('-') if switches.all? { |switch| switch.include?(root) }
106
+ if switches.all? { |switch| switch.include?(root) }
107
+ return root[2..-1].chomp('-')
108
+ end
116
109
  end
117
110
  end
118
111
  end
@@ -67,7 +67,7 @@ module HammerCLI
67
67
  def self.default_settings
68
68
  {
69
69
  :use_defaults => true,
70
- :completion_cache_file => '~/.cache/hammer_completion.yml'
70
+ :completion_cache_file => '~/.cache/hammer_completion.json'
71
71
  }
72
72
  end
73
73
 
@@ -1,5 +1,5 @@
1
1
  module HammerCLI
2
2
  def self.version
3
- @version ||= Gem::Version.new "2.3.1"
3
+ @version ||= Gem::Version.new "2.4.0"
4
4
  end
5
5
  end
data/man/hammer.1.gz CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammer_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Bačovský
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-05-04 00:00:00.000000000 Z
12
+ date: 2021-02-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp
@@ -145,37 +145,37 @@ dependencies:
145
145
  version: 0.2.0
146
146
  description: 'Hammer cli provides universal extendable CLI interface for ruby apps
147
147
 
148
- '
148
+ '
149
149
  email: mbacovsk@redhat.com
150
150
  executables:
151
151
  - hammer
152
152
  - hammer-complete
153
153
  extensions: []
154
154
  extra_rdoc_files:
155
- - doc/commands_modification.md
156
- - doc/creating_apipie_commands.md
155
+ - doc/commands_extension.md
156
+ - doc/release_notes.md
157
157
  - doc/design.png
158
- - doc/design.uml
159
- - doc/developer_docs.md
158
+ - doc/commands_modification.md
159
+ - doc/installation.md
160
160
  - doc/development_tips.md
161
- - doc/help_modification.md
162
- - doc/i18n.md
161
+ - doc/writing_a_plugin.md
162
+ - doc/output.md
163
+ - doc/developer_docs.md
163
164
  - doc/installation_deb.md
164
- - doc/installation_gem.md
165
- - doc/option_builders.md
166
165
  - doc/option_normalizers.md
167
- - doc/output.md
168
- - doc/review_checklist.md
169
- - doc/writing_a_plugin.md
170
- - doc/commands_extension.md
171
- - doc/creating_commands.md
172
166
  - doc/installation_rpm.md
167
+ - doc/installation_gem.md
168
+ - doc/help_modification.md
169
+ - doc/creating_commands.md
173
170
  - doc/installation_source.md
174
- - doc/installation.md
175
- - doc/release_notes.md
171
+ - doc/option_builders.md
172
+ - doc/i18n.md
173
+ - doc/review_checklist.md
174
+ - doc/creating_apipie_commands.md
175
+ - doc/design.uml
176
176
  - config/cli.modules.d/module_config_template.yml
177
- - config/hammer.completion
178
177
  - config/cli_config.template.yml
178
+ - config/hammer.completion
179
179
  - README.md
180
180
  files:
181
181
  - LICENSE
@@ -399,70 +399,70 @@ signing_key:
399
399
  specification_version: 4
400
400
  summary: Universal command-line interface
401
401
  test_files:
402
- - test/functional/defaults_test.rb
403
- - test/functional/help_test.rb
404
- - test/functional/nil_values_test.rb
405
- - test/functional/test_helper.rb
406
- - test/test_helper.rb
407
- - test/unit/apipie/api_connection_test.rb
408
- - test/unit/apipie/command_test.rb
409
- - test/unit/apipie/option_definition_test.rb
410
- - test/unit/apipie/test_helper.rb
411
- - test/unit/apipie/option_builder_test.rb
412
- - test/unit/bash_test.rb
413
- - test/unit/ca_cert_manager_test.rb
414
- - test/unit/completer_test.rb
402
+ - test/unit/messages_test.rb
403
+ - test/unit/exception_handler_test.rb
404
+ - test/unit/modules_test.rb
415
405
  - test/unit/connection_test.rb
406
+ - test/unit/completer_test.rb
416
407
  - test/unit/csv_parser_test.rb
408
+ - test/unit/option_builder_test.rb
409
+ - test/unit/test_helper.rb
410
+ - test/unit/utils_test.rb
411
+ - test/unit/apipie/command_test.rb
412
+ - test/unit/apipie/option_builder_test.rb
413
+ - test/unit/apipie/test_helper.rb
414
+ - test/unit/apipie/api_connection_test.rb
415
+ - test/unit/apipie/option_definition_test.rb
416
+ - test/unit/command_extensions_test.rb
417
+ - test/unit/main_test.rb
418
+ - test/unit/options/processor_list_test.rb
419
+ - test/unit/options/option_family_test.rb
420
+ - test/unit/options/validators/dsl_test.rb
421
+ - test/unit/options/sources/command_line_test.rb
422
+ - test/unit/options/sources/saved_defaults_test.rb
423
+ - test/unit/options/matcher_test.rb
424
+ - test/unit/options/option_collector_test.rb
425
+ - test/unit/options/normalizers_test.rb
426
+ - test/unit/options/option_definition_test.rb
427
+ - test/unit/settings_test.rb
428
+ - test/unit/history_test.rb
417
429
  - test/unit/defaults_test.rb
418
- - test/unit/exception_handler_test.rb
430
+ - test/unit/logger_test.rb
431
+ - test/unit/output/formatters_test.rb
432
+ - test/unit/output/record_collection_test.rb
433
+ - test/unit/output/dsl_test.rb
434
+ - test/unit/output/definition_test.rb
435
+ - test/unit/output/output_test.rb
436
+ - test/unit/output/field_filter_test.rb
437
+ - test/unit/output/fields_test.rb
438
+ - test/unit/output/adapter/table_test.rb
439
+ - test/unit/output/adapter/json_test.rb
440
+ - test/unit/output/adapter/abstract_test.rb
441
+ - test/unit/output/adapter/yaml_test.rb
442
+ - test/unit/output/adapter/csv_test.rb
443
+ - test/unit/output/adapter/base_test.rb
444
+ - test/unit/abstract_test.rb
445
+ - test/unit/i18n_test.rb
419
446
  - test/unit/fixtures/apipie/architectures.json
420
447
  - test/unit/fixtures/apipie/documented.json
421
- - test/unit/fixtures/certs/ca_cert.pem
422
- - test/unit/fixtures/certs/non_ca_cert.pem
423
- - test/unit/fixtures/defaults/defaults.yml
424
448
  - test/unit/fixtures/defaults/defaults_dashed.yml
425
- - test/unit/fixtures/json_input/invalid.json
449
+ - test/unit/fixtures/defaults/defaults.yml
426
450
  - test/unit/fixtures/json_input/valid.json
427
- - test/unit/help/definition/abstract_item_test.rb
428
- - test/unit/help/definition/list_test.rb
429
- - test/unit/help/definition/note_test.rb
451
+ - test/unit/fixtures/json_input/invalid.json
452
+ - test/unit/fixtures/certs/ca_cert.pem
453
+ - test/unit/fixtures/certs/non_ca_cert.pem
454
+ - test/unit/bash_test.rb
430
455
  - test/unit/help/definition/section_test.rb
456
+ - test/unit/help/definition/list_test.rb
431
457
  - test/unit/help/definition/text_test.rb
458
+ - test/unit/help/definition/abstract_item_test.rb
459
+ - test/unit/help/definition/note_test.rb
432
460
  - test/unit/help/definition_test.rb
433
- - test/unit/help/text_builder_test.rb
434
461
  - test/unit/help/builder_test.rb
435
- - test/unit/history_test.rb
436
- - test/unit/i18n_test.rb
437
- - test/unit/logger_test.rb
438
- - test/unit/main_test.rb
439
- - test/unit/messages_test.rb
440
- - test/unit/modules_test.rb
441
- - test/unit/option_builder_test.rb
442
- - test/unit/options/matcher_test.rb
443
- - test/unit/options/normalizers_test.rb
444
- - test/unit/options/option_collector_test.rb
445
- - test/unit/options/option_definition_test.rb
446
- - test/unit/options/processor_list_test.rb
447
- - test/unit/options/sources/command_line_test.rb
448
- - test/unit/options/sources/saved_defaults_test.rb
449
- - test/unit/options/validators/dsl_test.rb
450
- - test/unit/options/option_family_test.rb
451
- - test/unit/output/adapter/abstract_test.rb
452
- - test/unit/output/adapter/base_test.rb
453
- - test/unit/output/adapter/csv_test.rb
454
- - test/unit/output/adapter/json_test.rb
455
- - test/unit/output/adapter/table_test.rb
456
- - test/unit/output/adapter/yaml_test.rb
457
- - test/unit/output/dsl_test.rb
458
- - test/unit/output/field_filter_test.rb
459
- - test/unit/output/fields_test.rb
460
- - test/unit/output/formatters_test.rb
461
- - test/unit/output/output_test.rb
462
- - test/unit/output/record_collection_test.rb
463
- - test/unit/output/definition_test.rb
464
- - test/unit/settings_test.rb
465
- - test/unit/test_helper.rb
466
- - test/unit/utils_test.rb
467
- - test/unit/abstract_test.rb
468
- - test/unit/command_extensions_test.rb
462
+ - test/unit/help/text_builder_test.rb
463
+ - test/unit/ca_cert_manager_test.rb
464
+ - test/functional/help_test.rb
465
+ - test/functional/test_helper.rb
466
+ - test/functional/nil_values_test.rb
467
+ - test/functional/defaults_test.rb
468
+ - test/test_helper.rb