hammer_cli 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hammer +3 -1
  3. data/config/cli_config.template.yml +3 -0
  4. data/doc/creating_commands.md +1 -1
  5. data/doc/installation.md +3 -2
  6. data/doc/release_notes.md +17 -0
  7. data/doc/writing_a_plugin.md +1 -1
  8. data/lib/hammer_cli/abstract.rb +46 -9
  9. data/lib/hammer_cli/apipie/command.rb +10 -1
  10. data/lib/hammer_cli/apipie/option_builder.rb +29 -11
  11. data/lib/hammer_cli/apipie/option_definition.rb +18 -0
  12. data/lib/hammer_cli/apipie/resource.rb +4 -22
  13. data/lib/hammer_cli/exception_handler.rb +18 -6
  14. data/lib/hammer_cli/exceptions.rb +1 -0
  15. data/lib/hammer_cli/i18n.rb +4 -0
  16. data/lib/hammer_cli/main.rb +2 -0
  17. data/lib/hammer_cli/modules.rb +30 -2
  18. data/lib/hammer_cli/options/matcher.rb +48 -0
  19. data/lib/hammer_cli/output/adapter.rb +3 -1
  20. data/lib/hammer_cli/output/adapter/csv.rb +5 -2
  21. data/lib/hammer_cli/output/adapter/json.rb +17 -0
  22. data/lib/hammer_cli/output/adapter/table.rb +11 -17
  23. data/lib/hammer_cli/output/adapter/tree_structure.rb +74 -0
  24. data/lib/hammer_cli/output/adapter/wrapper_formatter.rb +20 -0
  25. data/lib/hammer_cli/output/adapter/yaml.rb +16 -0
  26. data/lib/hammer_cli/shell.rb +3 -8
  27. data/lib/hammer_cli/utils.rb +10 -0
  28. data/lib/hammer_cli/version.rb +1 -1
  29. data/locale/de/LC_MESSAGES/hammer-cli.mo +0 -0
  30. data/locale/de/hammer-cli.po +296 -0
  31. data/locale/en/LC_MESSAGES/hammer-cli.mo +0 -0
  32. data/locale/en/hammer-cli.po +1 -1
  33. data/locale/en_GB/LC_MESSAGES/hammer-cli.mo +0 -0
  34. data/locale/en_GB/hammer-cli.po +133 -133
  35. data/locale/es/LC_MESSAGES/hammer-cli.mo +0 -0
  36. data/locale/es/hammer-cli.po +148 -147
  37. data/locale/fr/LC_MESSAGES/hammer-cli.mo +0 -0
  38. data/locale/fr/hammer-cli.po +142 -141
  39. data/locale/hammer-cli.pot +39 -32
  40. data/locale/it/LC_MESSAGES/hammer-cli.mo +0 -0
  41. data/locale/it/hammer-cli.po +293 -0
  42. data/locale/ja/LC_MESSAGES/hammer-cli.mo +0 -0
  43. data/locale/ja/hammer-cli.po +291 -0
  44. data/locale/ko/LC_MESSAGES/hammer-cli.mo +0 -0
  45. data/locale/ko/hammer-cli.po +292 -0
  46. data/locale/pt_BR/LC_MESSAGES/hammer-cli.mo +0 -0
  47. data/locale/pt_BR/hammer-cli.po +294 -0
  48. data/locale/ru/LC_MESSAGES/hammer-cli.mo +0 -0
  49. data/locale/ru/hammer-cli.po +293 -0
  50. data/locale/zh_CN/LC_MESSAGES/hammer-cli.mo +0 -0
  51. data/locale/zh_CN/hammer-cli.po +292 -0
  52. data/locale/zh_TW/LC_MESSAGES/hammer-cli.mo +0 -0
  53. data/locale/zh_TW/hammer-cli.po +292 -0
  54. data/test/unit/apipie/command_test.rb +22 -0
  55. data/test/unit/apipie/option_builder_test.rb +21 -7
  56. data/test/unit/apipie/option_definition_test.rb +26 -0
  57. data/test/unit/fixtures/apipie/documented.json +26 -0
  58. data/test/unit/modules_test.rb +13 -2
  59. data/test/unit/options/matcher_test.rb +61 -0
  60. data/test/unit/output/adapter/json_test.rb +214 -0
  61. data/test/unit/output/adapter/table_test.rb +66 -0
  62. data/test/unit/output/adapter/yaml_test.rb +213 -0
  63. data/test/unit/utils_test.rb +17 -0
  64. metadata +249 -205
