hammer_cli 0.0.18 → 0.1.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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -314
  3. data/bin/hammer +45 -6
  4. data/config/cli.modules.d/module_config_template.yml +4 -0
  5. data/config/cli_config.template.yml +9 -11
  6. data/doc/developer_docs.md +1 -0
  7. data/doc/i18n.md +85 -0
  8. data/doc/installation.md +321 -0
  9. data/lib/hammer_cli.rb +3 -0
  10. data/lib/hammer_cli/abstract.rb +15 -24
  11. data/lib/hammer_cli/apipie/command.rb +13 -7
  12. data/lib/hammer_cli/apipie/options.rb +14 -16
  13. data/lib/hammer_cli/apipie/read_command.rb +6 -1
  14. data/lib/hammer_cli/apipie/resource.rb +48 -58
  15. data/lib/hammer_cli/apipie/write_command.rb +5 -1
  16. data/lib/hammer_cli/completer.rb +77 -21
  17. data/lib/hammer_cli/connection.rb +44 -0
  18. data/lib/hammer_cli/exception_handler.rb +15 -4
  19. data/lib/hammer_cli/exceptions.rb +6 -0
  20. data/lib/hammer_cli/i18n.rb +95 -0
  21. data/lib/hammer_cli/logger.rb +3 -3
  22. data/lib/hammer_cli/main.rb +12 -11
  23. data/lib/hammer_cli/modules.rb +19 -6
  24. data/lib/hammer_cli/options/normalizers.rb +42 -7
  25. data/lib/hammer_cli/options/option_definition.rb +2 -2
  26. data/lib/hammer_cli/output.rb +1 -0
  27. data/lib/hammer_cli/output/adapter/abstract.rb +20 -0
  28. data/lib/hammer_cli/output/adapter/base.rb +49 -78
  29. data/lib/hammer_cli/output/adapter/csv.rb +5 -5
  30. data/lib/hammer_cli/output/adapter/table.rb +41 -10
  31. data/lib/hammer_cli/output/dsl.rb +1 -1
  32. data/lib/hammer_cli/output/field_filter.rb +21 -0
  33. data/lib/hammer_cli/output/fields.rb +44 -78
  34. data/lib/hammer_cli/output/formatters.rb +38 -0
  35. data/lib/hammer_cli/settings.rb +28 -6
  36. data/lib/hammer_cli/shell.rb +58 -57
  37. data/lib/hammer_cli/utils.rb +14 -0
  38. data/lib/hammer_cli/validator.rb +5 -5
  39. data/lib/hammer_cli/version.rb +1 -1
  40. data/locale/Makefile +64 -0
  41. data/locale/hammer-cli.pot +203 -0
  42. data/locale/zanata.xml +29 -0
  43. data/test/unit/apipie/command_test.rb +42 -25
  44. data/test/unit/apipie/read_command_test.rb +10 -7
  45. data/test/unit/apipie/write_command_test.rb +9 -8
  46. data/test/unit/completer_test.rb +206 -21
  47. data/test/unit/connection_test.rb +68 -0
  48. data/test/unit/fixtures/apipie/architectures.json +153 -0
  49. data/test/unit/fixtures/apipie/documented.json +79 -0
  50. data/test/unit/fixtures/json_input/invalid.json +12 -0
  51. data/test/unit/fixtures/json_input/valid.json +12 -0
  52. data/test/unit/history_test.rb +71 -0
  53. data/test/unit/main_test.rb +9 -0
  54. data/test/unit/modules_test.rb +22 -6
  55. data/test/unit/options/field_filter_test.rb +27 -0
  56. data/test/unit/options/normalizers_test.rb +53 -0
  57. data/test/unit/output/adapter/base_test.rb +162 -10
  58. data/test/unit/output/adapter/csv_test.rb +16 -3
  59. data/test/unit/output/adapter/table_test.rb +97 -13
  60. data/test/unit/output/dsl_test.rb +74 -6
  61. data/test/unit/output/fields_test.rb +93 -62
  62. data/test/unit/output/formatters_test.rb +47 -0
  63. data/test/unit/settings_test.rb +35 -4
  64. data/test/unit/utils_test.rb +45 -0
  65. metadata +85 -4
  66. data/test/unit/apipie/fake_api.rb +0 -101
