Class: Thor
- Includes:
- Base
- Defined in:
- lib/vendor/thor/lib/thor.rb,
lib/vendor/thor/lib/thor/base.rb,
lib/vendor/thor/lib/thor/task.rb,
lib/vendor/thor/lib/thor/util.rb,
lib/vendor/thor/lib/thor/error.rb,
lib/vendor/thor/lib/thor/shell.rb,
lib/vendor/thor/lib/thor/actions.rb,
lib/vendor/thor/lib/thor/version.rb,
lib/vendor/thor/lib/thor/invocation.rb,
lib/vendor/thor/lib/thor/rake_compat.rb,
lib/vendor/thor/lib/thor/shell/basic.rb,
lib/vendor/thor/lib/thor/shell/color.rb,
lib/vendor/thor/lib/thor/parser/option.rb,
lib/vendor/thor/lib/thor/parser/options.rb,
lib/vendor/thor/lib/thor/parser/argument.rb,
lib/vendor/thor/lib/thor/parser/arguments.rb,
lib/vendor/thor/lib/thor/actions/directory.rb,
lib/vendor/thor/lib/thor/actions/create_file.rb,
lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb,
lib/vendor/thor/lib/thor/actions/empty_directory.rb,
lib/vendor/thor/lib/thor/actions/inject_into_file.rb,
lib/vendor/thor/lib/thor/actions/file_manipulation.rb,
lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb
Overview
TODO: Update thor to allow for git-style CLI (git bisect run)
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, UnknownArgumentError
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)
- VERSION =
"0.13.3".freeze
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.
-
.handle_argument_error(task, error) ⇒ Object
:nodoc:.
-
.help(shell) ⇒ Object
Prints help information for this class.
-
.map(mappings = nil) ⇒ Object
Maps an input to a task.
-
.method_option(name, options = {}) ⇒ Object
Adds an option to the set of method options.
-
.method_options(options = nil) ⇒ Object
Declares the options for the next task to be declared.
-
.printable_tasks(all = true) ⇒ Object
Returns tasks ready to be printed.
-
.start(original_args = ARGV, config = {}) ⇒ Object
Parses the task and options from the given args, instantiate the class and invoke the task.
-
.task_help(shell, task_name) ⇒ Object
Prints help information for the given 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
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/vendor/thor/lib/thor.rb', line 11 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>
28 29 30 31 32 33 34 35 36 |
# File 'lib/vendor/thor/lib/thor.rb', line 28 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 |
.handle_argument_error(task, error) ⇒ Object
:nodoc:
187 188 189 |
# File 'lib/vendor/thor/lib/thor.rb', line 187 def handle_argument_error(task, error) #:nodoc: raise InvocationError, "#{task.name.inspect} was called incorrectly. Call as #{task.formatted_usage(self, == "thor").inspect}." end |
.help(shell) ⇒ Object
Prints help information for this class.
Parameters
shell<Thor::Shell>
164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/vendor/thor/lib/thor.rb', line 164 def help(shell) list = printable_tasks Thor::Util.thor_classes_in(self).each do |klass| list += klass.printable_tasks(false) end list.sort!{ |a,b| a[0] <=> b[0] } shell.say "Tasks:" shell.print_table(list, :ident => 2, :truncate => true) shell.say (shell) 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.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/vendor/thor/lib/thor.rb', line 51 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 method options. If :for is given as option, it allows you to change the options from a previous defined task.
def previous_task
# magic
end
method_option :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 or :boolean. :banner - String to show on usage notes.
105 106 107 108 109 110 111 112 113 |
# File 'lib/vendor/thor/lib/thor.rb', line 105 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.
74 75 76 77 78 |
# File 'lib/vendor/thor/lib/thor.rb', line 74 def (=nil) @method_options ||= {} (, @method_options) if @method_options end |
.printable_tasks(all = true) ⇒ Object
Returns tasks ready to be printed.
178 179 180 181 182 183 184 185 |
# File 'lib/vendor/thor/lib/thor.rb', line 178 def printable_tasks(all=true) (all ? all_tasks : tasks).map do |_, task| item = [] item << (task) item << (task.description ? "# #{task.description.gsub(/\s+/m,' ')}" : "") item end end |
.start(original_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)
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/vendor/thor/lib/thor.rb', line 123 def start(original_args=ARGV, config={}) super do |given_args| 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 ||= Thor::Task::Dynamic.new(meth) trailing = args[Range.new(arguments.size, -1)] new(args, opts, config).invoke(task, trailing || []) end end |
.task_help(shell, task_name) ⇒ Object
Prints help information for the given task.
Parameters
shell<Thor::Shell> task_name<String>
147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/vendor/thor/lib/thor.rb', line 147 def task_help(shell, task_name) meth = normalize_task_name(task_name) task = all_tasks[meth] handle_no_task_error(meth) unless task shell.say "Usage:" shell.say " #{(task)}" shell.say (shell, nil => task..map { |_, o| o }) shell.say task.description end |
Instance Method Details
#help(task = nil) ⇒ Object
241 242 243 |
# File 'lib/vendor/thor/lib/thor.rb', line 241 def help(task=nil) task ? self.class.task_help(shell, task) : self.class.help(shell) end |