@@ -0,0 +1,292 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the hammer-cli package.
4
+ #
5
+ # Translators:
6
+ # Automatically generated, 2014
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: hammer-cli 0.1.4\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2014-09-15 12:50+0100\n"
12
+ "PO-Revision-Date: 2014-09-16 13:21+0000\n"
13
+ "Last-Translator: Dominic Cleal <dcleal@redhat.com>\n"
14
+ "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/foreman/language/zh_TW/)\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Language: zh_TW\n"
19
+ "Plural-Forms: nplurals=1; plural=0;\n"
20
+
21
+ #: lib/hammer_cli/subcommand.rb:56
22
+ msgid ""
23
+ "can't replace subcommand %<name>s (%<existing_class>s) with %<name>s "
24
+ "(%<new_class>s)"
25
+ msgstr ""
26
+
27
+ #: lib/hammer_cli/logger.rb:28
28
+ msgid "No permissions to create log dir %s"
29
+ msgstr "沒有建立日誌目錄 %s 的權限"
30
+
31
+ #: lib/hammer_cli/logger.rb:43
32
+ msgid "File %s not writeable, won't log anything to the file!"
33
+ msgstr "%s 檔案不允許寫入,將不會記錄任何資料至此檔案中!"
34
+
35
+ #: lib/hammer_cli/main.rb:7
36
+ msgid "be verbose"
37
+ msgstr "詳細提供資料"
38
+
39
+ #: lib/hammer_cli/main.rb:8
40
+ msgid "show debugging output "
41
+ msgstr "顯示除錯輸出"
42
+
43
+ #: lib/hammer_cli/main.rb:9
44
+ msgid "path to custom config file"
45
+ msgstr "自訂配置檔案的路徑"
46
+
47
+ #: lib/hammer_cli/main.rb:11
48
+ msgid "username to access the remote system"
49
+ msgstr "用來存取遠端系統的使用者名稱"
50
+
51
+ #: lib/hammer_cli/main.rb:13
52
+ msgid "password to access the remote system"
53
+ msgstr "用來存取遠端系統的密碼"
54
+
55
+ #: lib/hammer_cli/main.rb:15
56
+ msgid "remote system address"
57
+ msgstr "遠端系統位址"
58
+
59
+ #: lib/hammer_cli/main.rb:18
60
+ msgid "show version"
61
+ msgstr "顯示版本"
62
+
63
+ #: lib/hammer_cli/main.rb:27
64
+ msgid "Show ids of associated resources"
65
+ msgstr "顯示相聯資源的 id"
66
+
67
+ #: lib/hammer_cli/main.rb:29
68
+ msgid "Explicitly turn interactive mode on/off"
69
+ msgstr "明確開啓或關閉互動式模式"
70
+
71
+ #: lib/hammer_cli/main.rb:33
72
+ msgid "Output as CSV (same as --output=csv)"
73
+ msgstr "輸出為 CSV(與 --output=csv 相同)"
74
+
75
+ #: lib/hammer_cli/main.rb:34
76
+ msgid "Set output format. One of [%s]"
77
+ msgstr "設定輸出模式。[%s] 之一"
78
+
79
+ #: lib/hammer_cli/main.rb:37
80
+ msgid "Character to separate the values"
81
+ msgstr "用來隔開值的字元"
82
+
83
+ #: lib/hammer_cli/main.rb:41
84
+ msgid "Get list of possible endings"
85
+ msgstr "取得一列可能的結尾"
86
+
87
+ #: lib/hammer_cli/validator.rb:41
88
+ msgid "Unknown option name '%s'"
89
+ msgstr "不明選項名稱「%s」"
90
+
91
+ #: lib/hammer_cli/validator.rb:62
92
+ msgid "You can't set all options %s at one time"
93
+ msgstr "您不可一次將所有選項設為 %s"
94
+
95
+ #: lib/hammer_cli/validator.rb:63
96
+ msgid "Options %s are required"
97
+ msgstr "%s 選項乃必要的"
98
+
99
+ #: lib/hammer_cli/validator.rb:79
100
+ msgid "You can't set any of options %s"
101
+ msgstr "您不可將任何選項設為 %s"
102
+
103
+ #: lib/hammer_cli/validator.rb:80
104
+ msgid "At least one of options %s is required"
105
+ msgstr "需要至少一項 %s 選項"
106
+
107
+ #: lib/hammer_cli/shell.rb:10
108
+ msgid "Print help for commands"
109
+ msgstr "印出指令的說明"
110
+
111
+ #: lib/hammer_cli/shell.rb:22
112
+ msgid "Exit interactive shell"
113
+ msgstr "退出互動式 shell"
114
+
115
+ #: lib/hammer_cli/shell.rb:120
116
+ msgid "Welcome to the hammer interactive shell"
117
+ msgstr "歡迎使用 hammer 互動式 shell"
118
+
119
+ #: lib/hammer_cli/shell.rb:121
120
+ msgid "Type 'help' for usage information"
121
+ msgstr "請輸入「help」以查看使用說明"
122
+
123
+ #: lib/hammer_cli/shell.rb:122
124
+ msgid ""
125
+ "Command completion is disabled on ruby < 1.9 due to compatibility problems."
126
+ msgstr "基於相容性上的問題,ruby < 1.9 上已停用了指令完成。"
127
+
128
+ #: lib/hammer_cli/shell.rb:138
129
+ msgid "Interactive shell"
130
+ msgstr "互動式 shell"
131
+
132
+ #: lib/hammer_cli/clamp.rb:5
133
+ msgid "too many arguments"
134
+ msgstr "引數過多"
135
+
136
+ #: lib/hammer_cli/clamp.rb:6
137
+ msgid "option '%<option>s' is required"
138
+ msgstr "需要使用 '%<option>s' 選項"
139
+
140
+ #: lib/hammer_cli/clamp.rb:7
141
+ msgid "option '%<option>s' (or env %<env>s) is required"
142
+ msgstr "需要使用 '%<option>s'(或是 %<env>s 環境)選項"
143
+
144
+ #: lib/hammer_cli/clamp.rb:8
145
+ msgid "option '%<switch>s': %<message>s"
146
+ msgstr "選項 '%<switch>s':%<message>s"
147
+
148
+ #: lib/hammer_cli/clamp.rb:9
149
+ msgid "parameter '%<param>s': %<message>s"
150
+ msgstr "參數 '%<param>s':%<message>s"
151
+
152
+ #: lib/hammer_cli/clamp.rb:10
153
+ msgid "%<env>s: %<message>s"
154
+ msgstr "%<env>s:%<message>s"
155
+
156
+ #: lib/hammer_cli/clamp.rb:11
157
+ msgid "Unrecognised option '%<switch>s'"
158
+ msgstr "無法辨識的選項 '%<switch>s'"
159
+
160
+ #: lib/hammer_cli/clamp.rb:12
161
+ msgid "No such sub-command '%<name>s'"
162
+ msgstr "此類型的次指令不存在:'%<name>s'"
163
+
164
+ #: lib/hammer_cli/clamp.rb:13
165
+ msgid "no value provided"
166
+ msgstr "未提供值"
167
+
168
+ #: lib/hammer_cli/options/option_definition.rb:68
169
+ msgid "Can be specified multiple times. "
170
+ msgstr "可指定多次。"
171
+
172
+ #: lib/hammer_cli/options/option_definition.rb:69
173
+ msgid "Default: "
174
+ msgstr "預設值:"
175
+
176
+ #: lib/hammer_cli/options/option_definition.rb:69
177
+ msgid ", or "
178
+ msgstr ",或是"
179
+
180
+ #: lib/hammer_cli/options/normalizers.rb:26
181
+ msgid "Comma-separated list of key=value."
182
+ msgstr "逗號區隔開的一列 key=value。"
183
+
184
+ #: lib/hammer_cli/options/normalizers.rb:39
185
+ msgid "value must be defined as a comma-separated list of key=value"
186
+ msgstr "值必須以一列逗號區隔開的 key=value 來定義"
187
+
188
+ #: lib/hammer_cli/options/normalizers.rb:57
189
+ msgid "Comma separated list of values."
190
+ msgstr "逗號區隔開的值。"
191
+
192
+ #: lib/hammer_cli/options/normalizers.rb:69
193
+ msgid "One of true/false, yes/no, 1/0."
194
+ msgstr "true/false、yes/no、1/0 之一。"
195
+
196
+ #: lib/hammer_cli/options/normalizers.rb:79
197
+ msgid "value must be one of true/false, yes/no, 1/0"
198
+ msgstr "值必須是 true/false、yes/no、1/0 之一"
199
+
200
+ #: lib/hammer_cli/options/normalizers.rb:118
201
+ msgid "Unable to parse JSON input"
202
+ msgstr "無法叵析 JSON 輸入"
203
+
204
+ #: lib/hammer_cli/options/normalizers.rb:131
205
+ msgid "One of %s"
206
+ msgstr "%s 之一"
207
+
208
+ #: lib/hammer_cli/options/normalizers.rb:138
209
+ msgid "value must be one of '%s'"
210
+ msgstr "值必須是「%s」之一"
211
+
212
+ #: lib/hammer_cli/options/normalizers.rb:157
213
+ msgid "Date and time in YYYY-MM-DD HH:MM:SS or ISO 8601 format"
214
+ msgstr "日期與時間,格式為 YYYY-MM-DD HH:MM:SS 或是 ISO 8601 格式"
215
+
216
+ #: lib/hammer_cli/options/normalizers.rb:164
217
+ msgid "'%s' is not a valid date"
218
+ msgstr "「%s」不是個有效的日期"
219
+
220
+ #: lib/hammer_cli/options/normalizers.rb:175
221
+ msgid "Any combination (comma separated list) of '%s'"
222
+ msgstr "任何(以逗號隔開的)「%s」的組合"
223
+
224
+ #: lib/hammer_cli/options/normalizers.rb:195
225
+ msgid "value must be a combination of '%s'"
226
+ msgstr "值必須是「%s」的組合"
227
+
228
+ #: lib/hammer_cli/settings.rb:28
229
+ msgid ""
230
+ "Warning: location hammer.modules.d is deprecated, move your module "
231
+ "configurations to cli.modules.d"
232
+ msgstr "警告:hammer.modules.d 這個位置已淘汰使用,請將您的模組配置移至 cli.modules.d"
233
+
234
+ #: lib/hammer_cli/exception_handler.rb:60
235
+ msgid "Error: %s"
236
+ msgstr "錯誤:%s"
237
+
238
+ #: lib/hammer_cli/exception_handler.rb:66
239
+ msgid "Error: %{message}"
240
+ msgstr ""
241
+
242
+ #: lib/hammer_cli/exception_handler.rb:67
243
+ msgid "See: '%{path} --help'"
244
+ msgstr ""
245
+
246
+ #: lib/hammer_cli/exception_handler.rb:84
247
+ msgid "Invalid username or password"
248
+ msgstr "無效的使用者名稱或密碼"
249
+
250
+ #: lib/hammer_cli/exception_handler.rb:91
251
+ msgid "Could not load the API description from the server"
252
+ msgstr ""
253
+
254
+ #: lib/hammer_cli/exception_handler.rb:92
255
+ msgid "is the server down?"
256
+ msgstr ""
257
+
258
+ #: lib/hammer_cli/exception_handler.rb:93
259
+ msgid ""
260
+ "was '%s' run on the server when using apipie cache? (typical production "
261
+ "settings)"
262
+ msgstr ""
263
+
264
+ #: lib/hammer_cli/output/formatters.rb:154
265
+ msgid "no"
266
+ msgstr "否"
267
+
268
+ #: lib/hammer_cli/output/formatters.rb:154
269
+ msgid "yes"
270
+ msgstr "是"
271
+
272
+ #: lib/hammer_cli/output/adapter/csv.rb:171
273
+ msgid "Message"
274
+ msgstr "訊息"
275
+
276
+ #: lib/hammer_cli/output/adapter/csv.rb:175
277
+ msgid "Id"
278
+ msgstr "ID"
279
+
280
+ #: lib/hammer_cli/output/adapter/csv.rb:180
281
+ msgid "Name"
282
+ msgstr "名稱"
283
+
284
+ #: lib/hammer_cli/modules.rb:10
285
+ msgid ""
286
+ "Legacy configuration of modules detected. Check section about configuration "
287
+ "in user manual"
288
+ msgstr "偵測到了舊式的模組配置。請查看使用者指南中的配置部分"
289
+
290
+ #: lib/hammer_cli/modules.rb:42
291
+ msgid "Warning: An error occured while loading module %s"
292
+ msgstr "警告:載入 %s 模組時發生了錯誤"
@@ -113,6 +113,28 @@ describe HammerCLI::Apipie::Command do
113
113
  it "should perform a call to api when resource is defined" do
