Class: Bundler::Thor
- Inherits:
-
Object
- Object
- Bundler::Thor
- Includes:
- Base
- Defined in:
- lib/bundler/vendor/thor/lib/thor.rb,
lib/bundler/vendor/thor/lib/thor/base.rb,
lib/bundler/vendor/thor/lib/thor/util.rb,
lib/bundler/vendor/thor/lib/thor/error.rb,
lib/bundler/vendor/thor/lib/thor/shell.rb,
lib/bundler/vendor/thor/lib/thor/actions.rb,
lib/bundler/vendor/thor/lib/thor/command.rb,
lib/bundler/vendor/thor/lib/thor/version.rb,
lib/bundler/vendor/thor/lib/thor/invocation.rb,
lib/bundler/vendor/thor/lib/thor/shell/html.rb,
lib/bundler/vendor/thor/lib/thor/line_editor.rb,
lib/bundler/vendor/thor/lib/thor/rake_compat.rb,
lib/bundler/vendor/thor/lib/thor/shell/basic.rb,
lib/bundler/vendor/thor/lib/thor/shell/color.rb,
lib/bundler/vendor/thor/lib/thor/parser/option.rb,
lib/bundler/vendor/thor/lib/thor/nested_context.rb,
lib/bundler/vendor/thor/lib/thor/parser/options.rb,
lib/bundler/vendor/thor/lib/thor/parser/argument.rb,
lib/bundler/vendor/thor/lib/thor/parser/arguments.rb,
lib/bundler/vendor/thor/lib/thor/actions/directory.rb,
lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb,
lib/bundler/vendor/thor/lib/thor/actions/create_file.rb,
lib/bundler/vendor/thor/lib/thor/actions/create_link.rb,
lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb,
lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb,
lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb,
lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb,
lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb
Direct Known Subclasses
Defined Under Namespace
Modules: Actions, Base, CoreExt, Invocation, LineEditor, RakeCompat, Sandbox, Shell, Util Classes: AmbiguousCommandError, Argument, Arguments, Command, DynamicCommand, Error, Group, HiddenCommand, InvocationError, MalformattedArgumentError, NestedContext, Option, Options, RequiredArgumentMissingError, Runner, UndefinedCommandError, UnknownArgumentError
Constant Summary collapse
- HELP_MAPPINGS =
Shortcuts for help.
%w(-h -? --help -D)
- THOR_RESERVED_WORDS =
Bundler::Thor methods that should not be overwritten by the user.
%w(invoke shell options behavior root destination_root relative_root action add_file create_file in_root inside run run_ruby_script)
- TEMPLATE_EXTNAME =
".tt"
- Correctable =
if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable) # In order to support versions of Ruby that don't have keyword # arguments, we need our own spell checker class that doesn't take key # words. Even though this code wouldn't be hit because of the check # above, it's still necessary because the interpreter would otherwise be # unable to parse the file. class NoKwargSpellChecker < DidYouMean::SpellChecker # :nodoc: def initialize(dictionary) @dictionary = dictionary end end DidYouMean::Correctable end
- UndefinedTaskError =
UndefinedCommandError
- AmbiguousTaskError =
AmbiguousCommandError
- Task =
Command
- HiddenTask =
HiddenCommand
- DynamicTask =
DynamicCommand
- VERSION =
"1.0.0"
Instance Attribute Summary
Attributes included from Base
#args, #options, #parent_options
Class Method Summary collapse
-
.check_unknown_options!(options = {}) ⇒ Object
Extend check unknown options to accept a hash of conditions.
-
.check_unknown_options?(config) ⇒ Boolean
Overwrite check_unknown_options? to take subcommands and options into account.
-
.command_help(shell, command_name) ⇒ Object
(also: task_help)
Prints help information for the given command.
-
.default_command(meth = nil) ⇒ Object
(also: default_task)
Sets the default command when thor is executed without an explicit command to be called.
-
.deprecation_warning(message) ⇒ Object
:nodoc:.
-
.desc(usage, description, options = {}) ⇒ Object
Defines the usage and the description of the next command.
-
.disable_required_check!(*command_names) ⇒ Object
Disable the check for required options for the given commands.
-
.disable_required_check?(command) ⇒ Boolean
:nodoc:.
-
.help(shell, subcommand = false) ⇒ Object
Prints help information for this class.
-
.long_desc(long_description, options = {}) ⇒ Object
Defines the long description of the next command.
-
.map(mappings = nil, **kw) ⇒ Object
Maps an input to a command.
-
.method_option(name, options = {}) ⇒ Object
(also: option)
Adds an option to the set of method options.
-
.method_options(options = nil) ⇒ Object
(also: options)
Declares the options for the next command to be declared.
-
.package_name(name, _ = {}) ⇒ Object
Allows for custom “Command” package naming.
-
.printable_commands(all = true, subcommand = false) ⇒ Object
(also: printable_tasks)
Returns commands ready to be printed.
-
.register(klass, subcommand_name, usage, description, options = {}) ⇒ Object
Registers another Bundler::Thor subclass as a command.
-
.stop_on_unknown_option!(*command_names) ⇒ Object
Stop parsing of options as soon as an unknown option or a regular argument is encountered.
-
.stop_on_unknown_option?(command) ⇒ Boolean
:nodoc:.
- .subcommand(subcommand, subcommand_class) ⇒ Object (also: subtask)
- .subcommand_classes ⇒ Object
- .subcommands ⇒ Object (also: subtasks)
Instance Method Summary collapse
Methods included from Base
included, #initialize, register_klass_file, subclass_files, subclasses
Class Method Details
.check_unknown_options!(options = {}) ⇒ Object
Extend check unknown options to accept a hash of conditions.
Parameters
options<Hash>: A hash containing :only and/or :except keys
255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 255 def ( = {}) @check_unknown_options ||= {} .each do |key, value| if value @check_unknown_options[key] = Array(value) else @check_unknown_options.delete(key) end end @check_unknown_options end |
.check_unknown_options?(config) ⇒ Boolean
Overwrite check_unknown_options? to take subcommands and options into account.
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 268 def (config) #:nodoc: = return false unless command = config[:current_command] return true unless command name = command.name if subcommands.include?(name) false elsif [:except] ![:except].include?(name.to_sym) elsif [:only] [:only].include?(name.to_sym) else true end end |
.command_help(shell, command_name) ⇒ Object Also known as: task_help
Prints help information for the given command.
Parameters
shell<Bundler::Thor::Shell> command_name<String>
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 172 def command_help(shell, command_name) meth = normalize_command_name(command_name) command = all_commands[meth] handle_no_command_error(meth) unless command shell.say "Usage:" shell.say " #{(command).split("\n").join("\n ")}" shell.say (shell, nil => command..values) if command.long_description shell.say "Description:" shell.print_wrapped(command.long_description, :indent => 2) else shell.say command.description end end |
.default_command(meth = nil) ⇒ Object Also known as: default_task
Sets the default command when thor is executed without an explicit command to be called.
Parameters
- meth<Symbol>
-
name of the default command
21 22 23 24 25 26 27 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 21 def default_command(meth = nil) if meth @default_command = meth == :none ? "help" : meth.to_s else @default_command ||= from_superclass(:default_command, "help") end end |
.deprecation_warning(message) ⇒ Object
:nodoc:
347 348 349 350 351 352 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 347 def deprecation_warning() #:nodoc: unless ENV['THOR_SILENCE_DEPRECATION'] warn "Deprecation warning: #{}\n" + 'You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.' end end |
.desc(usage, description, options = {}) ⇒ Object
Defines the usage and the description of the next command.
Parameters
usage<String> description<String> options<String>
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 54 def desc(usage, description, = {}) if [:for] command = find_and_refresh_command([:for]) command.usage = usage if usage command.description = description if description else @usage = usage @desc = description @hide = [:hide] || false end end |
.disable_required_check!(*command_names) ⇒ Object
Disable the check for required options for the given commands. This is useful if you have a command that does not need the required options to work, like help.
Parameters
- Symbol …
-
A list of commands that should be affected.
339 340 341 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 339 def disable_required_check!(*command_names) disable_required_check.merge(command_names) end |
.disable_required_check?(command) ⇒ Boolean
:nodoc:
343 344 345 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 343 def disable_required_check?(command) #:nodoc: command && disable_required_check.include?(command.name.to_sym) end |
.help(shell, subcommand = false) ⇒ Object
Prints help information for this class.
Parameters
shell<Bundler::Thor::Shell>
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 195 def help(shell, subcommand = false) list = printable_commands(true, subcommand) Bundler::Thor::Util.thor_classes_in(self).each do |klass| list += klass.printable_commands(false) end list.sort! { |a, b| a[0] <=> b[0] } if defined?(@package_name) && @package_name shell.say "#{@package_name} commands:" else shell.say "Commands:" end shell.print_table(list, :indent => 2, :truncate => true) shell.say (shell) end |
.long_desc(long_description, options = {}) ⇒ Object
Defines the long description of the next command.
Parameters
long description<String>
71 72 73 74 75 76 77 78 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 71 def long_desc(long_description, = {}) if [:for] command = find_and_refresh_command([:for]) command.long_description = long_description if long_description else @long_desc = long_description end end |
.map(mappings = nil, **kw) ⇒ Object
Maps an input to a command. If you define:
map "-T" => "list"
Running:
thor -T
Will invoke the list command.
Parameters
- Hash[String|Array => Symbol]
-
Maps the string or the strings in the array to the given command.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 93 def map(mappings = nil, **kw) @map ||= from_superclass(:map, {}) if mappings && !kw.empty? mappings = kw.merge!(mappings) else mappings ||= kw end if mappings mappings.each do |key, value| if key.respond_to?(:each) key.each { |subkey| @map[subkey] = value } else @map[key] = value end end end @map end |
.method_option(name, options = {}) ⇒ Object Also known as: option
Adds an option to the set of method options. If :for is given as option, it allows you to change the options from a previous defined command.
def previous_command
# magic
end
method_option :foo => :bar, :for => :previous_command
def next_command
# magic
end
Parameters
- name<Symbol>
-
The name of the argument.
- options<Hash>
-
Described below.
Options
:desc - Description for the argument. :required - If the argument is required or not. :default - Default value for this argument. It cannot be required and have default values. :aliases - Aliases for this option. :type - The type of the argument, can be :string, :hash, :array, :numeric or :boolean. :banner - String to show on usage notes. :hide - If you want to hide this option from the help.
155 156 157 158 159 160 161 162 163 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 155 def method_option(name, = {}) scope = if [:for] find_and_refresh_command([:for]). else end build_option(name, , scope) end |
.method_options(options = nil) ⇒ Object Also known as: options
Declares the options for the next command to be declared.
Parameters
- Hash[Symbol => Object]
-
The hash key is the name of the option and the value
is the type of the option. Can be :string, :array, :hash, :boolean, :numeric or :required (string). If you give a value, the type of the value is used.
121 122 123 124 125 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 121 def ( = nil) @method_options ||= {} (, @method_options) if @method_options end |
.package_name(name, _ = {}) ⇒ Object
Allows for custom “Command” package naming.
Parameters
name<String> options<Hash>
12 13 14 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 12 def package_name(name, _ = {}) @package_name = name.nil? || name == "" ? nil : name end |
.printable_commands(all = true, subcommand = false) ⇒ Object Also known as: printable_tasks
Returns commands ready to be printed.
214 215 216 217 218 219 220 221 222 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 214 def printable_commands(all = true, subcommand = false) (all ? all_commands : commands).map do |_, command| next if command.hidden? item = [] item << (command, false, subcommand) item << (command.description ? "# #{command.description.gsub(/\s+/m, ' ')}" : "") item end.compact end |
.register(klass, subcommand_name, usage, description, options = {}) ⇒ Object
Registers another Bundler::Thor subclass as a command.
Parameters
- klass<Class>
-
Bundler::Thor subclass to register
- command<String>
-
Subcommand name to use
- usage<String>
-
Short usage for the subcommand
- description<String>
-
Description for the subcommand
37 38 39 40 41 42 43 44 45 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 37 def register(klass, subcommand_name, usage, description, = {}) if klass <= Bundler::Thor::Group desc usage, description, define_method(subcommand_name) { |*args| invoke(klass, args) } else desc usage, description, subcommand subcommand_name, klass end end |
.stop_on_unknown_option!(*command_names) ⇒ Object
Stop parsing of options as soon as an unknown option or a regular argument is encountered. All remaining arguments are passed to the command. This is useful if you have a command that can receive arbitrary additional options, and where those additional options should not be handled by Bundler::Thor.
Example
To better understand how this is useful, let’s consider a command that calls an external command. A user may want to pass arbitrary options and arguments to that command. The command itself also accepts some options, which should be handled by Bundler::Thor.
class_option "verbose", :type => :boolean
stop_on_unknown_option! :exec
:except => :exec
desc "exec", "Run a shell command"
def exec(*args)
puts "diagnostic output" if [:verbose]
Kernel.exec(*args)
end
Here exec
can be called with --verbose
to get diagnostic output, e.g.:
$ thor exec --verbose echo foo
diagnostic output
foo
But if --verbose
is given after echo
, it is passed to echo
instead:
$ thor exec echo --verbose foo
--verbose foo
Parameters
- Symbol …
-
A list of commands that should be affected.
325 326 327 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 325 def stop_on_unknown_option!(*command_names) stop_on_unknown_option.merge(command_names) end |
.stop_on_unknown_option?(command) ⇒ Boolean
:nodoc:
329 330 331 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 329 def stop_on_unknown_option?(command) #:nodoc: command && stop_on_unknown_option.include?(command.name.to_sym) end |
.subcommand(subcommand, subcommand_class) ⇒ Object Also known as: subtask
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 234 def subcommand(subcommand, subcommand_class) subcommands << subcommand.to_s subcommand_class.subcommand_help subcommand subcommand_classes[subcommand.to_s] = subcommand_class define_method(subcommand) do |*args| args, opts = Bundler::Thor::Arguments.split(args) invoke_args = [args, opts, {:invoked_via_subcommand => true, :class_options => }] invoke_args.unshift "help" if opts.delete("--help") || opts.delete("-h") invoke subcommand_class, *invoke_args end subcommand_class.commands.each do |_meth, command| command.ancestor_name = subcommand end end |
.subcommand_classes ⇒ Object
230 231 232 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 230 def subcommand_classes @subcommand_classes ||= {} end |
.subcommands ⇒ Object Also known as: subtasks
225 226 227 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 225 def subcommands @subcommands ||= from_superclass(:subcommands, []) end |
Instance Method Details
#help(command = nil, subcommand = false) ⇒ Object
513 514 515 516 517 518 519 520 521 522 523 |
# File 'lib/bundler/vendor/thor/lib/thor.rb', line 513 def help(command = nil, subcommand = false) if command if self.class.subcommands.include? command self.class.subcommand_classes[command].help(shell, true) else self.class.command_help(shell, command) end else self.class.help(shell, subcommand) end end |