Class: Thor
- Inherits:
-
Object
- Object
- Thor
- Includes:
- Base
- Defined in:
- lib/thor/core_ext/ordered_hash.rb,
lib/thor.rb,
lib/thor/base.rb,
lib/thor/task.rb,
lib/thor/util.rb,
lib/thor/error.rb,
lib/thor/shell.rb,
lib/thor/actions.rb,
lib/thor/invocation.rb,
lib/thor/tasks/spec.rb,
lib/thor/actions/get.rb,
lib/thor/shell/basic.rb,
lib/thor/shell/color.rb,
lib/thor/parser/option.rb,
lib/thor/tasks/install.rb,
lib/thor/tasks/package.rb,
lib/thor/parser/options.rb,
lib/thor/parser/argument.rb,
lib/thor/actions/template.rb,
lib/thor/parser/arguments.rb,
lib/thor/actions/copy_file.rb,
lib/thor/actions/directory.rb,
lib/thor/actions/templater.rb,
lib/thor/actions/create_file.rb,
lib/thor/actions/empty_directory.rb,
lib/thor/actions/inject_into_file.rb,
lib/thor/core_ext/hash_with_indifferent_access.rb
Overview
:nodoc:
Direct Known Subclasses
Defined Under Namespace
Modules: Actions, Base, CoreExt, Invocation, Sandbox, Shell, Util Classes: Argument, Arguments, Error, Group, InstallTask, InvocationError, MalformattedArgumentError, Option, Options, PackageTask, RequiredArgumentMissingError, Runner, SpecTask, Task, UndefinedTaskError
Constant Summary collapse
- HELP_MAPPINGS =
%w(-h -? --help -D)
- THOR_RESERVED_WORDS =
%w(invoke shell options behavior root destination_root relative_root source_root)
Instance Attribute Summary
Attributes included from Base
Class Method Summary collapse
-
.default_task(meth = nil) ⇒ Object
Sets the default task when thor is executed without an explicit task to be called.
-
.desc(usage, description, options = {}) ⇒ Object
Defines the usage and the description of the next task.
-
.help(shell, meth = nil, options = {}) ⇒ Object
Prints help information.
-
.install_task(spec, options = {}) ⇒ Object
Creates an install task.
-
.map(mappings = nil) ⇒ Object
Maps an input to a task.
-
.method_option(name, options) ⇒ Object
Adds an option to the set of class options.
-
.method_options(options = nil) ⇒ Object
Declares the options for the next task to be declared.
-
.package_task(spec, options = {}) ⇒ Object
Creates a package task.
-
.spec_task(files, options = {}) ⇒ Object
Creates a spec task.
-
.start(given_args = ARGV, config = {}) ⇒ Object
Parses the task and options from the given args, instantiate the class and invoke the task.
Instance Method Summary collapse
Methods included from Base
included, #initialize, register_klass_file, shell, shell=, subclass_files, subclasses
Class Method Details
.default_task(meth = nil) ⇒ Object
Sets the default task when thor is executed without an explicit task to be called.
Parameters
- meth<Symbol>
-
name of the defaut task
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/thor.rb', line 15 def default_task(meth=nil) case meth when :none @default_task = 'help' when nil @default_task ||= from_superclass(:default_task, 'help') else @default_task = meth.to_s end end |
.desc(usage, description, options = {}) ⇒ Object
Defines the usage and the description of the next task.
Parameters
usage<String> description<String>
32 33 34 35 36 37 38 39 40 |
# File 'lib/thor.rb', line 32 def desc(usage, description, ={}) if [:for] task = find_and_refresh_task([:for]) task.usage = usage if usage task.description = description if description else @usage, @desc = usage, description end end |
.help(shell, meth = nil, options = {}) ⇒ Object
Prints help information. If a task name is given, it shows information only about the specific task.
Parameters
- meth<String>
-
An optional task name to print usage information about.
Options
- namespace
-
When true, shows the namespace in the output before the usage.
- skip_inherited
-
When true, does not show tasks from superclass.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/thor.rb', line 157 def help(shell, meth=nil, ={}) meth, = nil, meth if meth.is_a?(Hash) if meth task = all_tasks[meth] raise UndefinedTaskError, "task '#{meth}' could not be found in namespace '#{self.namespace}'" unless task shell.say "Usage:" shell.say " #{(task, [:namespace])}" shell.say (shell, "Class") shell.say task.description else list = ([:short] ? tasks : all_tasks).map do |_, task| [ (task, [:namespace]), task.short_description || '' ] end if [:short] shell.print_table(list, :emphasize_last => true) else shell.say "Tasks:" shell.print_table(list, :ident => 2, :emphasize_last => true) shell.say (shell, "Class") end end end |
.install_task(spec, options = {}) ⇒ Object
Creates an install task.
Parameters
spec<Gem::Specification>
Options
:dir - The directory where the package is hold before installation. Defaults to ./pkg.
10 11 12 13 |
# File 'lib/thor/tasks/install.rb', line 10 def self.install_task(spec, ={}) package_task(spec, ) tasks['install'] = Thor::InstallTask.new(spec, ) end |
.map(mappings = nil) ⇒ Object
Maps an input to a task. If you define:
map "-T" => "list"
Running:
thor -T
Will invoke the list task.
Parameters
- Hash[String|Array => Symbol]
-
Maps the string or the strings in the array to the given task.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/thor.rb', line 55 def map(mappings=nil) @map ||= from_superclass(:map, {}) 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
Adds an option to the set of class options. If :for is given as option, it allows you to change the options from a previous defined task.
def previous_task
# magic
end
:foo => :bar, :for => :previous_task
def next_task
# 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, :boolean or :default.
Default accepts arguments as booleans (--switch) or as strings (--switch=VALUE).
:group - The group for this options. Use by class options to output options in different levels. :banner - String to show on usage notes.
111 112 113 114 115 116 117 118 119 |
# File 'lib/thor.rb', line 111 def method_option(name, ) scope = if [:for] find_and_refresh_task([:for]). else end build_option(name, , scope) end |
.method_options(options = nil) ⇒ Object
Declares the options for the next task 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.
78 79 80 81 82 |
# File 'lib/thor.rb', line 78 def (=nil) @method_options ||= {} (, @method_options) if @method_options end |
.package_task(spec, options = {}) ⇒ Object
Creates a package task.
Parameters
spec<Gem::Specification>
Options
:dir - The package directory. Defaults to ./pkg.
12 13 14 |
# File 'lib/thor/tasks/package.rb', line 12 def self.package_task(spec, ={}) tasks['package'] = Thor::PackageTask.new(spec, ) end |
.spec_task(files, options = {}) ⇒ Object
Creates a spec task.
Parameters
files<Array> - Array of files to spec
Options
:name - The name of the task. It can be rcov or spec. Spec is the default. :rcov - A hash with rcov specific options. :rcov_dir - Where rcov reports should be printed. :verbose - Sets the default value for verbose, although it can be specified
also through the command line.
All other options are added to rspec.
18 19 20 21 |
# File 'lib/thor/tasks/spec.rb', line 18 def self.spec_task(files, ={}) name = (.delete(:name) || 'spec').to_s tasks[name] = Thor::SpecTask.new(name, files, ) end |
.start(given_args = ARGV, config = {}) ⇒ Object
Parses the task and options from the given args, instantiate the class and invoke the task. This method is used when the arguments must be parsed from an array. If you are inside Ruby and want to use a Thor class, you can simply initialize it:
script = MyScript.new(args, , config)
script.invoke(:task, first_arg, second_arg, third_arg)
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/thor.rb', line 129 def start(given_args=ARGV, config={}) super do meth = normalize_task_name(given_args.shift) task = all_tasks[meth] if task args, opts = Thor::Options.split(given_args) config.merge!(:task_options => task.) else args, opts = given_args, {} end task ||= Task.dynamic(meth) trailing = args[Range.new(arguments.size, -1)] new(args, opts, config).invoke(task, trailing || []) end end |
Instance Method Details
#help(task = nil) ⇒ Object
231 232 233 |
# File 'lib/thor.rb', line 231 def help(task=nil) self.class.help(shell, task, :namespace => task && task.include?(?:)) end |