hammer_cli 3.5.1 → 3.7.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 +4 -4
- data/config/cli_config.template.yml +3 -3
- data/doc/release_notes.md +13 -1
- data/lib/hammer_cli/abstract.rb +1 -1
- data/lib/hammer_cli/defaults_commands.rb +0 -1
- data/lib/hammer_cli/help/builder.rb +6 -6
- data/lib/hammer_cli/logger.rb +2 -2
- data/lib/hammer_cli/modules.rb +1 -1
- data/lib/hammer_cli/options/normalizers.rb +2 -2
- data/lib/hammer_cli/options/validators/dsl.rb +1 -1
- data/lib/hammer_cli/output/adapter/csv.rb +0 -1
- data/lib/hammer_cli/output/dsl.rb +1 -1
- data/lib/hammer_cli/output/fields.rb +1 -1
- data/lib/hammer_cli/output/formatters.rb +4 -4
- data/lib/hammer_cli/ssloptions.rb +3 -3
- data/lib/hammer_cli/subcommand.rb +1 -0
- data/lib/hammer_cli/utils.rb +0 -12
- data/lib/hammer_cli/version.rb +1 -1
- data/locale/Makefile.def +77 -0
- data/locale/ca/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli.mo +0 -0
- data/test/functional/defaults_test.rb +0 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/apipie/command_test.rb +1 -1
- data/test/unit/apipie/option_definition_test.rb +1 -1
- data/test/unit/exception_handler_test.rb +3 -3
- data/test/unit/history_test.rb +2 -2
- data/test/unit/logger_test.rb +2 -2
- data/test/unit/options/option_definition_test.rb +4 -4
- data/test/unit/options/sources/saved_defaults_test.rb +0 -4
- data/test/unit/output/adapter/abstract_test.rb +3 -3
- data/test/unit/output/adapter/csv_test.rb +21 -21
- data/test/unit/output/adapter/table_test.rb +5 -5
- metadata +35 -34
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5c8ba63d251f23a5e6005d7adcab02b5045639060c1bd5a3a02741e6d5561945
|
|
4
|
+
data.tar.gz: b94fd6c3342e7c8b06efeb7dfe754f449cd0ce76b62cc7cafadf13031fbf2f94
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 26dc0d7d6b439aa97d1e5a01f003cc8c817ad522baa874b6cb8fc145e03246fce952ef96e0def406c614b3b4246fb85b69d3a6c7e10090cf7f7c152c53657715
|
|
7
|
+
data.tar.gz: 8f64e1a44462aa152f2f5aeb5af69f05160978651eaa9a2ba327ea1ceb6f77fffdcef3a436d113a5877edb05a2d0781bb3bce1329b8bb559856ba3ef6e159a75
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# Location of shell history file
|
|
8
8
|
:history_file: '~/.hammer/history'
|
|
9
9
|
# Mark translated strings with X characters (for developers)
|
|
10
|
-
|
|
10
|
+
# :mark_translated: false
|
|
11
11
|
# Hide headers from output of list actions
|
|
12
12
|
# :no_headers: true
|
|
13
13
|
# Choose capitalization for JSON/YAML output.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
# Enable/disable color output of logger in Clamp commands
|
|
18
18
|
:watch_plain: false
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# Force reload of Apipie cache with every Hammer invocation
|
|
21
21
|
:reload_cache: false
|
|
22
22
|
|
|
23
23
|
# Directory where the logs are stored. The default is /var/log/hammer/ and the log file is named hammer.log
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
# Certs from the local storage are used only when neither :ssl_ca_file: nor :ssl_ca_path: is cofigured.
|
|
76
76
|
#:local_ca_store_path: '~/.hammer/certs'
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
# Allows setting the SSL version to use when making API calls
|
|
79
79
|
#:ssl_version: 'TLSv1_2'
|
data/doc/release_notes.md
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
Release notes
|
|
2
2
|
=============
|
|
3
|
-
### 3.
|
|
3
|
+
### 3.7.0 (2023-05-23)
|
|
4
|
+
* Honor tz in datetime normalizer ([PR #369](https://github.com/theforeman/hammer-cli/pull/369)), [#36418](http://projects.theforeman.org/issues/36418)
|
|
5
|
+
* Remove unused code, [#36337](http://projects.theforeman.org/issues/36337)
|
|
6
|
+
* Fix ambiguous operator warnings, [#36337](http://projects.theforeman.org/issues/36337)
|
|
7
|
+
* Update rake and clamp deps, [#36337](http://projects.theforeman.org/issues/36337)
|
|
8
|
+
* Fix config template typos ([PR #365](https://github.com/theforeman/hammer-cli/pull/365))
|
|
9
|
+
* Load ssl key using openssl::pkey.read ([PR #364](https://github.com/theforeman/hammer-cli/pull/364)), [#34853](http://projects.theforeman.org/issues/34853)
|
|
10
|
+
* Bump to 3.7.0-develop
|
|
11
|
+
|
|
12
|
+
### 3.6.0 (2023-02-23)
|
|
4
13
|
* Update apipie-bindings to 0.6.0
|
|
14
|
+
* Include makefile.def in the gem
|
|
15
|
+
* Correct mocha inclusion in tests
|
|
16
|
+
* Bump to 3.6.0-develop
|
|
5
17
|
|
|
6
18
|
### 3.5.0 (2022-10-31)
|
|
7
19
|
* Bump to 3.5.0-develop
|
data/lib/hammer_cli/abstract.rb
CHANGED
|
@@ -192,7 +192,7 @@ module HammerCLI
|
|
|
192
192
|
|
|
193
193
|
def self.output(definition=nil, &block)
|
|
194
194
|
dsl = HammerCLI::Output::Dsl.new
|
|
195
|
-
dsl.build
|
|
195
|
+
dsl.build(&block) if block_given?
|
|
196
196
|
output_definition.append definition.fields unless definition.nil?
|
|
197
197
|
output_definition.append dsl.fields
|
|
198
198
|
end
|
|
@@ -14,7 +14,7 @@ module HammerCLI
|
|
|
14
14
|
def add_usage(invocation_path, usage_descriptions)
|
|
15
15
|
heading(Clamp.message(:usage_heading))
|
|
16
16
|
usage_descriptions.each do |usage|
|
|
17
|
-
|
|
17
|
+
line " #{HammerCLI.expand_invocation_path(invocation_path)} #{usage}".rstrip
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -24,7 +24,7 @@ module HammerCLI
|
|
|
24
24
|
end
|
|
25
25
|
items.reject! {|item| item.respond_to?(:hidden?) && item.hidden?}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
line
|
|
28
28
|
heading(heading)
|
|
29
29
|
|
|
30
30
|
label_width = DEFAULT_LABEL_INDENT
|
|
@@ -47,15 +47,15 @@ module HammerCLI
|
|
|
47
47
|
item.help
|
|
48
48
|
end
|
|
49
49
|
description.gsub(/^(.)/) { Unicode.capitalize(Regexp.last_match(1)) }.wrap.each_line do |line|
|
|
50
|
-
|
|
50
|
+
line " %-#{label_width}s %s" % [label, line]
|
|
51
51
|
label = ''
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def add_text(content)
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
line
|
|
58
|
+
line content
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
protected
|
|
@@ -63,7 +63,7 @@ module HammerCLI
|
|
|
63
63
|
def heading(label)
|
|
64
64
|
label = "#{label}:"
|
|
65
65
|
label = HighLine.color(label, :bold) if @richtext
|
|
66
|
-
|
|
66
|
+
line label
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
end
|
data/lib/hammer_cli/logger.rb
CHANGED
|
@@ -54,7 +54,7 @@ module HammerCLI
|
|
|
54
54
|
log_dir = File.expand_path(HammerCLI::Settings.get(:log_dir) || DEFAULT_LOG_DIR)
|
|
55
55
|
begin
|
|
56
56
|
FileUtils.mkdir_p(log_dir, :mode => 0750)
|
|
57
|
-
rescue Errno::EACCES
|
|
57
|
+
rescue Errno::EACCES
|
|
58
58
|
$stderr.puts _("No permissions to create log dir %s.") % log_dir
|
|
59
59
|
end
|
|
60
60
|
|
|
@@ -68,7 +68,7 @@ module HammerCLI
|
|
|
68
68
|
:size => (HammerCLI::Settings.get(:log_size) || 1)*1024*1024) # 1MB
|
|
69
69
|
# set owner and group (it's ignored if attribute is nil)
|
|
70
70
|
FileUtils.chown HammerCLI::Settings.get(:log_owner), HammerCLI::Settings.get(:log_group), filename
|
|
71
|
-
rescue ArgumentError
|
|
71
|
+
rescue ArgumentError
|
|
72
72
|
$stderr.puts _("File %s not writeable, won't log anything to the file!") % filename
|
|
73
73
|
end
|
|
74
74
|
|
data/lib/hammer_cli/modules.rb
CHANGED
|
@@ -298,7 +298,7 @@ module HammerCLI
|
|
|
298
298
|
json_string = ::File.exist?(::File.expand_path(val)) ? super(val) : val
|
|
299
299
|
::JSON.parse(json_string)
|
|
300
300
|
|
|
301
|
-
rescue ::JSON::ParserError
|
|
301
|
+
rescue ::JSON::ParserError
|
|
302
302
|
raise ArgumentError, _("Unable to parse JSON input.")
|
|
303
303
|
end
|
|
304
304
|
|
|
@@ -368,7 +368,7 @@ module HammerCLI
|
|
|
368
368
|
|
|
369
369
|
def format(date)
|
|
370
370
|
raise ArgumentError unless date
|
|
371
|
-
::
|
|
371
|
+
::Time.parse(date).iso8601
|
|
372
372
|
rescue ArgumentError
|
|
373
373
|
raise ArgumentError, _("'%s' is not a valid date.") % date
|
|
374
374
|
end
|
|
@@ -72,7 +72,7 @@ module Fields
|
|
|
72
72
|
def initialize(options={}, &block)
|
|
73
73
|
super(options)
|
|
74
74
|
dsl = HammerCLI::Output::Dsl.new
|
|
75
|
-
dsl.build
|
|
75
|
+
dsl.build(&block) if block_given?
|
|
76
76
|
dsl.fields.each { |f| f.parent = self }
|
|
77
77
|
self.output_definition.append dsl.fields
|
|
78
78
|
end
|
|
@@ -13,7 +13,7 @@ module HammerCLI::Output
|
|
|
13
13
|
|
|
14
14
|
def register_formatter(type, *formatters)
|
|
15
15
|
if @_formatters[type].nil?
|
|
16
|
-
@_formatters[type] = FormatterContainer.new
|
|
16
|
+
@_formatters[type] = FormatterContainer.new(*formatters)
|
|
17
17
|
else
|
|
18
18
|
formatters.each { |f| @_formatters[type].add_formatter(f) }
|
|
19
19
|
end
|
|
@@ -84,8 +84,8 @@ module HammerCLI::Output
|
|
|
84
84
|
tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) }
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
def format(data,
|
|
88
|
-
|
|
87
|
+
def format(data, _={})
|
|
88
|
+
HighLine.color(data.to_s, @color)
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
|
|
@@ -97,7 +97,7 @@ module HammerCLI::Output
|
|
|
97
97
|
tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) }
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
def format(string_date,
|
|
100
|
+
def format(string_date, _={})
|
|
101
101
|
t = DateTime.parse(string_date.to_s)
|
|
102
102
|
t.strftime("%Y/%m/%d %H:%M:%S")
|
|
103
103
|
rescue ArgumentError
|
|
@@ -68,13 +68,13 @@ module HammerCLI
|
|
|
68
68
|
|
|
69
69
|
def read_certificate(path)
|
|
70
70
|
OpenSSL::X509::Certificate.new(File.read(path)) unless path.nil?
|
|
71
|
-
rescue SystemCallError
|
|
71
|
+
rescue SystemCallError
|
|
72
72
|
warn _("Could't read SSL client certificate %s.") % path
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def read_key(path)
|
|
76
|
-
OpenSSL::PKey
|
|
77
|
-
rescue SystemCallError
|
|
76
|
+
OpenSSL::PKey.read(File.read(path)) unless path.nil?
|
|
77
|
+
rescue SystemCallError
|
|
78
78
|
warn _("Could't read SSL client key %s.") % path
|
|
79
79
|
end
|
|
80
80
|
end
|
data/lib/hammer_cli/utils.rb
CHANGED
|
@@ -48,18 +48,6 @@ class String
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
class Hash
|
|
52
|
-
# for ruby < 2.5.0
|
|
53
|
-
def transform_keys
|
|
54
|
-
result = {}
|
|
55
|
-
each do |key, value|
|
|
56
|
-
new_key = yield key
|
|
57
|
-
result[new_key] = value
|
|
58
|
-
end
|
|
59
|
-
result
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
51
|
module HammerCLI
|
|
64
52
|
|
|
65
53
|
def self.tty?
|
data/lib/hammer_cli/version.rb
CHANGED
data/locale/Makefile.def
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Definition of common Makefile tasks for PO merging and MO generation.
|
|
3
|
+
#
|
|
4
|
+
# Run make help to list available targets
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
POTFILE = $(DOMAIN).pot
|
|
8
|
+
MOFILE = $(DOMAIN).mo
|
|
9
|
+
POFILES = $(shell find . -name '$(DOMAIN).po')
|
|
10
|
+
MOFILES = $(patsubst %.po,%.mo,$(POFILES))
|
|
11
|
+
POXFILES = $(patsubst %.po,%.pox,$(POFILES))
|
|
12
|
+
EDITFILES = $(patsubst %.po,%.edit.po,$(POFILES))
|
|
13
|
+
TIMESTAMPFILES = $(patsubst %.po,%.po.time_stamp,$(POFILES))
|
|
14
|
+
|
|
15
|
+
%.mo: %.po
|
|
16
|
+
mkdir -p $(shell dirname $@)/LC_MESSAGES
|
|
17
|
+
msgfmt -o $(shell dirname $@)/LC_MESSAGES/$(MOFILE) $<
|
|
18
|
+
|
|
19
|
+
.PHONY: all-mo
|
|
20
|
+
all-mo: $(MOFILES) ## Generate MO files from PO files (default)
|
|
21
|
+
|
|
22
|
+
# Check for malformed strings
|
|
23
|
+
%.pox: %.po
|
|
24
|
+
@command -v pofilter >/dev/null 2>&1 || { echo "Command pofilter not found. Make sure you have translate-toolkit installed." >&2; exit 1; }
|
|
25
|
+
msgfmt -c $<
|
|
26
|
+
pofilter --nofuzzy -t variables -t blank -t urls -t emails -t long -t newlines \
|
|
27
|
+
-t endwhitespace -t endpunc -t puncspacing -t options -t printf -t validchars --gnome $< > $@;
|
|
28
|
+
cat $@
|
|
29
|
+
! grep -q msgid $@
|
|
30
|
+
|
|
31
|
+
.PHONY: check
|
|
32
|
+
check: $(POXFILES) ## Check translations using translate-tool, run make with -k to skip errors and execute for all languages
|
|
33
|
+
|
|
34
|
+
.PHONY: uniq-po
|
|
35
|
+
uniq-po: ## Unify duplicate translations in .po files
|
|
36
|
+
for f in $(shell find ./ -name "*.po") ; do \
|
|
37
|
+
msguniq $$f -o $$f ; \
|
|
38
|
+
done
|
|
39
|
+
|
|
40
|
+
%.edit.po:
|
|
41
|
+
touch $@
|
|
42
|
+
|
|
43
|
+
# Pull translaions from transifex
|
|
44
|
+
.PHONY: tx-pull
|
|
45
|
+
tx-pull: $(EDITFILES)
|
|
46
|
+
@command -v tx >/dev/null 2>&1 || { echo "Command tx not found. Make sure you have transifex-client installed and configured." >&2; exit 1; }
|
|
47
|
+
tx pull -f
|
|
48
|
+
for f in $(EDITFILES); do \
|
|
49
|
+
sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
# Merge .edit.po into .po
|
|
53
|
+
.PHONY: update-po
|
|
54
|
+
update-po:
|
|
55
|
+
for f in $(EDITFILES); do \
|
|
56
|
+
msgcat --use-first --no-location $$f $${f//.edit/} > $${f//.edit/}; \
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
# Extract strings and update the .pot, prepare .edit.po files
|
|
60
|
+
.PHONY: extract-strings
|
|
61
|
+
extract-strings:
|
|
62
|
+
bundle exec rake gettext:find
|
|
63
|
+
|
|
64
|
+
.PHONY: tx-update
|
|
65
|
+
tx-update: extract-strings tx-pull update-po $(MOFILES) ## Download and merge translations from Transifex
|
|
66
|
+
git add ../locale
|
|
67
|
+
git commit -m "i18n - extracting new, pulling from tx"
|
|
68
|
+
@echo Changes commited!
|
|
69
|
+
|
|
70
|
+
.PHONY: clean
|
|
71
|
+
clean: ## Clean everything, removes *.edit.po, *.po.timestamp and *.pox files
|
|
72
|
+
rm -f $(EDITFILES) $(TIMESTAMPFILES) $(POXFILES)
|
|
73
|
+
|
|
74
|
+
.PHONY: help
|
|
75
|
+
help: ## This help message
|
|
76
|
+
@echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)"
|
|
77
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/test/test_helper.rb
CHANGED
|
@@ -11,7 +11,7 @@ SimpleCov.root Pathname.new(File.dirname(__FILE__) + "../../../")
|
|
|
11
11
|
require 'minitest/autorun'
|
|
12
12
|
require 'minitest/spec'
|
|
13
13
|
require "minitest-spec-context"
|
|
14
|
-
require "mocha/
|
|
14
|
+
require "mocha/minitest"
|
|
15
15
|
|
|
16
16
|
require 'hammer_cli'
|
|
17
17
|
require 'hammer_cli/logger'
|
|
@@ -42,7 +42,7 @@ describe HammerCLI::Apipie::Command do
|
|
|
42
42
|
let(:cmd_class) { CommandUnsupp.dup }
|
|
43
43
|
let(:cmd) { cmd_class.new("unsupported", ctx) }
|
|
44
44
|
it "should print help for unsupported command" do
|
|
45
|
-
assert_match
|
|
45
|
+
assert_match(/.*Unfortunately the server does not support such operation.*/, cmd.help)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
end
|
|
@@ -23,7 +23,7 @@ describe HammerCLI::Apipie::OptionDefinition do
|
|
|
23
23
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
let(:opt2) { HammerCLI::Apipie::OptionDefinition.new("--opt2", "OPT2", "'OPT2'"
|
|
26
|
+
let(:opt2) { HammerCLI::Apipie::OptionDefinition.new("--opt2", "OPT2", "'OPT2'") }
|
|
27
27
|
|
|
28
28
|
describe "Option Description should be converted" do
|
|
29
29
|
it "should be converted" do
|
|
@@ -30,7 +30,7 @@ describe HammerCLI::ExceptionHandler do
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
it "should handle help request" do
|
|
33
|
-
output.expects(:print_message).with(cmd.help, {}, verbosity: HammerCLI::V_QUIET)
|
|
33
|
+
output.expects(:print_message).with(cmd.help, {}, { verbosity: HammerCLI::V_QUIET })
|
|
34
34
|
handler.handle_exception(Clamp::HelpWanted.new(cmd), :heading => heading)
|
|
35
35
|
|
|
36
36
|
end
|
|
@@ -51,8 +51,8 @@ describe HammerCLI::ExceptionHandler do
|
|
|
51
51
|
ex = RestClient::ResourceNotFound.new
|
|
52
52
|
output.default_adapter = :silent
|
|
53
53
|
handler.handle_exception(ex)
|
|
54
|
-
assert_match
|
|
55
|
-
assert_match
|
|
54
|
+
assert_match(/Using exception handler HammerCLI::ExceptionHandler#handle_not_found/, @log_output.readline.strip)
|
|
55
|
+
assert_match(/ERROR Exception : (Resource )?Not Found/, @log_output.readline.strip)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "should print default prompts for standard missing arguments" do
|
data/test/unit/history_test.rb
CHANGED
|
@@ -20,13 +20,13 @@ describe HammerCLI::ShellHistory do
|
|
|
20
20
|
describe "loading old history" do
|
|
21
21
|
|
|
22
22
|
it "skips loading if the file does not exist" do
|
|
23
|
-
|
|
23
|
+
HammerCLI::ShellHistory.new(new_file.path)
|
|
24
24
|
|
|
25
25
|
Readline::HISTORY.to_a.must_equal []
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "preseeds readline's history" do
|
|
29
|
-
|
|
29
|
+
HammerCLI::ShellHistory.new(history_file.path)
|
|
30
30
|
|
|
31
31
|
Readline::HISTORY.to_a.must_equal ["line 1", "line 2"]
|
|
32
32
|
end
|
data/test/unit/logger_test.rb
CHANGED
|
@@ -4,7 +4,7 @@ require 'tempfile'
|
|
|
4
4
|
describe Logging::LogEvent do
|
|
5
5
|
|
|
6
6
|
describe '#initialize_logger' do
|
|
7
|
-
let
|
|
7
|
+
let(:logger) { Logging::Logger.new(File.open('/dev/null')) }
|
|
8
8
|
|
|
9
9
|
it "prints message to stderr when log dir can't be created" do
|
|
10
10
|
log_dir = "/nonexistant/dir/logs"
|
|
@@ -12,7 +12,7 @@ describe Logging::LogEvent do
|
|
|
12
12
|
|
|
13
13
|
HammerCLI::Settings.load({:log_dir => log_dir})
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
_, err = capture_io do
|
|
16
16
|
HammerCLI::Logger::initialize_logger(logger)
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -63,8 +63,8 @@ describe HammerCLI::Options::OptionDefinition do
|
|
|
63
63
|
context = {}
|
|
64
64
|
cmd = TestDeprecatedOptionCmd.new("", context)
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
err.must_match
|
|
66
|
+
_, err = capture_io { cmd.run(["--another-deprecated=VALUE"]) }
|
|
67
|
+
err.must_match(/Warning: Option --another-deprecated is deprecated. It is going to be removed/)
|
|
68
68
|
context[:old_option].must_equal "VALUE"
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -72,8 +72,8 @@ describe HammerCLI::Options::OptionDefinition do
|
|
|
72
72
|
context = {}
|
|
73
73
|
cmd = TestDeprecatedOptionCmd.new("", context)
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
err.must_match
|
|
75
|
+
_, err = capture_io { cmd.run(["--deprecated=VALUE"]) }
|
|
76
|
+
err.must_match(/Warning: Option --deprecated is deprecated. Use --test-option instead/)
|
|
77
77
|
context[:test_option].must_equal "VALUE"
|
|
78
78
|
end
|
|
79
79
|
|
|
@@ -20,10 +20,6 @@ describe HammerCLI::Options::Sources::SavedDefaults do
|
|
|
20
20
|
@defaults.expects(:get_defaults).with('--test-multi1').returns(:first_value)
|
|
21
21
|
|
|
22
22
|
current_result = {}
|
|
23
|
-
expected_result = {
|
|
24
|
-
:different_attr_name => 1,
|
|
25
|
-
:multiple_switches_option => :first_value
|
|
26
|
-
}
|
|
27
23
|
|
|
28
24
|
@logger.expects(:info).with('Custom default value 1 was used for attribute --test')
|
|
29
25
|
@logger.expects(:info).with('Custom default value first_value was used for attribute --test-multi1')
|
|
@@ -27,7 +27,7 @@ describe HammerCLI::Output::Adapter::Abstract do
|
|
|
27
27
|
it "should filter formatters with incompatible features" do
|
|
28
28
|
|
|
29
29
|
HammerCLI::Output::Formatters::FormatterLibrary.expects(:new).with({ :type => [] })
|
|
30
|
-
|
|
30
|
+
adapter_class.new({}, {:type => [UnknownTestFormatter.new]})
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
it "should keep compatible formatters" do
|
|
@@ -35,7 +35,7 @@ describe HammerCLI::Output::Adapter::Abstract do
|
|
|
35
35
|
HammerCLI::Output::Formatters::FormatterLibrary.expects(:new).with({ :type => [formatter] })
|
|
36
36
|
# set :unknown tag to abstract
|
|
37
37
|
adapter_class.any_instance.stubs(:features).returns([:unknown])
|
|
38
|
-
|
|
38
|
+
adapter_class.new({}, {:type => [formatter]})
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it "should put serializers first" do
|
|
@@ -46,7 +46,7 @@ describe HammerCLI::Output::Adapter::Abstract do
|
|
|
46
46
|
HammerCLI::Output::Formatters::FormatterLibrary.expects(:new).with({ :type => [formatter2, formatter1] })
|
|
47
47
|
# set :unknown tag to abstract
|
|
48
48
|
adapter_class.any_instance.stubs(:features).returns([:serialized])
|
|
49
|
-
|
|
49
|
+
adapter_class.new({}, {:type => [formatter1, formatter2]})
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
|
|
@@ -24,28 +24,28 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
24
24
|
|
|
25
25
|
it "should print column name" do
|
|
26
26
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
27
|
-
out.must_match
|
|
28
|
-
err.must_match
|
|
27
|
+
out.must_match(/.*Name,Started At.*/)
|
|
28
|
+
err.must_match(//)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
it "should print field value" do
|
|
32
32
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
33
|
-
out.must_match
|
|
34
|
-
err.must_match
|
|
33
|
+
out.must_match(/.*John Doe.*/)
|
|
34
|
+
err.must_match(//)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
it "does not print fields which data are missing from api by default" do
|
|
38
38
|
fields << field_login
|
|
39
39
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
40
|
-
out.wont_match
|
|
41
|
-
err.must_match
|
|
40
|
+
out.wont_match(/.*Login.*/)
|
|
41
|
+
err.must_match(//)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
|
45
45
|
fields << field_missing
|
|
46
46
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
47
|
-
out.must_match
|
|
48
|
-
err.must_match
|
|
47
|
+
out.must_match(/.*Missing.*/)
|
|
48
|
+
err.must_match(//)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
context "handle ids" do
|
|
@@ -59,14 +59,14 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
59
59
|
}]}
|
|
60
60
|
|
|
61
61
|
it "should ommit column of type Id by default" do
|
|
62
|
-
out,
|
|
62
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
63
63
|
out.wont_match(/.*Id.*/)
|
|
64
64
|
out.wont_match(/.*2000,.*/)
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
it "should print column of type Id when --show-ids is set" do
|
|
68
68
|
adapter = HammerCLI::Output::Adapter::CSValues.new( { :show_ids => true } )
|
|
69
|
-
out,
|
|
69
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
70
70
|
out.must_match(/.*Id.*/)
|
|
71
71
|
end
|
|
72
72
|
end
|
|
@@ -75,12 +75,12 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
75
75
|
let(:empty_data) { HammerCLI::Output::RecordCollection.new [] }
|
|
76
76
|
|
|
77
77
|
it "should print headers by default" do
|
|
78
|
-
out,
|
|
78
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
79
79
|
out.must_match(/.*Name.*/)
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
it "should print headers by default even if there is no data" do
|
|
83
|
-
out,
|
|
83
|
+
out, _ = capture_io { adapter.print_collection(fields, empty_data) }
|
|
84
84
|
out.must_match(/.*Name.*/)
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -127,14 +127,14 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
127
127
|
|
|
128
128
|
it "should print column names" do
|
|
129
129
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
130
|
-
out.must_match
|
|
131
|
-
err.must_match
|
|
130
|
+
out.must_match(/.*Demographics::Age,Demographics::Gender,Biometrics::Weight,Biometrics::Height*/)
|
|
131
|
+
err.must_match(//)
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
it "should print data" do
|
|
135
135
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
|
136
|
-
out.must_match
|
|
137
|
-
err.must_match
|
|
136
|
+
out.must_match(/.*2000,22,m,123,155*/)
|
|
137
|
+
err.must_match(//)
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -169,7 +169,7 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
169
169
|
lines = out.split("\n")
|
|
170
170
|
lines[0].must_equal 'Name,Started At,Items::Item Name::1,Items::Item Quantity::1,Items::Item Name::2,Items::Item Quantity::2'
|
|
171
171
|
|
|
172
|
-
err.must_match
|
|
172
|
+
err.must_match(//)
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
it "should print collection data" do
|
|
@@ -179,7 +179,7 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
179
179
|
lines[1].must_equal 'John Doe,2000,hammer,100,"",""'
|
|
180
180
|
lines[2].must_equal 'Jane Roe,2001,cleaver,1,sledge,50'
|
|
181
181
|
|
|
182
|
-
err.must_match
|
|
182
|
+
err.must_match(//)
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
it "should handle empty collection" do
|
|
@@ -188,7 +188,7 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
188
188
|
|
|
189
189
|
lines[0].must_equal 'Name,Started At,Items'
|
|
190
190
|
|
|
191
|
-
err.must_match
|
|
191
|
+
err.must_match(//)
|
|
192
192
|
end
|
|
193
193
|
|
|
194
194
|
end
|
|
@@ -202,7 +202,7 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
202
202
|
end
|
|
203
203
|
|
|
204
204
|
adapter = HammerCLI::Output::Adapter::CSValues.new({}, { :Field => [ DotFormatter.new ]})
|
|
205
|
-
out,
|
|
205
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
206
206
|
out.must_match(/.*-DOT-.*/)
|
|
207
207
|
end
|
|
208
208
|
|
|
@@ -215,7 +215,7 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
|
215
215
|
|
|
216
216
|
adapter = HammerCLI::Output::Adapter::CSValues.new({}, { :Field => [ NilFormatter.new ]})
|
|
217
217
|
nil_data = HammerCLI::Output::RecordCollection.new [{ :name => nil }]
|
|
218
|
-
out,
|
|
218
|
+
out, _ = capture_io { adapter.print_collection([field_name], nil_data) }
|
|
219
219
|
out.must_match(/.*NIL.*/)
|
|
220
220
|
end
|
|
221
221
|
end
|
|
@@ -94,7 +94,7 @@ describe HammerCLI::Output::Adapter::Table do
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
it "should ommit column of type Id by default" do
|
|
97
|
-
out,
|
|
97
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
98
98
|
out.wont_match(/.*ID.*/)
|
|
99
99
|
end
|
|
100
100
|
|
|
@@ -110,7 +110,7 @@ describe HammerCLI::Output::Adapter::Table do
|
|
|
110
110
|
|
|
111
111
|
it "should print column of type Id when --show-ids is set" do
|
|
112
112
|
adapter = HammerCLI::Output::Adapter::Table.new( { :show_ids => true } )
|
|
113
|
-
out,
|
|
113
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
114
114
|
out.must_match(/.*ID.*/)
|
|
115
115
|
end
|
|
116
116
|
|
|
@@ -128,12 +128,12 @@ describe HammerCLI::Output::Adapter::Table do
|
|
|
128
128
|
|
|
129
129
|
context "handle headers" do
|
|
130
130
|
it "should print headers by default" do
|
|
131
|
-
out,
|
|
131
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
132
132
|
out.must_match(/.*NAME.*/)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
it "should print headers by default even if there is no data" do
|
|
136
|
-
out,
|
|
136
|
+
out, _ = capture_io { adapter.print_collection(fields, empty_data) }
|
|
137
137
|
out.must_match(/.*NAME.*/)
|
|
138
138
|
end
|
|
139
139
|
|
|
@@ -353,7 +353,7 @@ describe HammerCLI::Output::Adapter::Table do
|
|
|
353
353
|
end
|
|
354
354
|
|
|
355
355
|
adapter = HammerCLI::Output::Adapter::Table.new({}, { :Field => [ DotFormatter.new ]})
|
|
356
|
-
out,
|
|
356
|
+
out, _ = capture_io { adapter.print_collection(fields, data) }
|
|
357
357
|
out.must_match(/.*-DOT-.*/)
|
|
358
358
|
end
|
|
359
359
|
|
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: 3.
|
|
4
|
+
version: 3.7.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: 2023-
|
|
12
|
+
date: 2023-05-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: clamp
|
|
@@ -17,20 +17,20 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
20
|
+
version: 1.3.1
|
|
21
21
|
- - "<"
|
|
22
22
|
- !ruby/object:Gem::Version
|
|
23
|
-
version:
|
|
23
|
+
version: 2.0.0
|
|
24
24
|
type: :runtime
|
|
25
25
|
prerelease: false
|
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
27
|
requirements:
|
|
28
28
|
- - ">="
|
|
29
29
|
- !ruby/object:Gem::Version
|
|
30
|
-
version:
|
|
30
|
+
version: 1.3.1
|
|
31
31
|
- - "<"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 2.0.0
|
|
34
34
|
- !ruby/object:Gem::Dependency
|
|
35
35
|
name: logging
|
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -174,8 +174,8 @@ extra_rdoc_files:
|
|
|
174
174
|
- doc/writing_a_plugin.md
|
|
175
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
|
|
@@ -294,6 +294,7 @@ files:
|
|
|
294
294
|
- lib/hammer_cli/utils.rb
|
|
295
295
|
- lib/hammer_cli/verbosity.rb
|
|
296
296
|
- lib/hammer_cli/version.rb
|
|
297
|
+
- locale/Makefile.def
|
|
297
298
|
- locale/ca/LC_MESSAGES/hammer-cli.mo
|
|
298
299
|
- locale/de/LC_MESSAGES/hammer-cli.mo
|
|
299
300
|
- locale/en/LC_MESSAGES/hammer-cli.mo
|
|
@@ -387,7 +388,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
387
388
|
requirements:
|
|
388
389
|
- - ">="
|
|
389
390
|
- !ruby/object:Gem::Version
|
|
390
|
-
version: '
|
|
391
|
+
version: '2.7'
|
|
391
392
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
392
393
|
requirements:
|
|
393
394
|
- - ">="
|
|
@@ -399,24 +400,17 @@ signing_key:
|
|
|
399
400
|
specification_version: 4
|
|
400
401
|
summary: Universal command-line interface
|
|
401
402
|
test_files:
|
|
402
|
-
- test/functional/defaults_test.rb
|
|
403
|
-
- test/functional/help_test.rb
|
|
404
403
|
- test/functional/nil_values_test.rb
|
|
405
404
|
- test/functional/test_helper.rb
|
|
406
|
-
- test/
|
|
405
|
+
- test/functional/help_test.rb
|
|
406
|
+
- test/functional/defaults_test.rb
|
|
407
407
|
- test/unit/apipie/api_connection_test.rb
|
|
408
|
-
- test/unit/apipie/command_test.rb
|
|
409
408
|
- test/unit/apipie/option_builder_test.rb
|
|
410
|
-
- test/unit/apipie/option_definition_test.rb
|
|
411
409
|
- test/unit/apipie/test_helper.rb
|
|
412
|
-
- test/unit/
|
|
410
|
+
- test/unit/apipie/command_test.rb
|
|
411
|
+
- test/unit/apipie/option_definition_test.rb
|
|
413
412
|
- test/unit/ca_cert_manager_test.rb
|
|
414
|
-
- test/unit/command_extensions_test.rb
|
|
415
|
-
- test/unit/completer_test.rb
|
|
416
413
|
- test/unit/connection_test.rb
|
|
417
|
-
- test/unit/csv_parser_test.rb
|
|
418
|
-
- test/unit/defaults_test.rb
|
|
419
|
-
- test/unit/exception_handler_test.rb
|
|
420
414
|
- test/unit/fixtures/apipie/architectures.json
|
|
421
415
|
- test/unit/fixtures/apipie/documented.json
|
|
422
416
|
- test/unit/fixtures/certs/ca_cert.pem
|
|
@@ -425,36 +419,30 @@ test_files:
|
|
|
425
419
|
- test/unit/fixtures/defaults/defaults_dashed.yml
|
|
426
420
|
- test/unit/fixtures/json_input/invalid.json
|
|
427
421
|
- test/unit/fixtures/json_input/valid.json
|
|
428
|
-
- test/unit/help/builder_test.rb
|
|
429
422
|
- test/unit/help/definition/abstract_item_test.rb
|
|
430
423
|
- test/unit/help/definition/list_test.rb
|
|
431
424
|
- test/unit/help/definition/note_test.rb
|
|
432
425
|
- test/unit/help/definition/section_test.rb
|
|
433
426
|
- test/unit/help/definition/text_test.rb
|
|
427
|
+
- test/unit/help/builder_test.rb
|
|
434
428
|
- test/unit/help/definition_test.rb
|
|
435
429
|
- test/unit/help/text_builder_test.rb
|
|
436
|
-
- test/unit/history_test.rb
|
|
437
|
-
- test/unit/i18n_test.rb
|
|
438
|
-
- test/unit/logger_test.rb
|
|
439
|
-
- test/unit/main_test.rb
|
|
440
430
|
- test/unit/messages_test.rb
|
|
441
|
-
- test/unit/modules_test.rb
|
|
442
|
-
- test/unit/option_builder_test.rb
|
|
443
|
-
- test/unit/options/matcher_test.rb
|
|
444
|
-
- test/unit/options/normalizers_test.rb
|
|
445
431
|
- test/unit/options/option_collector_test.rb
|
|
446
|
-
- test/unit/options/option_definition_test.rb
|
|
447
|
-
- test/unit/options/option_family_test.rb
|
|
448
432
|
- test/unit/options/processor_list_test.rb
|
|
449
433
|
- test/unit/options/sources/command_line_test.rb
|
|
450
434
|
- test/unit/options/sources/saved_defaults_test.rb
|
|
451
435
|
- test/unit/options/validators/dsl_test.rb
|
|
452
|
-
- test/unit/
|
|
436
|
+
- test/unit/options/matcher_test.rb
|
|
437
|
+
- test/unit/options/normalizers_test.rb
|
|
438
|
+
- test/unit/options/option_family_test.rb
|
|
439
|
+
- test/unit/options/option_definition_test.rb
|
|
453
440
|
- test/unit/output/adapter/base_test.rb
|
|
454
|
-
- test/unit/output/adapter/csv_test.rb
|
|
455
441
|
- test/unit/output/adapter/json_test.rb
|
|
456
|
-
- test/unit/output/adapter/table_test.rb
|
|
457
442
|
- test/unit/output/adapter/yaml_test.rb
|
|
443
|
+
- test/unit/output/adapter/abstract_test.rb
|
|
444
|
+
- test/unit/output/adapter/csv_test.rb
|
|
445
|
+
- test/unit/output/adapter/table_test.rb
|
|
458
446
|
- test/unit/output/definition_test.rb
|
|
459
447
|
- test/unit/output/dsl_test.rb
|
|
460
448
|
- test/unit/output/field_filter_test.rb
|
|
@@ -462,7 +450,20 @@ test_files:
|
|
|
462
450
|
- test/unit/output/formatters_test.rb
|
|
463
451
|
- test/unit/output/output_test.rb
|
|
464
452
|
- test/unit/output/record_collection_test.rb
|
|
465
|
-
- test/unit/settings_test.rb
|
|
466
453
|
- test/unit/test_helper.rb
|
|
454
|
+
- test/unit/abstract_test.rb
|
|
455
|
+
- test/unit/command_extensions_test.rb
|
|
456
|
+
- test/unit/defaults_test.rb
|
|
457
|
+
- test/unit/i18n_test.rb
|
|
458
|
+
- test/unit/main_test.rb
|
|
459
|
+
- test/unit/modules_test.rb
|
|
460
|
+
- test/unit/settings_test.rb
|
|
461
|
+
- test/unit/exception_handler_test.rb
|
|
462
|
+
- test/unit/history_test.rb
|
|
463
|
+
- test/unit/logger_test.rb
|
|
464
|
+
- test/unit/bash_test.rb
|
|
465
|
+
- test/unit/completer_test.rb
|
|
466
|
+
- test/unit/csv_parser_test.rb
|
|
467
|
+
- test/unit/option_builder_test.rb
|
|
467
468
|
- test/unit/utils_test.rb
|
|
468
469
|
- test/test_helper.rb
|