@@ -109,10 +109,48 @@ module HammerCLI::Output
109
109
  end
110
110
  end
111
111
 
112
+ class KeyValueFormatter < FieldFormatter
113
+
114
+ def tags
115
+ [:screen, :flat]
116
+ end
117
+
118
+ def format(params)
119
+ if params.is_a? Hash
120
+ name = params[:name] || params["name"]
121
+ value = params[:value] || params["value"]
122
+ "#{name} => #{value}"
123
+ else
124
+ ""
125
+ end
126
+ end
127
+ end
128
+
129
+ class LongTextFormatter < FieldFormatter
130
+
131
+ INDENT = " "
132
+
133
+ def initialize(options = {})
134
+ @indent = options[:indent].nil? ? true : options[:indent]
135
+ end
136
+
137
+ def tags
138
+ [:screen]
139
+ end
140
+
141
+ def format(text)
142
+ text = text.to_s.indent_with(INDENT) if @indent
143
+ "\n#{text}"
144
+ end
145
+ end
146
+
112
147
  HammerCLI::Output::Output.register_formatter(DateFormatter.new, :Date)
113
148
  HammerCLI::Output::Output.register_formatter(ListFormatter.new, :List)
149
+ HammerCLI::Output::Output.register_formatter(KeyValueFormatter.new, :KeyValue)
150
+ HammerCLI::Output::Output.register_formatter(LongTextFormatter.new, :LongText)
114
151
 
115
152
  end
116
153
  end
117
154
 
118
155
 
156
+
@@ -12,19 +12,37 @@ module HammerCLI
12
12
  end
13
13
  end
14
14
 
15
- def self.load_from_file(files)
15
+ def self.load_from_paths(files)
16
16
  files.reverse.each do |path|
17
17
  full_path = File.expand_path path
18
- if File.exists? full_path
19
- config = YAML::load(File.open(full_path))
20
- if config
21
- load(config)
22
- path_history << full_path
18
+ if File.file? full_path
19
+ load_from_file(full_path)
20
+ elsif File.directory? full_path
21
+ # check for cli_config.yml
22
+ load_from_file(File.join(full_path, 'cli_config.yml'))
23
+ # load config for modules
24
+ Dir.glob(File.join(full_path, 'cli.modules.d/*.yml')).sort.each do |f|
25
+ load_from_file(f)
26
+ end
27
+ Dir.glob(File.join(full_path, 'hammer.modules.d/*.yml')).sort.each do |f|
28
+ warn _("Warning: location hammer.modules.d is deprecated, move your module configurations to cli.modules.d")
29
+ warn " #{f} -> #{f.gsub('hammer.modules.d', 'cli.modules.d')}"
30
+ load_from_file(f)
23
31
  end
24
32
  end
25
33
  end
26
34
  end
27
35
 
36
+ def self.load_from_file(file_path)
37
+ if File.file? file_path
38
+ config = YAML::load(File.open(file_path))
39
+ if config
40
+ load(config)
41
+ path_history << file_path
42
+ end
43
+ end
44
+ end
45
+
28
46
  def self.load(settings_hash)
29
47
  deep_merge!(settings, settings_hash)
30
48
  end
@@ -34,6 +52,10 @@ module HammerCLI
34
52
  path_history.clear
35
53
  end
36
54
 
55
+ def self.dump
56
+ settings
57
+ end
58
+
37
59
  def self.path_history
38
60
  @path_history ||= []
39
61
  @path_history
@@ -7,7 +7,7 @@ module HammerCLI
7
7
 
8
8
  class HelpCommand < AbstractCommand
9
9
  command_name "help"
10
- desc "Print help for commands"
10
+ desc _("Print help for commands")
11
11
 
12
12
  parameter "[COMMAND] ...", "command"
13
13
 
@@ -19,89 +19,89 @@ module HammerCLI
19
19
 
20
20
  class ExitCommand < AbstractCommand
21
21
  command_name "exit"
22
- desc "Exit interactive shell"
22
+ desc _("Exit interactive shell")
23
23
 
24
24
  def execute
25
25
  exit HammerCLI::EX_OK
26
26
  end
27
27
  end
28
28
 
