hammer_cli 2.3.0 → 2.3.1
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 +4 -4
- data/doc/release_notes.md +3 -0
- data/lib/hammer_cli/abstract.rb +29 -12
- data/lib/hammer_cli/options/option_family.rb +17 -10
- data/lib/hammer_cli/version.rb +1 -1
- data/man/hammer.1.gz +0 -0
- metadata +75 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dae98160a2f04eb29858cd97cc219ebc440dbe8db359cd4c5c742ef164fb3c7d
|
4
|
+
data.tar.gz: 3c062268d65695c331953183322e23e373ac1359bc3110a1f48aed8d93f818f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d12884641c2450d7b9893f5b8db2d13ad27958aabfbd06e9d763d8f35eb86ba813290c73933c6a4cdbf456c32f38d82ff96247f048ad6db4fe4bbd4feb0f0ad1
|
7
|
+
data.tar.gz: 05c7c44cbc98c2e3a4e4e3419120e7bacdc9131f8b0ec086762afe655179ccb7985764042d53e03839358447d5d87bcf20025a5635e0804ac45ec5fc694c0c27
|
data/doc/release_notes.md
CHANGED
@@ -1,5 +1,8 @@
|
|
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
|
+
|
3
6
|
### 2.3.0 (2020-11-03)
|
4
7
|
* Stop sending empty compute attrs param, [#30815](http://projects.theforeman.org/issues/30815)
|
5
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)
|
data/lib/hammer_cli/abstract.rb
CHANGED
@@ -190,18 +190,9 @@ 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?
|
194
|
-
|
195
|
-
if option.respond_to?(:
|
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
|
193
|
+
next if option.nil? || option.switches.any? { |s| find_option(s) }
|
194
|
+
|
195
|
+
adjust_family(option) if option.respond_to?(:family)
|
205
196
|
declared_options << option
|
206
197
|
block ||= option.default_conversion_block
|
207
198
|
define_accessors_for(option, &block)
|
@@ -411,6 +402,32 @@ module HammerCLI
|
|
411
402
|
|
412
403
|
private
|
413
404
|
|
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
|
+
|
414
431
|
def self.inherited_output_definition
|
415
432
|
od = nil
|
416
433
|
if superclass.respond_to? :output_definition
|
@@ -5,7 +5,7 @@ module HammerCLI
|
|
5
5
|
class OptionFamily
|
6
6
|
attr_reader :children
|
7
7
|
|
8
|
-
IDS_REGEX =
|
8
|
+
IDS_REGEX = /(\A[Ii][Dd][s]?)|\s([Ii][Dd][s]?)\W|([Ii][Dd][s]?\Z)/
|
9
9
|
|
10
10
|
def initialize(options = {})
|
11
11
|
@all = []
|
@@ -13,26 +13,32 @@ 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]
|
17
16
|
@root = options[:root] || options[:aliased_resource] || options[:referenced_resource]
|
18
17
|
end
|
19
18
|
|
20
19
|
def description
|
21
20
|
types = all.map(&:type).map { |s| s.split('_').last.to_s }
|
22
|
-
.map(&:
|
23
|
-
|
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
|
24
24
|
if @options[:deprecation].class <= String
|
25
|
-
format_deprecation_msg(
|
25
|
+
format_deprecation_msg(desc, _('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(
|
30
|
+
format_deprecation_msg(desc, full_msg)
|
31
31
|
else
|
32
|
-
|
32
|
+
desc
|
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
|
+
|
36
42
|
def switch
|
37
43
|
return if @parent.nil? && @children.empty?
|
38
44
|
return @parent.help_lhs.strip if @children.empty?
|
@@ -67,6 +73,9 @@ module HammerCLI
|
|
67
73
|
end
|
68
74
|
|
69
75
|
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
|
+
|
70
79
|
child.family = self
|
71
80
|
@children << child
|
72
81
|
end
|
@@ -103,9 +112,7 @@ module HammerCLI
|
|
103
112
|
max_len.downto(0) do |curr_len|
|
104
113
|
0.upto(max_len - curr_len) do |start|
|
105
114
|
root = shortest[start, curr_len]
|
106
|
-
if switches.all? { |switch| switch.include?(root) }
|
107
|
-
return root[2..-1].chomp('-')
|
108
|
-
end
|
115
|
+
return root[2..-1].chomp('-') if switches.all? { |switch| switch.include?(root) }
|
109
116
|
end
|
110
117
|
end
|
111
118
|
end
|
data/lib/hammer_cli/version.rb
CHANGED
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.
|
4
|
+
version: 2.3.1
|
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:
|
12
|
+
date: 2021-05-04 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_extension.md
|
156
|
-
- doc/release_notes.md
|
157
|
-
- doc/design.png
|
158
155
|
- doc/commands_modification.md
|
159
|
-
- doc/
|
160
|
-
- doc/
|
161
|
-
- doc/
|
162
|
-
- doc/output.md
|
156
|
+
- doc/creating_apipie_commands.md
|
157
|
+
- doc/design.png
|
158
|
+
- doc/design.uml
|
163
159
|
- doc/developer_docs.md
|
160
|
+
- doc/development_tips.md
|
161
|
+
- doc/help_modification.md
|
162
|
+
- doc/i18n.md
|
164
163
|
- doc/installation_deb.md
|
165
|
-
- doc/option_normalizers.md
|
166
|
-
- doc/installation_rpm.md
|
167
164
|
- doc/installation_gem.md
|
168
|
-
- doc/help_modification.md
|
169
|
-
- doc/creating_commands.md
|
170
|
-
- doc/installation_source.md
|
171
165
|
- doc/option_builders.md
|
172
|
-
- doc/
|
166
|
+
- doc/option_normalizers.md
|
167
|
+
- doc/output.md
|
173
168
|
- doc/review_checklist.md
|
174
|
-
- doc/
|
175
|
-
- doc/
|
169
|
+
- doc/writing_a_plugin.md
|
170
|
+
- doc/commands_extension.md
|
171
|
+
- doc/creating_commands.md
|
172
|
+
- doc/installation_rpm.md
|
173
|
+
- doc/installation_source.md
|
174
|
+
- doc/installation.md
|
175
|
+
- doc/release_notes.md
|
176
176
|
- config/cli.modules.d/module_config_template.yml
|
177
|
-
- config/cli_config.template.yml
|
178
177
|
- config/hammer.completion
|
178
|
+
- config/cli_config.template.yml
|
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/
|
403
|
-
- test/
|
404
|
-
- test/
|
405
|
-
- test/
|
406
|
-
- test/
|
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
|
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
|
414
407
|
- test/unit/apipie/api_connection_test.rb
|
408
|
+
- test/unit/apipie/command_test.rb
|
415
409
|
- test/unit/apipie/option_definition_test.rb
|
416
|
-
- test/unit/
|
417
|
-
- test/unit/
|
418
|
-
- test/unit/
|
419
|
-
- test/unit/
|
420
|
-
- test/unit/
|
421
|
-
- test/unit/
|
422
|
-
- test/unit/
|
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
|
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
|
415
|
+
- test/unit/connection_test.rb
|
416
|
+
- test/unit/csv_parser_test.rb
|
429
417
|
- test/unit/defaults_test.rb
|
430
|
-
- test/unit/
|
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
|
418
|
+
- test/unit/exception_handler_test.rb
|
446
419
|
- test/unit/fixtures/apipie/architectures.json
|
447
420
|
- test/unit/fixtures/apipie/documented.json
|
448
|
-
- test/unit/fixtures/defaults/defaults_dashed.yml
|
449
|
-
- test/unit/fixtures/defaults/defaults.yml
|
450
|
-
- test/unit/fixtures/json_input/valid.json
|
451
|
-
- test/unit/fixtures/json_input/invalid.json
|
452
421
|
- test/unit/fixtures/certs/ca_cert.pem
|
453
422
|
- test/unit/fixtures/certs/non_ca_cert.pem
|
454
|
-
- test/unit/
|
455
|
-
- test/unit/
|
456
|
-
- test/unit/
|
457
|
-
- test/unit/
|
423
|
+
- test/unit/fixtures/defaults/defaults.yml
|
424
|
+
- test/unit/fixtures/defaults/defaults_dashed.yml
|
425
|
+
- test/unit/fixtures/json_input/invalid.json
|
426
|
+
- test/unit/fixtures/json_input/valid.json
|
458
427
|
- test/unit/help/definition/abstract_item_test.rb
|
428
|
+
- test/unit/help/definition/list_test.rb
|
459
429
|
- test/unit/help/definition/note_test.rb
|
430
|
+
- test/unit/help/definition/section_test.rb
|
431
|
+
- test/unit/help/definition/text_test.rb
|
460
432
|
- test/unit/help/definition_test.rb
|
461
|
-
- test/unit/help/builder_test.rb
|
462
433
|
- test/unit/help/text_builder_test.rb
|
463
|
-
- test/unit/
|
464
|
-
- test/
|
465
|
-
- test/
|
466
|
-
- test/
|
467
|
-
- test/
|
468
|
-
- test/
|
434
|
+
- 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
|