114
114
  cmd_run.must_equal 0
115
115
  end
116
+ end
117
+
118
+ context "reload apipie cache" do
119
+
120
+ before :each do
121
+ HammerCLI::Connection.drop_all
122
+ ApipieBindings::API.any_instance.stubs(:call).returns([])
123
+ end
124
+
125
+ it "clears the cache on init when required from config" do
126
+ HammerCLI::Settings.load({ :reload_cache => true })
127
+ ApipieBindings::API.any_instance.expects(:clean_cache).returns(nil)
128
+ cmd.class.resource :architectures, :index
129
+ HammerCLI::Settings.load({ :reload_cache => false })
130
+ end
131
+
132
+ it "clears the cache on init when required from CLI" do
133
+ HammerCLI::Settings.load({ :_params => { :reload_cache => true }})
134
+ ApipieBindings::API.any_instance.expects(:clean_cache).returns(nil)
135
+ cmd.class.resource :architectures, :index
136
+ HammerCLI::Settings.load({ :_params => { :reload_cache => false }})
137
+ end
116
138
 
117
139
  end
118
140
 
@@ -18,8 +18,9 @@ describe HammerCLI::Apipie::OptionBuilder do
18
18
  HammerCLI::I18n.clear
19
19
  end
20
20
 
21
- let(:action) {api.resource(:documented).action(:index)}
22
- let(:builder) { HammerCLI::Apipie::OptionBuilder.new(action) }
21
+ let(:resource) {api.resource(:documented)}
22
+ let(:action) {resource.action(:index)}
23
+ let(:builder) { HammerCLI::Apipie::OptionBuilder.new(resource, action) }
23
24
  let(:builder_options) { {} }