29
- class AuthCommand < AbstractCommand
30
- command_name "auth"
31
- desc "Login and logout actions"
29
+ def self.load_commands(main_cls)
30
+ cmds = main_cls.recognised_subcommands.select do |sub_cmd|
31
+ !(sub_cmd.subcommand_class <= HammerCLI::ShellCommand)
32
+ end
33
+ self.recognised_subcommands.push(*cmds)
34
+ end
35
+
36
+ autoload_subcommands
37
+ end
32
38
 
33
- class LoginCommand < AbstractCommand
34
- command_name "login"
35
- desc "Set credentials"
36
39
 
37
- def execute
38
- context[:username] = ask_username
39
- context[:password] = ask_password
40
- HammerCLI::EX_OK
41
- end
42
- end
40
+ class ShellHistory
43
41
 
44
- class LogoutCommand < AbstractCommand
45
- command_name "logout"
46
- desc "Wipe your credentials"
47
-
48
- def execute
49
- context[:username] = nil
50
- context[:password] = nil
51
-
52
- if username(false)
53
- print_message("Credentials deleted, using defaults now.")
54
- print_message("You are logged in as [ %s ]." % username(false))
55
- else
56
- print_message("Credentials deleted.")
57
- end
58
- HammerCLI::EX_OK
59
- end
60
- end
42
+ def initialize(history_file_path)
43
+ @file_path = history_file_path
44
+ load
45
+ end
61
46
 
62
- class InfoCommand < AbstractCommand
63
- command_name "status"
64
- desc "Information about current user"
65
-
66
- def execute
67
- if username(false)
68
- print_message("You are logged in as [ %s ]." % username(false))
69
- else
70
- print_message("You are currently not logged in.\nUse 'auth login' to set credentials.")
71
- end
72
- HammerCLI::EX_OK
73
- end
47
+ def push(line)
48
+ line.strip!
49
+ return if line.empty? or ingonred_commands.include?(line)
50
+
51
+ Readline::HISTORY.push(line)
52
+ File.open(file_path, "a") do |f|
53
+ f.puts(line)
74
54
  end
55
+ end
75
56
 
76
- autoload_subcommands
57
+ def ingonred_commands
58
+ ["exit"]
77
59
  end
78
60
 
61
+ protected
79
62
 
80
- def self.load_commands(main_cls)
81
- cmds = main_cls.recognised_subcommands.select do |sub_cmd|
82
- !(sub_cmd.subcommand_class <= HammerCLI::ShellCommand)
63
+ def file_path
64
+ File.expand_path(@file_path)
65
+ end
66
+
67
+ def load
68
+ if File.exist?(file_path)
69
+ File.readlines(file_path).each do |line|
70
+ Readline::HISTORY.push(line.strip)
71
+ end
83
72
  end
84
- self.recognised_subcommands.push(*cmds)
85
73
  end
86
74
 
87
- autoload_subcommands
88
75
  end
89
76
 
77
+
90
78
  class ShellCommand < AbstractCommand
91
79
 
80
+ DEFAULT_HISTORY_FILE = "~/.hammer_history"
81
+
92
82
  def execute
93
83
  ShellMainCommand.load_commands(HammerCLI::MainCommand)
94
84
 
95
- Readline.completion_append_character = ''
96
- Readline.completer_word_break_characters = ' '
97
- Readline.completion_proc = complete_proc
85
+ if RUBY_VERSION >= "1.9"
86
+ Readline.completion_append_character = ''
87
+ Readline.completer_word_break_characters = ' ='
88
+ Readline.completion_proc = complete_proc
89
+ else
90
+ Readline.completion_proc = lambda {}
91
+ end
98
92
 
99
93
  stty_save = `stty -g`.chomp
100
94
 
95
+ history = ShellHistory.new(Settings.get(:ui, :history_file) || DEFAULT_HISTORY_FILE)
96
+
101
97
  begin
102
98
  print_welcome_message
103
- while line = Readline.readline(prompt, true)
104
- ShellMainCommand.run('', line.split, context) unless line.start_with? 'shell' or line.strip.empty?
99
+ while line = Readline.readline(prompt)
100
+
101
+ history.push(line)
102
+
103
+ line = HammerCLI::CompleterLine.new(line)
104
+ ShellMainCommand.run('', line, context) unless line.empty?
105
105
  end
106
106
  rescue Interrupt => e
107
107
  puts
