module Bundler::Thor::Base
def included(base) #:nodoc:
def included(base) #:nodoc: super(base) base.extend ClassMethods base.send :include, Invocation base.send :include, Shell end
def initialize(args = [], local_options = {}, config = {})
config
access, magic predicates (options.skip?) and then frozen.
The hash given is converted to a hash with indifferent
options
respective accessors declared with argument.
args
==== Parameters
It should be done by the parser.
Notice that it does not check if all required arguments were supplied.
other for configuration.
It receives arguments in an Array and two hashes, one for options and
def initialize(args = [], local_options = {}, config = {}) parse_options = self.class.class_options # The start method splits inbound arguments at the first argument # that looks like an option (starts with - or --). It then calls # new, passing in the two halves of the arguments Array as the # first two parameters. command_options = config.delete(:command_options) # hook for start parse_options = parse_options.merge(command_options) if command_options if local_options.is_a?(Array) array_options = local_options hash_options = {} else # Handle the case where the class was explicitly instantiated # with pre-parsed options. array_options = [] hash_options = local_options end # Let Bundler::Thor::Options parse the options first, so it can remove # declared options from the array. This will leave us with # a list of arguments that weren't declared. current_command = config[:current_command] stop_on_unknown = self.class.stop_on_unknown_option? current_command # Give a relation of options. # After parsing, Bundler::Thor::Options check whether right relations are kept relations = if current_command.nil? {exclusive_option_names: [], at_least_one_option_names: []} else current_command.options_relation end self.class.class_exclusive_option_names.map { |n| relations[:exclusive_option_names] << n } self.class.class_at_least_one_option_names.map { |n| relations[:at_least_one_option_names] << n } disable_required_check = self.class.disable_required_check? current_command opts = Bundler::Thor::Options.new(parse_options, hash_options, stop_on_unknown, disable_required_check, relations) self.options = opts.parse(array_options) self.options = config[:class_options].merge(options) if config[:class_options] # If unknown options are disallowed, make sure that none of the # remaining arguments looks like an option. opts.check_unknown! if self.class.check_unknown_options?(config) # Add the remaining arguments from the options parser to the # arguments passed in to initialize. Then remove any positional # arguments declared using #argument (this is primarily used # by Bundler::Thor::Group). Tis will leave us with the remaining # positional arguments. to_parse = args to_parse += opts.remaining unless self.class.strict_args_position?(config) thor_args = Bundler::Thor::Arguments.new(self.class.arguments) thor_args.parse(to_parse).each { |k, v| __send__("#{k}=", v) } @args = thor_args.remaining end
def register_klass_file(klass) #:nodoc:
class and the file on Bundler::Thor::Base. This is the method responsible for it.
Whenever a class inherits from Bundler::Thor or Bundler::Thor::Group, we should track the
def register_klass_file(klass) #:nodoc: file = caller[1].match(/(.*):\d+/)[1] Bundler::Thor::Base.subclasses << klass unless Bundler::Thor::Base.subclasses.include?(klass) file_subclasses = Bundler::Thor::Base.subclass_files[File.expand_path(file)] file_subclasses << klass unless file_subclasses.include?(klass) end
def shell
it will use a colored log, otherwise it will use a basic one without color.
Returns the shell used in all Bundler::Thor classes. If you are in a Unix platform
def shell @shell ||= if ENV["THOR_SHELL"] && !ENV["THOR_SHELL"].empty? Bundler::Thor::Shell.const_get(ENV["THOR_SHELL"]) elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"] Bundler::Thor::Shell::Basic else Bundler::Thor::Shell::Color end end
def subclass_files
Hash[path
==== Returns
Returns the files where the subclasses are kept.
def subclass_files @subclass_files ||= Hash.new { |h, k| h[k] = [] } end
def subclasses
Array[Class]
==== Returns
Returns the classes that inherits from Bundler::Thor or Bundler::Thor::Group.
def subclasses @subclasses ||= [] end