hammer_cli 0.1.1 → 0.1.2
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/README.md +3 -2
- data/bin/hammer +6 -0
- data/config/cli_config.template.yml +3 -0
- data/doc/creating_commands.md +19 -0
- data/doc/i18n.md +15 -0
- data/doc/installation.md +1 -1
- data/doc/release_notes.md +61 -0
- data/lib/hammer_cli/abstract.rb +10 -37
- data/lib/hammer_cli/apipie/command.rb +10 -6
- data/lib/hammer_cli/apipie/option_builder.rb +26 -13
- data/lib/hammer_cli/apipie/options.rb +12 -10
- data/lib/hammer_cli/completer.rb +2 -2
- data/lib/hammer_cli/exception_handler.rb +5 -4
- data/lib/hammer_cli/exceptions.rb +1 -0
- data/lib/hammer_cli/i18n.rb +41 -0
- data/lib/hammer_cli/main.rb +2 -2
- data/lib/hammer_cli/options/normalizers.rb +31 -0
- data/lib/hammer_cli/output/adapter/abstract.rb +5 -1
- data/lib/hammer_cli/output/adapter/csv.rb +140 -12
- data/lib/hammer_cli/shell.rb +6 -6
- data/lib/hammer_cli/subcommand.rb +82 -0
- data/lib/hammer_cli/utils.rb +13 -0
- data/lib/hammer_cli/version.rb +1 -1
- data/locale/Makefile +11 -10
- data/locale/README.md +18 -0
- data/locale/en/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en/hammer-cli.po +227 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en_GB/hammer-cli.po +274 -0
- data/locale/es/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/es/hammer-cli.po +275 -0
- data/locale/fr/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/fr/hammer-cli.po +276 -0
- data/locale/hammer-cli.pot +158 -93
- data/test/reports/TEST-Fields-ContainerField-display-.xml +7 -0
- data/test/reports/TEST-Fields-ContainerField-display-blank-is-allowed.xml +15 -0
- data/test/reports/TEST-Fields-ContainerField-display-blank-is-not-allowed.xml +15 -0
- data/test/reports/TEST-Fields-ContainerField.xml +7 -0
- data/test/reports/TEST-Fields-Field-display-.xml +7 -0
- data/test/reports/TEST-Fields-Field-display-blank-is-allowed.xml +11 -0
- data/test/reports/TEST-Fields-Field-display-blank-is-not-allowed.xml +11 -0
- data/test/reports/TEST-Fields-Field-hide-blank-.xml +11 -0
- data/test/reports/TEST-Fields-Field-parameters.xml +9 -0
- data/test/reports/TEST-Fields-Field.xml +13 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-build-options.xml +15 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-exception-handler.xml +13 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-logging.xml +21 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-option-builder.xml +11 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-options.xml +11 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-output.xml +19 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-subcommand-behavior-remove-subcommand.xml +11 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-subcommand-behavior-subcommand-.xml +13 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-subcommand-behavior-subcommand.xml +11 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand-subcommand-behavior.xml +7 -0
- data/test/reports/TEST-HammerCLI-AbstractCommand.xml +11 -0
- data/test/reports/TEST-HammerCLI-Apipie-Command-options.xml +11 -0
- data/test/reports/TEST-HammerCLI-Apipie-Command-resource-defined.xml +9 -0
- data/test/reports/TEST-HammerCLI-Apipie-Command-setting-resources.xml +19 -0
- data/test/reports/TEST-HammerCLI-Apipie-Command.xml +9 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-aliasing-resources.xml +13 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-filtering-options.xml +15 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-required-options.xml +11 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-setting-correct-normalizers.xml +9 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-with-hash-params.xml +11 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder-with-one-simple-param.xml +15 -0
- data/test/reports/TEST-HammerCLI-Apipie-OptionBuilder.xml +7 -0
- data/test/reports/TEST-HammerCLI-Completer-command-completion.xml +29 -0
- data/test/reports/TEST-HammerCLI-Completer-option-value-completion.xml +17 -0
- data/test/reports/TEST-HammerCLI-Completer-subcommand-completion.xml +19 -0
- data/test/reports/TEST-HammerCLI-Completer.xml +7 -0
- data/test/reports/TEST-HammerCLI-CompleterLine-line-complete.xml +25 -0
- data/test/reports/TEST-HammerCLI-CompleterLine-splitting-words.xml +29 -0
- data/test/reports/TEST-HammerCLI-CompleterLine.xml +7 -0
- data/test/reports/TEST-HammerCLI-CompleterWord-complete-.xml +23 -0
- data/test/reports/TEST-HammerCLI-CompleterWord-quote.xml +15 -0
- data/test/reports/TEST-HammerCLI-CompleterWord-quoted-.xml +13 -0
- data/test/reports/TEST-HammerCLI-CompleterWord.xml +7 -0
- data/test/reports/TEST-HammerCLI-Connection.xml +21 -0
- data/test/reports/TEST-HammerCLI-ExceptionHandler.xml +21 -0
- data/test/reports/TEST-HammerCLI-I18n.xml +11 -0
- data/test/reports/TEST-HammerCLI-MainCommand-loading-context-password.xml +11 -0
- data/test/reports/TEST-HammerCLI-MainCommand-loading-context-username.xml +11 -0
- data/test/reports/TEST-HammerCLI-MainCommand-loading-context-verbose.xml +9 -0
- data/test/reports/TEST-HammerCLI-MainCommand-loading-context.xml +7 -0
- data/test/reports/TEST-HammerCLI-MainCommand.xml +7 -0
- data/test/reports/TEST-HammerCLI-Modules-find-by-name.xml +13 -0
- data/test/reports/TEST-HammerCLI-Modules-load-a-module-module-not-found.xml +13 -0
- data/test/reports/TEST-HammerCLI-Modules-load-a-module-module-runtime-exception.xml +13 -0
- data/test/reports/TEST-HammerCLI-Modules-load-a-module-success.xml +15 -0
- data/test/reports/TEST-HammerCLI-Modules-load-a-module.xml +7 -0
- data/test/reports/TEST-HammerCLI-Modules-load-all-modules.xml +9 -0
- data/test/reports/TEST-HammerCLI-Modules-names.xml +13 -0
- data/test/reports/TEST-HammerCLI-Modules.xml +7 -0
- data/test/reports/TEST-HammerCLI-OptionBuilderContainer.0.xml +7 -0
- data/test/reports/TEST-HammerCLI-OptionBuilderContainer.xml +11 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-abstract.xml +9 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-bool.xml +31 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-datetime.xml +17 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-enum.xml +15 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-enumlist.xml +21 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-json-input.xml +15 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-key-value-list.xml +17 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers-list.xml +15 -0
- data/test/reports/TEST-HammerCLI-Options-Normalizers.xml +7 -0
- data/test/reports/TEST-HammerCLI-Options-OptionDefinition-context.xml +9 -0
- data/test/reports/TEST-HammerCLI-Options-OptionDefinition-formatters.xml +11 -0
- data/test/reports/TEST-HammerCLI-Options-OptionDefinition.xml +7 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Abstract-error-messages.xml +15 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Abstract-messages.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Abstract-test-data-for-field.xml +15 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Abstract.xml +17 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Base-print-collection-show-ids.xml +9 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Base-print-collection.xml +27 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Base.xml +7 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-collection-formatters.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-collection-handle-fields-with-collections.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-collection-handle-fields-with-containers.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-collection-handle-ids.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-collection.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues-print-message.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-CSValues.xml +7 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table-print-collection-column-width.xml +15 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table-print-collection-formatters.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table-print-collection-handle-ids.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table-print-collection-sort-columns.xml +9 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table-print-collection.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Adapter-Table.xml +7 -0
- data/test/reports/TEST-HammerCLI-Output-Definition-empty-.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Definition.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl-collection.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl-custom-fields.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl-fields.xml +15 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl-label.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl-path-definition.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Dsl.xml +9 -0
- data/test/reports/TEST-HammerCLI-Output-FieldFilter.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-BooleanFormatter.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-ColorFormatter.xml +9 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-DateFormatter.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-FieldFormatter.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-FormatterContainer.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-FormatterLibrary.xml +11 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-KeyValueFormatter.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-ListFormatter.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Formatters-LongTextFormatter.xml +13 -0
- data/test/reports/TEST-HammerCLI-Output-Output-adapters.xml +17 -0
- data/test/reports/TEST-HammerCLI-Output-Output-data.xml +15 -0
- data/test/reports/TEST-HammerCLI-Output-Output-formatters.xml +9 -0
- data/test/reports/TEST-HammerCLI-Output-Output-messages.xml +19 -0
- data/test/reports/TEST-HammerCLI-Output-Output.xml +7 -0
- data/test/reports/TEST-HammerCLI-Output-RecordCollection.xml +13 -0
- data/test/reports/TEST-HammerCLI-Settings-load-from-paths.xml +15 -0
- data/test/reports/TEST-HammerCLI-Settings.xml +25 -0
- data/test/reports/TEST-HammerCLI-ShellHistory-loading-old-history.xml +11 -0
- data/test/reports/TEST-HammerCLI-ShellHistory-saving-history.xml +15 -0
- data/test/reports/TEST-HammerCLI-ShellHistory.xml +7 -0
- data/test/reports/TEST-MiniTest-Spec.xml +7 -0
- data/test/reports/TEST-String-camelize.xml +11 -0
- data/test/reports/TEST-String-formatting.xml +17 -0
- data/test/reports/TEST-String-indent.xml +11 -0
- data/test/reports/TEST-String-interactive-.xml +13 -0
- data/test/reports/TEST-String.xml +7 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-AllConstraint-exist-.xml +13 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-AllConstraint.xml +7 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-AnyConstraint-exist-.xml +13 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-AnyConstraint.xml +7 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-BaseConstraint-exist-.xml +9 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-BaseConstraint-rejected.xml +13 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-BaseConstraint-required.xml +13 -0
- data/test/reports/TEST-constraints-HammerCLI-Validator-BaseConstraint.xml +7 -0
- data/test/reports/TEST-constraints.xml +7 -0
- data/test/unit/abstract_test.rb +15 -11
- data/test/unit/apipie/command_test.rb +29 -1
- data/test/unit/apipie/option_builder_test.rb +22 -0
- data/test/unit/fixtures/apipie/documented.json +44 -0
- data/test/unit/options/normalizers_test.rb +35 -0
- data/test/unit/output/adapter/csv_test.rb +104 -4
- data/test/unit/utils_test.rb +58 -0
- metadata +292 -6
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="constraints::HammerCLI::Validator::BaseConstraint::rejected" tests="3" time="0.001188178" failures="0" errors="0" skipped="0" assertions="3">
|
3
|
+
<testcase name="test_0003_should return nil when exist? returns true" time="0.000339906" assertions="1">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="test_0002_should raise exception with a message" time="0.000330188" assertions="1">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="test_0001_should raise exception when exist? returns true" time="0.000327038" assertions="1">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="constraints::HammerCLI::Validator::BaseConstraint::required" tests="3" time="0.001221194" failures="0" errors="0" skipped="0" assertions="2">
|
3
|
+
<testcase name="test_0003_should return nil when exist? returns true" time="0.000335162" assertions="1">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="test_0001_should raise exception when exist? returns true" time="0.000327945" assertions="1">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="test_0002_should raise exception with a message" time="0.000337518" assertions="0">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
data/test/unit/abstract_test.rb
CHANGED
@@ -277,16 +277,6 @@ describe HammerCLI::AbstractCommand do
|
|
277
277
|
HammerCLI::AbstractCommand.option_builder.builders.empty?.must_equal true
|
278
278
|
end
|
279
279
|
|
280
|
-
it "can be initialized with custom builder" do
|
281
|
-
cmd = Class.new(HammerCLI::AbstractCommand) do
|
282
|
-
def self.custom_option_builders
|
283
|
-
[:builder_1, :builder_2]
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
cmd.option_builder.builders.must_equal [:builder_1, :builder_2]
|
288
|
-
end
|
289
|
-
|
290
280
|
end
|
291
281
|
|
292
282
|
describe "build options" do
|
@@ -304,7 +294,7 @@ describe HammerCLI::AbstractCommand do
|
|
304
294
|
|
305
295
|
class TestBuilderCmd < HammerCLI::AbstractCommand
|
306
296
|
|
307
|
-
def self.
|
297
|
+
def self.create_option_builder
|
308
298
|
TestOptionBuilder.new
|
309
299
|
end
|
310
300
|
|
@@ -327,6 +317,20 @@ describe HammerCLI::AbstractCommand do
|
|
327
317
|
TestBuilderCmd.recognised_options.map(&:description).flatten.sort.must_equal ["original_test", "test2"].sort
|
328
318
|
end
|
329
319
|
|
320
|
+
it "passes params to the builders" do
|
321
|
+
@params = {:param1 => 1, :param2 => :value}
|
322
|
+
TestBuilderCmd.option_builder.expects(:build).with(@params).returns([])
|
323
|
+
TestBuilderCmd.build_options(@params)
|
324
|
+
end
|
325
|
+
|
326
|
+
it "accepts block" do
|
327
|
+
@params = {:param1 => 1, :param2 => :value}
|
328
|
+
TestBuilderCmd.option_builder.expects(:build).with(@params).returns([])
|
329
|
+
TestBuilderCmd.build_options do |params|
|
330
|
+
@params
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
330
334
|
end
|
331
335
|
|
332
336
|
it "should inherit command_name" do
|
@@ -13,6 +13,19 @@ describe HammerCLI::Apipie::Command do
|
|
13
13
|
action :show
|
14
14
|
end
|
15
15
|
|
16
|
+
class OptionCommand < TestCommand
|
17
|
+
resource :architectures, :create
|
18
|
+
|
19
|
+
def option_name
|
20
|
+
'test_name'
|
21
|
+
end
|
22
|
+
|
23
|
+
def option_operatingsystem_ids
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
16
29
|
class CommandA < TestCommand
|
17
30
|
resource :architectures, :index
|
18
31
|
|
@@ -103,5 +116,20 @@ describe HammerCLI::Apipie::Command do
|
|
103
116
|
|
104
117
|
end
|
105
118
|
|
106
|
-
|
119
|
+
context "options" do
|
107
120
|
|
121
|
+
it "should collect method options from given options" do
|
122
|
+
cmd_opt = OptionCommand.new("", ctx)
|
123
|
+
params = cmd_opt.class.resource.action(:create).params
|
124
|
+
cmd_opt.method_options_for_params(params, {'option_name' => 'name'}).must_equal({"architecture" => {"name" => "name"}})
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should collect method options from methods" do
|
128
|
+
cmd_opt = OptionCommand.new("", ctx)
|
129
|
+
params = cmd_opt.class.resource.action(:create).params
|
130
|
+
cmd_opt.method_options_for_params(params, {}).must_equal({"architecture"=>{"name"=>"test_name"}})
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -106,5 +106,27 @@ describe HammerCLI::Apipie::OptionBuilder do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
end
|
109
|
+
|
110
|
+
context "aliasing resources" do
|
111
|
+
let(:action) {api.resource(:documented).action(:action_with_ids)}
|
112
|
+
let(:builder_options) { {:resource_mapping => {:organization => 'company', 'compute_resource' => :compute_provider}} }
|
113
|
+
|
114
|
+
it "renames options" do
|
115
|
+
# builder_options[:resource_mapping] = {:organization => 'company', 'compute_resource' => :compute_provider}
|
116
|
+
options.map(&:long_switch).sort.must_equal ["--company-id", "--company-ids", "--compute-provider-id", "--name"]
|
117
|
+
end
|
118
|
+
|
119
|
+
it "renames option types" do
|
120
|
+
# builder_options[:resource_mapping] = {:organization => 'company', 'compute_resource' => :compute_provider}
|
121
|
+
options.map(&:type).sort.must_equal ["COMPANY_ID", "COMPANY_IDS", "COMPUTE_PROVIDER_ID", "NAME"]
|
122
|
+
end
|
123
|
+
|
124
|
+
it "keeps option accessor the same" do
|
125
|
+
# builder_options[:resource_mapping] = {:organization => 'company', 'compute_resource' => :compute_provider}
|
126
|
+
options.map(&:attribute_name).sort.must_equal HammerCLI.option_accessor_name("compute_resource_id", "name", "organization_id", "organization_ids")
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
109
131
|
end
|
110
132
|
|
@@ -26,6 +26,50 @@
|
|
26
26
|
],
|
27
27
|
"full_description": ""
|
28
28
|
},
|
29
|
+
{
|
30
|
+
"name": "action_with_ids",
|
31
|
+
"examples": [],
|
32
|
+
"errors": [],
|
33
|
+
"params": [
|
34
|
+
{
|
35
|
+
"name": "name",
|
36
|
+
"allow_null": false,
|
37
|
+
"full_name": "name",
|
38
|
+
"validator": "Must be String",
|
39
|
+
"expected_type": "string",
|
40
|
+
"description": "",
|
41
|
+
"required": false
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "organization_id",
|
45
|
+
"allow_null": false,
|
46
|
+
"full_name": "organization_id",
|
47
|
+
"validator": "Must be number",
|
48
|
+
"expected_type": "number",
|
49
|
+
"description": "",
|
50
|
+
"required": false
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"name": "organization_ids",
|
54
|
+
"allow_null": false,
|
55
|
+
"full_name": "organization_ids",
|
56
|
+
"validator": "Array of numbers",
|
57
|
+
"expected_type": "Array",
|
58
|
+
"description": "",
|
59
|
+
"required": false
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"name": "compute_resource_id",
|
63
|
+
"allow_null": false,
|
64
|
+
"full_name": "compute_resource_id",
|
65
|
+
"validator": "Must be number",
|
66
|
+
"expected_type": "number",
|
67
|
+
"description": "",
|
68
|
+
"required": false
|
69
|
+
}
|
70
|
+
],
|
71
|
+
"full_description": ""
|
72
|
+
},
|
29
73
|
{
|
30
74
|
"name": "create",
|
31
75
|
"examples": [],
|
@@ -171,6 +171,41 @@ describe HammerCLI::Options::Normalizers do
|
|
171
171
|
|
172
172
|
end
|
173
173
|
|
174
|
+
describe 'enumlist' do
|
175
|
+
|
176
|
+
let (:formatter) { HammerCLI::Options::Normalizers::EnumList.new ['1', '2', 'a', 'b'] }
|
177
|
+
|
178
|
+
it "should return array of values when the values are allowed" do
|
179
|
+
formatter.format("a,b,1").must_equal(['a', 'b', '1'])
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should raise argument error when any of the values isn't in the list" do
|
183
|
+
proc { formatter.format("c,d") }.must_raise ArgumentError
|
184
|
+
proc { formatter.format('1,x') }.must_raise ArgumentError
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should remove duplicate values" do
|
188
|
+
formatter.format("a,a,a,a,a").must_equal ['a']
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should not change order of the values" do
|
192
|
+
formatter.format("a,b,2,1").must_equal ['a', 'b', '2', '1']
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should return empty array on nil" do
|
196
|
+
formatter.format(nil).must_equal []
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should return empty array on empty string" do
|
200
|
+
formatter.format("").must_equal []
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should list allowed values in description" do
|
204
|
+
formatter.description.must_equal("Any combination (comma separated list) of ''1', '2', 'a', 'b''")
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
|
174
209
|
describe 'datetime' do
|
175
210
|
|
176
211
|
let(:formatter) { HammerCLI::Options::Normalizers::DateTime.new }
|
@@ -16,13 +16,16 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
16
16
|
:started_at => "2000"
|
17
17
|
}]}
|
18
18
|
|
19
|
-
|
20
19
|
it "should print column name" do
|
21
|
-
|
20
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
21
|
+
out.must_match /.*Name,Started At.*/
|
22
|
+
err.must_match //
|
22
23
|
end
|
23
24
|
|
24
25
|
it "should print field value" do
|
25
|
-
|
26
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
27
|
+
out.must_match /.*John Doe.*/
|
28
|
+
err.must_match //
|
26
29
|
end
|
27
30
|
|
28
31
|
context "handle ids" do
|
@@ -30,11 +33,15 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
30
33
|
let(:fields) {
|
31
34
|
[field_name, field_id]
|
32
35
|
}
|
36
|
+
let(:data) { HammerCLI::Output::RecordCollection.new [{
|
37
|
+
:name => "John Doe",
|
38
|
+
:some_id => "2000"
|
39
|
+
}]}
|
33
40
|
|
34
41
|
it "should ommit column of type Id by default" do
|
35
42
|
out, err = capture_io { adapter.print_collection(fields, data) }
|
36
43
|
out.wont_match(/.*Id.*/)
|
37
|
-
out.wont_match(/.*
|
44
|
+
out.wont_match(/.*2000,.*/)
|
38
45
|
end
|
39
46
|
|
40
47
|
it "should print column of type Id when --show-ids is set" do
|
@@ -44,6 +51,99 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
54
|
+
context "handle fields with containers" do
|
55
|
+
let(:demographics) {
|
56
|
+
Fields::Label.new(:path => [], :label => "Demographics") do
|
57
|
+
from :demographics do
|
58
|
+
field :age, "Age"
|
59
|
+
field :gender, "Gender"
|
60
|
+
label _("Biometrics") do
|
61
|
+
from :biometrics do
|
62
|
+
field :weight, "Weight"
|
63
|
+
field :height, "Height"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
}
|
69
|
+
let(:fields) {
|
70
|
+
[field_name, field_started_at, demographics]
|
71
|
+
}
|
72
|
+
let(:data) { HammerCLI::Output::RecordCollection.new [{
|
73
|
+
:name => "John Doe",
|
74
|
+
:started_at => "2000",
|
75
|
+
:demographics=> { :age => '22', :gender => 'm',
|
76
|
+
:biometrics => { :weight => '123', :height => '155' } }
|
77
|
+
}]}
|
78
|
+
|
79
|
+
it "should print column names" do
|
80
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
81
|
+
out.must_match /.*Demographics::Age,Demographics::Gender,Biometrics::Weight,Biometrics::Height*/
|
82
|
+
err.must_match //
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should print data" do
|
86
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
87
|
+
out.must_match /.*2000,22,m,123,155*/
|
88
|
+
err.must_match //
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "handle fields with collections" do
|
93
|
+
let(:items) {
|
94
|
+
Fields::Collection.new(:path => [:items], :label => "Items") do
|
95
|
+
from :item do
|
96
|
+
field :name, "Item Name"
|
97
|
+
field :quantity, "Item Quantity"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
}
|
101
|
+
let(:fields) {
|
102
|
+
[field_name, field_started_at, items]
|
103
|
+
}
|
104
|
+
let(:data) { HammerCLI::Output::RecordCollection.new [
|
105
|
+
{
|
106
|
+
:name => "John Doe",
|
107
|
+
:started_at => "2000",
|
108
|
+
:items => [{:item => { :name => 'hammer', :quantity => '100'}}]
|
109
|
+
},
|
110
|
+
{
|
111
|
+
:name => "Jane Roe",
|
112
|
+
:started_at => "2001",
|
113
|
+
:items => [{:item => { :name => 'cleaver', :quantity => '1'}}, {:item => { :name => 'sledge', :quantity => '50'}}]
|
114
|
+
}
|
115
|
+
]}
|
116
|
+
|
117
|
+
it "should print collection column name" do
|
118
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
119
|
+
|
120
|
+
lines = out.split("\n")
|
121
|
+
lines[0].must_equal 'Name,Started At,Items::Item Name::1,Items::Item Quantity::1,Items::Item Name::2,Items::Item Quantity::2'
|
122
|
+
|
123
|
+
err.must_match //
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should print collection data" do
|
127
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
128
|
+
lines = out.split("\n")
|
129
|
+
|
130
|
+
lines[1].must_equal 'John Doe,2000,hammer,100,"",""'
|
131
|
+
lines[2].must_equal 'Jane Roe,2001,cleaver,1,sledge,50'
|
132
|
+
|
133
|
+
err.must_match //
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should handle empty collection" do
|
137
|
+
out, err = capture_io { adapter.print_collection(fields, []) }
|
138
|
+
lines = out.split("\n")
|
139
|
+
|
140
|
+
lines[0].must_equal 'Name,Started At,Items'
|
141
|
+
|
142
|
+
err.must_match //
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
47
147
|
context "formatters" do
|
48
148
|
it "should apply formatters" do
|
49
149
|
class DotFormatter < HammerCLI::Output::Formatters::FieldFormatter
|
data/test/unit/utils_test.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
3
|
|
4
|
+
module Constant
|
5
|
+
module Test
|
6
|
+
class X
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
4
11
|
describe String do
|
5
12
|
|
6
13
|
context "formatting" do
|
@@ -56,6 +63,35 @@ describe String do
|
|
56
63
|
|
57
64
|
end
|
58
65
|
|
66
|
+
describe "constantize" do
|
67
|
+
|
68
|
+
it "raises NameError for empty string" do
|
69
|
+
proc {
|
70
|
+
"".constantize
|
71
|
+
}.must_raise NameError
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises NameError for unknown constant" do
|
75
|
+
proc {
|
76
|
+
"UnknownClass".constantize
|
77
|
+
}.must_raise NameError
|
78
|
+
end
|
79
|
+
|
80
|
+
it "returns correct constant" do
|
81
|
+
"Object".constantize.must_equal Object
|
82
|
+
end
|
83
|
+
|
84
|
+
it "returns correct namespaced constant" do
|
85
|
+
"Constant::Test::X".constantize.must_equal Constant::Test::X
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
describe HammerCLI do
|
94
|
+
|
59
95
|
describe "interactive?" do
|
60
96
|
|
61
97
|
before :each do
|
@@ -89,5 +125,27 @@ describe String do
|
|
89
125
|
end
|
90
126
|
end
|
91
127
|
|
128
|
+
|
129
|
+
describe "constant_path" do
|
130
|
+
|
131
|
+
it "returns empty array for empty string" do
|
132
|
+
HammerCLI.constant_path("").must_equal []
|
133
|
+
end
|
134
|
+
|
135
|
+
it "raises NameError for unknown constant" do
|
136
|
+
proc {
|
137
|
+
HammerCLI.constant_path("UnknownClass")
|
138
|
+
}.must_raise NameError
|
139
|
+
end
|
140
|
+
|
141
|
+
it "returns single constant" do
|
142
|
+
HammerCLI.constant_path("Object").must_equal [Object]
|
143
|
+
end
|
144
|
+
|
145
|
+
it "returns correct path for namespaced constant" do
|
146
|
+
HammerCLI.constant_path("Constant::Test::X").must_equal [Constant, Constant::Test, Constant::Test::X]
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
92
150
|
end
|
93
151
|
|