@@ -117,8 +117,9 @@ module HammerCLI
117
117
  end
118
118
 
119
119
  def print_welcome_message
120
- print_message("Welcome to the hammer interactive shell")
121
- print_message("Type 'help' for usage information")
120
+ print_message(_("Welcome to the hammer interactive shell"))
121
+ print_message(_("Type 'help' for usage information"))
122
+ print_message(_("Command completion is disabled on ruby < 1.9 due to compatibility problems.")) if RUBY_VERSION < "1.9"
122
123
  end
123
124
 
124
125
  def common_prefix(results)
@@ -134,5 +135,5 @@ module HammerCLI
134
135
 
135
136
  end
136
137
 
137
- HammerCLI::MainCommand.subcommand "shell", "Interactive shell", HammerCLI::ShellCommand
138
+ HammerCLI::MainCommand.subcommand "shell", _("Interactive shell"), HammerCLI::ShellCommand
138
139
  end
@@ -20,4 +20,18 @@ class String
20
20
  split('_').map{|e| e.capitalize}.join
21
21
  end
22
22
 
23
+ def indent_with(indent_str)
24
+ gsub(/^/, indent_str)
25
+ end
26
+
27
+ end
28
+
29
+ module HammerCLI
30
+
31
+ def self.interactive?
32
+ return false unless STDOUT.tty?
33
+ return HammerCLI::Settings.get(:_params, :interactive) unless HammerCLI::Settings.get(:_params, :interactive).nil?
34
+ HammerCLI::Settings.get(:ui, :interactive) != false
35
+ end
36
+
23
37
  end
@@ -38,7 +38,7 @@ module HammerCLI
38
38
 
39
39
  def get_option(name)
40
40
  name = name.to_s
41
- raise "Unknown option name '%s'" % name unless @options.has_key? name
41
+ raise _("Unknown option name '%s'") % name unless @options.has_key? name
42
42
  @options[name]
43
43
  end
44
44
 
@@ -59,8 +59,8 @@ module HammerCLI
59
59
 
60
60
  def initialize(options, to_check)
61
61
  super(options, to_check)
62
- @rejected_msg = "You can't set all options %s at one time"
63
- @required_msg = "Options %s are required"
62
+ @rejected_msg = _("You can't set all options %s at one time")
63
+ @required_msg = _("Options %s are required")
64
64
  end
65
65
 
66
66
  def exist?
@@ -76,8 +76,8 @@ module HammerCLI
76
76
 
77
77
  def initialize(options, to_check)
78
78
  super(options, to_check)
79
- @rejected_msg = "You can't set any of options %s"
80
- @required_msg = "At least one of options %s is required"
79
+ @rejected_msg = _("You can't set any of options %s")
80
+ @required_msg = _("At least one of options %s is required")
81
81
  end
82
82
 
83
83
  def exist?
@@ -1,5 +1,5 @@
1
1
  module HammerCLI
2
2
  def self.version
3
- @version ||= Gem::Version.new '0.0.18'
3
+ @version ||= Gem::Version.new '0.1.0'
4
4
  end
5
5
  end
