Class: Thor
- Inherits:
-
Object
- Object
- Thor
- Includes:
- Base
- Defined in:
- lib/bundler/vendor/thor.rb,
lib/bundler/vendor/thor/base.rb,
lib/bundler/vendor/thor/task.rb,
lib/bundler/vendor/thor/util.rb,
lib/bundler/vendor/thor/error.rb,
lib/bundler/vendor/thor/shell.rb,
lib/bundler/vendor/thor/actions.rb,
lib/bundler/vendor/thor/version.rb,
lib/bundler/vendor/thor/invocation.rb,
lib/bundler/vendor/thor/shell/html.rb,
lib/bundler/vendor/thor/shell/basic.rb,
lib/bundler/vendor/thor/shell/color.rb,
lib/bundler/vendor/thor/parser/option.rb,
lib/bundler/vendor/thor/parser/options.rb,
lib/bundler/vendor/thor/parser/argument.rb,
lib/bundler/vendor/thor/parser/arguments.rb,
lib/bundler/vendor/thor/actions/directory.rb,
lib/bundler/vendor/thor/actions/create_file.rb,
lib/bundler/vendor/thor/core_ext/ordered_hash.rb,
lib/bundler/vendor/thor/actions/empty_directory.rb,
lib/bundler/vendor/thor/actions/inject_into_file.rb,
lib/bundler/vendor/thor/actions/file_manipulation.rb,
lib/bundler/vendor/thor/core_ext/hash_with_indifferent_access.rb
Direct Known Subclasses
Defined Under Namespace
Modules: Actions, Base, CoreExt, Invocation, Sandbox, Shell, Util Classes: Argument, Arguments, DynamicTask, Error, HiddenTask, InvocationError, MalformattedArgumentError, Option, Options, RequiredArgumentMissingError, 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.14.0".freeze
Instance Attribute Summary
Attributes included from Base
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.
-
.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, subcommand = false) ⇒ Object
Prints help information for this class.
-
.long_desc(long_description, options = {}) ⇒ Object
Defines the long description of the next task.
-
.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, subcommand = false) ⇒ Object
Returns tasks ready to be printed.
- .subcommand(subcommand, subcommand_class) ⇒ Object
- .subcommands ⇒ Object
-
.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
.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
195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/bundler/vendor/thor.rb', line 195 def (={}) @check_unknown_options ||= Hash.new .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.
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/bundler/vendor/thor.rb', line 208 def (config) #:nodoc: = return false unless task = config[:current_task] return true unless task name = task.name if subcommands.include?(name) false elsif [:except] ![:except].include?(name.to_sym) elsif [:only] [:only].include?(name.to_sym) else true end end |
.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
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/bundler/vendor/thor.rb', line 10 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> options<String>
28 29 30 31 32 33 34 35 36 |
# File 'lib/bundler/vendor/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, @hide = usage, description, [:hide] || false end end |
.help(shell, subcommand = false) ⇒ Object
Prints help information for this class.
Parameters
shell<Thor::Shell>
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/bundler/vendor/thor.rb', line 157 def help(shell, subcommand = false) list = printable_tasks(true, subcommand) 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 |
.long_desc(long_description, options = {}) ⇒ Object
Defines the long description of the next task.
Parameters
long description<String>
43 44 45 46 47 48 49 50 |
# File 'lib/bundler/vendor/thor.rb', line 43 def long_desc(long_description, ={}) if [:for] task = find_and_refresh_task([:for]) task.long_description = long_description if long_description else @long_desc = long_description 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.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/bundler/vendor/thor.rb', line 65 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.
119 120 121 122 123 124 125 126 127 |
# File 'lib/bundler/vendor/thor.rb', line 119 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.
88 89 90 91 92 |
# File 'lib/bundler/vendor/thor.rb', line 88 def (=nil) @method_options ||= {} (, @method_options) if @method_options end |
.printable_tasks(all = true, subcommand = false) ⇒ Object
Returns tasks ready to be printed.
171 172 173 174 175 176 177 178 179 |
# File 'lib/bundler/vendor/thor.rb', line 171 def printable_tasks(all = true, subcommand = false) (all ? all_tasks : tasks).map do |_, task| next if task.hidden? item = [] item << (task, false, subcommand) item << (task.description ? "# #{task.description.gsub(/\s+/m,' ')}" : "") item end.compact end |
.subcommand(subcommand, subcommand_class) ⇒ Object
185 186 187 188 189 |
# File 'lib/bundler/vendor/thor.rb', line 185 def subcommand(subcommand, subcommand_class) self.subcommands << subcommand.to_s subcommand_class.subcommand_help subcommand define_method(subcommand) { |*args| invoke subcommand_class, args } end |
.subcommands ⇒ Object
181 182 183 |
# File 'lib/bundler/vendor/thor.rb', line 181 def subcommands @subcommands ||= from_superclass(:subcommands, []) end |
.task_help(shell, task_name) ⇒ Object
Prints help information for the given task.
Parameters
shell<Thor::Shell> task_name<String>
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/bundler/vendor/thor.rb', line 135 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 }) if task.long_description shell.say "Description:" shell.print_wrapped(task.long_description, :ident => 2) else shell.say task.description end end |
Instance Method Details
#help(task = nil, subcommand = false) ⇒ Object
316 317 318 |
# File 'lib/bundler/vendor/thor.rb', line 316 def help(task = nil, subcommand = false) task ? self.class.task_help(shell, task) : self.class.help(shell, subcommand) end |