24
25
  let(:options) { builder.build(builder_options) }
25
26
 
@@ -45,7 +46,7 @@ describe HammerCLI::Apipie::OptionBuilder do
45
46
 
46
47
  context "required options" do
47
48
 
48
- let(:action) {api.resource(:documented).action(:create)}
49
+ let(:action) {resource.action(:create)}
49
50
  let(:required_options) { builder.build.reject{|opt| !opt.required?} }
50
51
 
51
52
  it "should set required flag for the required options" do
@@ -60,7 +61,7 @@ describe HammerCLI::Apipie::OptionBuilder do
60
61
 
61
62
 
62
63
  context "with hash params" do
63
- let(:action) {api.resource(:documented).action(:create)}
64
+ let(:action) {resource.action(:create)}
64
65
 
65
66
  it "should create options for all parameters except the hash" do
66
67
  options.map(&:attribute_name).sort.must_equal HammerCLI.option_accessor_name("array_param", "name", "provider")
@@ -72,18 +73,23 @@ describe HammerCLI::Apipie::OptionBuilder do
72
73
  end
73
74
 
74
75
  context "setting correct normalizers" do
75
- let(:action) {api.resource(:documented).action(:create)}
76
+ let(:action) {resource.action(:typed_params)}
76
77
 
77
78
  it "should set array normalizer" do