@@ -0,0 +1,64 @@
1
+ #
2
+ # Makefile for PO merging and MO generation. More info in the README.
3
+ #
4
+ # make all-mo (default) - generate MO files
5
+ # make check - check translations using translate-tool
6
+ # make tx-update - download and merge translations from Transifex
7
+ # make clean - clean everything
8
+ #
9
+ DOMAIN = hammer-cli
10
+ POTFILE = $(DOMAIN).pot
11
+ MOFILE = $(DOMAIN).mo
12
+ POFILES = $(shell find . -name '*.po')
13
+ MOFILES = $(patsubst %.po,%.mo,$(POFILES))
14
+ POXFILES = $(patsubst %.po,%.pox,$(POFILES))
15
+
16
+ %.mo: %.po
17
+ mkdir -p $(shell dirname $@)/LC_MESSAGES
18
+ msgfmt -o $(shell dirname $@)/LC_MESSAGES/$(MOFILE) $<
19
+
20
+ # Generate MO files from PO files
21
+ all-mo: $(MOFILES)
22
+
23
+ # Check for malformed strings
24
+ %.pox: %.po
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
+ check: $(POXFILES)
32
+ msgfmt -c ${POTFILE}
33
+
34
+ # Merge PO files
35
+ update-po:
36
+ for f in $(shell find ./ -name "*.po") ; do \
37
+ msgmerge -N --backup=none -U $$f ${POTFILE} ; \
38
+ done
39
+
40
+ # Unify duplicate translations
41
+ uniq-po:
42
+ for f in $(shell find ./ -name "*.po") ; do \
43
+ msguniq $$f -o $$f ; \
44
+ done
45
+
46
+ tx-pull:
47
+ tx pull -f
48
+ -git commit -a -m "i18n - extracting new, pulling from tx"
49
+
50
+ extract-strings:
51
+ bundle exec rake locale:find DOMAIN=$(DOMAIN) SKIP_MODEL=1
52
+
53
+ tx-update: tx-pull extract-strings
54
+ # merging po files is unnecessary when using transifex.com (amend that)
55
+ git checkout -- ../locale/*/*po
56
+ git commit -a --amend -m "i18n - extracting new, pulling from tx"
57
+ -echo Changes commited!
58
+
59
+ # Remove all MO files
60
+ clean:
61
+ -rm -f messages.mo
62
+ find . \( -name "*.mo" -o -name "*.pox" \) -exec rm -f '{}' ';'
63
+ find . -path *LC_MESSAGES | xargs rm -rf
64
+
@@ -0,0 +1,203 @@
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
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: hammer-cli 0.0.18\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2014-03-05 20:36+0000\n"
12
+ "PO-Revision-Date: 2014-03-04 16:38+0000\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Language: \n"
19
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
20
+
21
+ #: lib/hammer_cli/modules.rb:31
22
+ msgid "Warning: An error occured while loading module %s"
23
+ msgstr ""
24
+
25
+ #: lib/hammer_cli/output/adapter/csv.rb:47
26
+ msgid "Message"
27
+ msgstr ""
28
+
29
+ #: lib/hammer_cli/output/adapter/csv.rb:51
30
+ msgid "Id"
31
+ msgstr ""
32
+
33
+ #: lib/hammer_cli/output/adapter/csv.rb:56
34
+ msgid "Name"
35
+ msgstr ""
36
+
37
+ #: lib/hammer_cli/shell.rb:10
38
+ msgid "Print help for commands"
39
+ msgstr ""
40
+
41
+ #: lib/hammer_cli/shell.rb:22
42
+ msgid "Exit interactive shell"
43
+ msgstr ""
44
+
45
+ #: lib/hammer_cli/shell.rb:116
46
+ msgid "Welcome to the hammer interactive shell"
47
+ msgstr ""
48
+
49
+ #: lib/hammer_cli/shell.rb:117
50
+ msgid "Type 'help' for usage information"
51
+ msgstr ""
52
+
53
+ #: lib/hammer_cli/shell.rb:133
54
+ msgid "Interactive shell"
55
+ msgstr ""
56
+
57
+ #: lib/hammer_cli/options/normalizers.rb:26
58
+ msgid "Comma-separated list of key=value."
59
+ msgstr ""
60
+
61
+ #: lib/hammer_cli/options/normalizers.rb:35
62
+ msgid "value must be defined as a comma-separated list of key=value"
63
+ msgstr ""
64
+
65
+ #: lib/hammer_cli/options/normalizers.rb:46
66
+ msgid "Comma separated list of values."
67
+ msgstr ""
68
+
69
+ #: lib/hammer_cli/options/normalizers.rb:58
70
+ msgid "One of true/false, yes/no, 1/0."
71
+ msgstr ""
72
+
73
+ #: lib/hammer_cli/options/normalizers.rb:68
74
+ msgid "value must be one of true/false, yes/no, 1/0"
75
+ msgstr ""
76
+
77
+ #: lib/hammer_cli/options/normalizers.rb:107
78
+ msgid "Unable to parse JSON input"
79
+ msgstr ""
80
+
81
+ #: lib/hammer_cli/options/normalizers.rb:120
82
+ msgid "One of %s"
83
+ msgstr ""
84
+
85
+ #: lib/hammer_cli/options/normalizers.rb:127
86
+ msgid "value must be one of '%s'"
87
+ msgstr ""
88
+
89
+ #: lib/hammer_cli/options/normalizers.rb:146
90
+ msgid "Date and time in YYYY-MM-DD HH:MM:SS or ISO 8601 format"
91
+ msgstr ""
92
+
93
+ #: lib/hammer_cli/options/normalizers.rb:153
94
+ msgid "'%s' is not a valid date"
95
+ msgstr ""
96
+
97
+ #: lib/hammer_cli/options/option_definition.rb:62
98
+ msgid "Can be specified multiple times. "
99
+ msgstr ""
100
+
101
+ #: lib/hammer_cli/options/option_definition.rb:63
102
+ msgid "Default: "
103
+ msgstr ""
104
+
105
+ #: lib/hammer_cli/options/option_definition.rb:63
106
+ msgid ", or "
107
+ msgstr ""
108
+
109
+ #: lib/hammer_cli/apipie/command.rb:68
110
+ msgid "resource id"
111
+ msgstr ""
112
+
113
+ #: lib/hammer_cli/apipie/command.rb:69
114
+ msgid "resource name"
115
+ msgstr ""
116
+
117
+ #: lib/hammer_cli/apipie/command.rb:70
118
+ msgid "resource label"
119
+ msgstr ""
120
+
121
+ #: lib/hammer_cli/apipie/command.rb:94
122
+ msgid "%{resource} with %{option} '%{value}' not found"
123
+ msgstr ""
124
+
125
+ #: lib/hammer_cli/apipie/command.rb:95
126
+ msgid "%{resource} with %{option} '%{value}' found more than once"
127
+ msgstr ""
128
+
129
+ #: lib/hammer_cli/validator.rb:41
130
+ msgid "Unknown option name '%s'"
131
+ msgstr ""
132
+
133
+ #: lib/hammer_cli/validator.rb:62
134
+ msgid "You can't set all options %s at one time"
135
+ msgstr ""
136
+
137
+ #: lib/hammer_cli/validator.rb:63
138
+ msgid "Options %s are required"
139
+ msgstr ""
140
+
141
+ #: lib/hammer_cli/validator.rb:79
142
+ msgid "You can't set any of options %s"
143
+ msgstr ""
144
+
145
+ #: lib/hammer_cli/validator.rb:80
146
+ msgid "At least one of options %s is required"
147
+ msgstr ""
148
+
149
+ #: lib/hammer_cli/main.rb:7
150
+ msgid "be verbose"
151
+ msgstr ""
152
+
153
+ #: lib/hammer_cli/main.rb:8
154
+ msgid "path to custom config file"
155
+ msgstr ""
156
+
157
+ #: lib/hammer_cli/main.rb:10
158
+ msgid "username to access the remote system"
159
+ msgstr ""
160
+
161
+ #: lib/hammer_cli/main.rb:12
162
+ msgid "password to access the remote system"
163
+ msgstr ""
164
+
165
+ #: lib/hammer_cli/main.rb:15
166
+ msgid "show version"
167
+ msgstr ""
168
+
169
+ #: lib/hammer_cli/main.rb:24
170
+ msgid "Show ids of associated resources"
171
+ msgstr ""
172
+
173
+ #: lib/hammer_cli/main.rb:26
174
+ msgid "Explicitly turn interactive mode on/off"
175
+ msgstr ""
176
+
177
+ #: lib/hammer_cli/main.rb:30
178
+ msgid "Output as CSV (same as --output=csv)"
179
+ msgstr ""
180
+
181
+ #: lib/hammer_cli/main.rb:31
182
+ msgid "Set output format. One of [%s]"
183
+ msgstr ""
184
+
185
+ #: lib/hammer_cli/main.rb:34
186
+ msgid "Character to separate the values"
187
+ msgstr ""
188
+
189
+ #: lib/hammer_cli/main.rb:38
190
+ msgid "Get list of possible endings"
191
+ msgstr ""
192
+
193
+ #: lib/hammer_cli/exception_handler.rb:59
194
+ msgid "Error: %s"
195
+ msgstr ""
196
+
197
+ #: lib/hammer_cli/exception_handler.rb:65
198
+ msgid "Error: %s\\n\\nSee: '%s --help'"
199
+ msgstr ""
200
+
201
+ #: lib/hammer_cli/exception_handler.rb:82
202
+ msgid "Invalid username or password"
203
+ msgstr ""