Class: Thor
- Includes:
- Base
- Defined in:
- 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/rake_compat.rb,
lib/thor/shell/basic.rb,
lib/thor/shell/color.rb,
lib/thor/parser/option.rb,
lib/thor/parser/options.rb,
lib/thor/parser/argument.rb,
lib/thor/parser/arguments.rb,
lib/thor/actions/directory.rb,
lib/thor/actions/create_file.rb,
lib/thor/core_ext/ordered_hash.rb,
lib/thor/actions/empty_directory.rb,
lib/thor/actions/inject_into_file.rb,
lib/thor/actions/file_manipulation.rb,
lib/thor/core_ext/hash_with_indifferent_access.rb
Direct Known Subclasses
Defined Under Namespace
Modules: Actions, Base, CoreExt, Invocation, RakeCompat, Sandbox, Shell, Util Classes: Argument, Arguments, Error, Group, InvocationError, MalformattedArgumentError, Option, Options, RequiredArgumentMissingError, Runner, Task, UndefinedTaskError
Constant Summary collapse
- HELP_MAPPINGS =
Shortcuts for help.
%w(-h -? --help -D)
- THOR_RESERVED_WORDS =
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)
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.
-
.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.
-
.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
name of the defaut task
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/thor.rb', line 13 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
30 31 32 33 34 35 36 37 38 |
# File 'lib/thor.rb', line 30 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
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.
154 155 156 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 185 186 187 188 |
# File 'lib/thor.rb', line 154 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], false)}" shell.say (shell, "Class", :Method => task..map { |_, o| o }) shell.say task.description else list = ([:short] ? tasks : all_tasks).map do |_, task| item = [ (task, [:namespace]) ] item << "# #{task.short_description}" if task.short_description item << " " end [:ident] ||= 2 if [:short] shell.print_list(list, :ident => [:ident]) else shell.say "Tasks:" shell.print_list(list, :ident => [:ident]) end Thor::Util.thor_classes_in(self).each do |subclass| namespace = [:namespace] == true || subclass.namespace.gsub(/^#{self.namespace}:/, '') subclass.help(shell, .merge(:short => true, :namespace => namespace)) end (shell, "Class") unless [:short] end 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.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/thor.rb', line 53 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
The name of the argument.
- options
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. :group - The group for this options. Use by class options to output options in different levels. :banner - String to show on usage notes.
108 109 110 111 112 113 114 115 116 |
# File 'lib/thor.rb', line 108 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.
76 77 78 79 80 |
# File 'lib/thor.rb', line 76 def (=nil) @method_options ||= {} (, @method_options) if @method_options 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)
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/thor.rb', line 126 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
240 241 242 |
# File 'lib/thor.rb', line 240 def help(task=nil) self.class.help(shell, task, :namespace => task && task.include?(?:)) end |