78
79
  array_option = options.find {|o| o.attribute_name == HammerCLI.option_accessor_name("array_param") }
79
80
  array_option.value_formatter.class.must_equal HammerCLI::Options::Normalizers::List
80
81
  end
81
82
 
83
+ it "should set boolean normalizer" do
84
+ boolean_option = options.find {|o| o.attribute_name == HammerCLI.option_accessor_name("boolean_param") }
85
+ boolean_option.value_formatter.class.must_equal HammerCLI::Options::Normalizers::Bool
86
+ end
87
+
82
88
  end
83
89
 
84
90
 
85
91
  context "filtering options" do
86
- let(:action) {api.resource(:documented).action(:create)}
92
+ let(:action) {resource.action(:create)}
87
93
 
88
94
  it "should skip filtered options" do
89
95
  builder_options[:without] = ["provider", "name"]
@@ -108,7 +114,7 @@ describe HammerCLI::Apipie::OptionBuilder do
108
114
  end
109
115
 
110
116
  context "aliasing resources" do
111
- let(:action) {api.resource(:documented).action(:action_with_ids)}
117
+ let(:action) {resource.action(:action_with_ids)}
112
118
  let(:builder_options) { {:resource_mapping => {:organization => 'company', 'compute_resource' => :compute_provider}} }
