hammer_cli 0.0.18 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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 ""