|
diff --git a/lib/clamp/attribute/instance.rb b/lib/clamp/attribute/instance.rb
|
|
index c3c1595..c595608 100644
|
|
--- a/lib/clamp/attribute/instance.rb
|
|
+++ b/lib/clamp/attribute/instance.rb
|
|
@@ -69,7 +69,7 @@ def default_from_environment
|
|
begin
|
|
take(value)
|
|
rescue ArgumentError => e
|
|
- command.send(:signal_usage_error, "$#{attribute.environment_variable}: #{e.message}")
|
|
+ command.send(:signal_usage_error, Clamp.message(:env_argument_error, :env => attribute.environment_variable, :message => e.message))
|
|
end
|
|
end
|
|
|
|
diff --git a/lib/clamp/command.rb b/lib/clamp/command.rb
|
|
index 7a669bd..0cb4860 100644
|
|
--- a/lib/clamp/command.rb
|
|
+++ b/lib/clamp/command.rb
|
|
@@ -1,3 +1,4 @@
|
|
+require 'clamp/messages'
|
|
require 'clamp/errors'
|
|
require 'clamp/help'
|
|
require 'clamp/option/declaration'
|
|
@@ -91,7 +92,7 @@ def help
|
|
|
|
def handle_remaining_arguments
|
|
unless remaining_arguments.empty?
|
|
- signal_usage_error "too many arguments"
|
|
+ signal_usage_error Clamp.message(:too_many_arguments)
|
|
end
|
|
end
|
|
|
|
diff --git a/lib/clamp/help.rb b/lib/clamp/help.rb
|
|
index e09731a..66a6da5 100644
|
|
--- a/lib/clamp/help.rb
|
|
+++ b/lib/clamp/help.rb
|
|
@@ -1,4 +1,5 @@
|
|
require 'stringio'
|
|
+require 'clamp/messages'
|
|
|
|
module Clamp
|
|
|
|
@@ -41,12 +42,12 @@ def help(invocation_path, builder = Builder.new)
|
|
help.add_usage(invocation_path, usage_descriptions)
|
|
help.add_description(description)
|
|
if has_parameters?
|
|
- help.add_list("Parameters", parameters)
|
|
+ help.add_list(Clamp.message(:parameters_heading), parameters)
|
|
end
|
|
if has_subcommands?
|
|
- help.add_list("Subcommands", recognised_subcommands)
|
|
+ help.add_list(Clamp.message(:subcommands_heading), recognised_subcommands)
|
|
end
|
|
- help.add_list("Options", recognised_options)
|
|
+ help.add_list(Clamp.message(:options_heading), recognised_options)
|
|
help.string
|
|
end
|
|
|
|
@@ -61,7 +62,7 @@ def string
|
|
end
|
|
|
|
def add_usage(invocation_path, usage_descriptions)
|
|
- puts "Usage:"
|
|
+ puts usage_heading
|
|
usage_descriptions.each do |usage|
|
|
puts " #{invocation_path} #{usage}".rstrip
|
|
end
|
|
@@ -87,6 +88,12 @@ def add_list(heading, items)
|
|
end
|
|
end
|
|
|
|
+ protected
|
|
+
|
|
+ def usage_heading
|
|
+ Clamp.message(:usage_heading) + ":"
|
|
+ end
|
|
+
|
|
private
|
|
|
|
def puts(*args)
|
|
diff --git a/lib/clamp/messages.rb b/lib/clamp/messages.rb
|
|
new file mode 100644
|
|
index 0000000..019fa89
|
|
--- /dev/null
|
|
+++ b/lib/clamp/messages.rb
|
|
@@ -0,0 +1,43 @@
|
|
+module Clamp
|
|
+
|
|
+ def self.messages=(messages)
|
|
+ @user_defined_messages = messages
|
|
+ end
|
|
+
|
|
+ def self.message(key, options={})
|
|
+ @user_defined_messages ||= {}
|
|
+ msg = @user_defined_messages[key] || messages[key]
|
|
+ format_string(msg, options)
|
|
+ end
|
|
+
|
|
+ def self.messages
|
|
+ {
|
|
+ :too_many_arguments => "too many arguments",
|
|
+ :option_required => "option '%<option>s' is required",
|
|
+ :option_or_env_required => "option '%<option>s' (or env %<env>s) is required",
|
|
+ :option_argument_error => "option '%<switch>s': %<message>s",
|
|
+ :parameter_argument_error => "parameter '%<param>s': %<message>s",
|
|
+ :env_argument_error => "$%<env>s: %<message>s",
|
|
+ :unrecognised_option => "Unrecognised option '%<switch>s'",
|
|
+ :no_such_subcommand => "No such sub-command '%<name>s'",
|
|
+ :no_value_provided => "no value provided",
|
|
+ :usage_heading => "Usage",
|
|
+ :parameters_heading => "Parameters",
|
|
+ :subcommands_heading => "Subcommands",
|
|
+ :options_heading => "Options"
|
|
+ }
|
|
+ end
|
|
+
|
|
+ private
|
|
+
|
|
+ # string formatting for ruby 1.8
|
|
+ def self.format_string(string, params)
|
|
+ array_params = string.scan(/%[<{]([^>}]*)[>}]/).collect do |name|
|
|
+ name = name[0]
|
|
+ params[name.to_s] || params[name.to_sym]
|
|
+ end
|
|
+
|
|
+ string.gsub(/%[<]([^>]*)[>]/, '%').gsub(/%[{]([^}]*)[}]/, '%s') % array_params
|
|
+ end
|
|
+
|
|
+end
|
|
diff --git a/lib/clamp/option/parsing.rb b/lib/clamp/option/parsing.rb
|
|
index 9f057f1..bb7b41c 100644
|
|
--- a/lib/clamp/option/parsing.rb
|
|
+++ b/lib/clamp/option/parsing.rb
|
|
@@ -31,7 +31,7 @@ def parse_options
|
|
begin
|
|
option.of(self).take(value)
|
|
rescue ArgumentError => e
|
|
- signal_usage_error "option '#{switch}': #{e.message}"
|
|
+ signal_usage_error Clamp.message(:option_argument_error, :switch => switch, :message => e.message)
|
|
end
|
|
|
|
end
|
|
@@ -45,11 +45,11 @@ def parse_options
|
|
self.class.recognised_options.each do |option|
|
|
# If this option is required and the value is nil, there's an error.
|
|
if option.required? and send(option.attribute_name).nil?
|
|
- message = "option '#{option.switches.first}'"
|
|
if option.environment_variable
|
|
- message += " (or env #{option.environment_variable})"
|
|
+ message = Clamp.message(:option_or_env_required, :option => option.switches.first, :env => option.environment_variable)
|
|
+ else
|
|
+ message = Clamp.message(:option_required, :option => option.switches.first)
|
|
end
|
|
- message += " is required"
|
|
signal_usage_error message
|
|
end
|
|
end
|
|
@@ -59,7 +59,7 @@ def parse_options
|
|
|
|
def find_option(switch)
|
|
self.class.find_option(switch) ||
|
|
- signal_usage_error("Unrecognised option '#{switch}'")
|
|
+ signal_usage_error(Clamp.message(:unrecognised_option, :switch => switch))
|
|
end
|
|
|
|
end
|
|
diff --git a/lib/clamp/parameter/definition.rb b/lib/clamp/parameter/definition.rb
|
|
index 6412546..a276dea 100644
|
|
--- a/lib/clamp/parameter/definition.rb
|
|
+++ b/lib/clamp/parameter/definition.rb
|
|
@@ -22,7 +22,7 @@ def help_lhs
|
|
end
|
|
|
|
def consume(arguments)
|
|
- raise ArgumentError, "no value provided" if required? && arguments.empty?
|
|
+ raise ArgumentError, Clamp.message(:no_value_provided) if required? && arguments.empty?
|
|
arguments.shift(multivalued? ? arguments.length : 1)
|
|
end
|
|
|
|
diff --git a/lib/clamp/parameter/parsing.rb b/lib/clamp/parameter/parsing.rb
|
|
index 8a70719..95aa422 100644
|
|
--- a/lib/clamp/parameter/parsing.rb
|
|
+++ b/lib/clamp/parameter/parsing.rb
|
|
@@ -13,7 +13,7 @@ def parse_parameters
|
|
parameter.of(self).take(value)
|
|
end
|
|
rescue ArgumentError => e
|
|
- signal_usage_error "parameter '#{parameter.name}': #{e.message}"
|
|
+ signal_usage_error Clamp.message(:parameter_argument_error, :param => parameter.name, :message => e.message)
|
|
end
|
|
end
|
|
|
|
diff --git a/lib/clamp/subcommand/execution.rb b/lib/clamp/subcommand/execution.rb
|
|
index d15c56b..c341df6 100644
|
|
--- a/lib/clamp/subcommand/execution.rb
|
|
+++ b/lib/clamp/subcommand/execution.rb
|
|
@@ -25,7 +25,7 @@ def instatiate_subcommand(name)
|
|
end
|
|
|
|
def find_subcommand_class(name)
|
|
- subcommand_def = self.class.find_subcommand(name) || signal_usage_error("No such sub-command '#{name}'")
|
|
+ subcommand_def = self.class.find_subcommand(name) || signal_usage_error(Clamp.message(:no_such_subcommand, :name => name))
|
|
subcommand_def.subcommand_class
|
|
end
|
|
|