113
119
 
114
120
  it "renames options" do
@@ -128,5 +134,13 @@ describe HammerCLI::Apipie::OptionBuilder do
128
134
 
129
135
  end
130
136
 
137
+ context "setting referenced resources" do
138
+ let(:action) {resource.action(:action_with_ids)}
139
+
140
+ it "sets referenced resources" do
141
+ options.map(&:referenced_resource).map(&:to_s).sort.must_equal ["", "compute_resource", "organization", "organization"]
142
+ end
143
+ end
144
+
131
145
  end
132
146
 
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ # require 'hammer_cli/options/option_definition'
4
+
5
+ describe HammerCLI::Apipie::OptionDefinition do
6
+
7
+ let(:opt) { HammerCLI::Apipie::OptionDefinition.new("--opt", "OPT", "", :referenced_resource => @referenced_resource) }
8
+
9
+ describe "referenced resource" do
10
+ it "should be nil by default" do
11
+ opt.referenced_resource.must_equal nil
12
+ end
13
+
14
+ it "should set referenced resource" do
15
+ @referenced_resource = "organization"
16
+ opt.referenced_resource.must_equal "organization"
17
+ end
18
+
19
+ it "should convert referenced resource name to string" do
20
+ @referenced_resource = :organization
21
+ opt.referenced_resource.must_equal "organization"
22
+ end
23
+
24
+ end
25
+ end
26
+
@@ -115,6 +115,32 @@
115
115
  }
116
116
  ],
117
117
  "full_description": ""
118
+ },
119
+ {
120
+ "name": "typed_params",
121
+ "examples": [],
122
+ "errors": [],
123
+ "params": [
124
+ {
125
+ "name": "array_param",
126
+ "allow_null": false,
127
+ "full_name": "documented[array_param]",
128
+ "validator": "Must be Array",
129
+ "expected_type": "array",
130
+ "description": "",
131
+ "required": true
132
+ },
133
+ {
134
+ "name": "boolean_param",
135
+ "allow_null": false,
136
+ "full_name": "documented[boolean_param]",
137
+ "validator": "Must be Boolean",
138
+ "expected_type": "boolean",
139
+ "description": "",
140
+ "required": false
141
+ }
142
+ ],
143
+ "full_description": ""
118
144
  }
119
145
  ]
120
146
  }