Shortcuts for help.
Thor methods that should not be overwritten by the user.
Extend check unknown options to accept a hash of conditions.
options<Hash>: A hash containing :only and/or :except keys
# File lib/thor.rb, line 212 def check_unknown_options!(options={}) @check_unknown_options ||= Hash.new 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
Sets the default task when thor is executed without an explicit task to be called.
name of the defaut task
# File lib/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
Defines the usage and the description of the next task.
usage<String> description<String> options<String>
# File lib/thor.rb, line 45 def desc(usage, description, options={}) if options[:for] task = find_and_refresh_task(options[:for]) task.usage = usage if usage task.description = description if description else @usage, @desc, @hide = usage, description, options[:hide] || false end end
Prints help information for this class.
shell<Thor::Shell>
# File lib/thor.rb, line 174 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 class_options_help(shell) end
Defines the long description of the next task.
long description<String>
# File lib/thor.rb, line 60 def long_desc(long_description, options={}) if options[:for] task = find_and_refresh_task(options[:for]) task.long_description = long_description if long_description else @long_desc = long_description end end
Maps an input to a task. If you define:
map "-T" => "list"
Running:
thor -T
Will invoke the list task.
Maps the string or the strings in the array to the given task.
# File lib/thor.rb, line 82 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
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
The name of the argument.
Described below.
: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.
# File lib/thor.rb, line 136 def method_option(name, options={}) scope = if options[:for] find_and_refresh_task(options[:for]).options else method_options end build_option(name, options, scope) end
Declares the options for the next task to be declared.
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.
# File lib/thor.rb, line 105 def method_options(options=nil) @method_options ||= {} build_options(options, @method_options) if options @method_options end
Returns tasks ready to be printed.
# File lib/thor.rb, line 188 def printable_tasks(all = true, subcommand = false) (all ? all_tasks : tasks).map do |_, task| next if task.hidden? item = [] item << banner(task, false, subcommand) item << (task.description ? "# #{task.description.gsub(/\s+/m,' ')}" : "") item end.compact end
Registers another Thor subclass as a command.
Thor subclass to register
Subcommand name to use
Short usage for the subcommand
Description for the subcommand
# File lib/thor.rb, line 28 def register(klass, subcommand_name, usage, description, options={}) if klass <= Thor::Group desc usage, description, options define_method(subcommand_name) { invoke klass } else desc usage, description, options subcommand subcommand_name, klass end end
# File lib/thor.rb, line 202 def subcommand(subcommand, subcommand_class) self.subcommands << subcommand.to_s subcommand_class.subcommand_help subcommand define_method(subcommand) { |*args| invoke subcommand_class, args } end
# File lib/thor.rb, line 198 def subcommands @subcommands ||= from_superclass(:subcommands, []) end
Prints help information for the given task.
shell<Thor::Shell> task_name<String>
# File lib/thor.rb, line 152 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 " #{banner(task)}" shell.say class_options_help(shell, nil => task.options.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
# File lib/thor.rb, line 318 def subcommand_help(cmd) desc "help [COMMAND]", "Describe subcommands or one specific subcommand" class_eval " def help(task = nil, subcommand = true); super; end " end
# File lib/thor.rb, line 331 def help(task = nil, subcommand = false) task ? self.class.task_help(shell, task) : self.class.help(shell, subcommand) end