class Gem::Command
Basisklasse für alle Gem-Befehle. Beim Erstellen eines neuen Gem-Befehls definieren Sie initialize, execute, arguments, defaults_str, description und usage (je nach Bedarf). Details finden Sie in den oben genannten Methoden.
Ein sehr gutes Beispiel ist Gem::Commands::ContentsCommand
Attribute
Der Name des Befehls.
Die Standardoptionen für den Befehl.
Die Optionen für den Befehl.
Der Name des Befehls für die Ausführung über die Befehlszeile.
Eine kurze Beschreibung des Befehls.
Öffentliche Klassenmethoden
Source
# File lib/rubygems/command.rb, line 65 def self.add_common_option(*args, &handler) Gem::Command.common_options << [args, handler] end
Source
# File lib/rubygems/command.rb, line 94 def self.add_specific_extra_args(cmd,args) args = args.split(/\s+/) if args.is_a? String specific_extra_args_hash[cmd] = args end
Fügt eine Liste von zusätzlichen Argumenten für den angegebenen Befehl hinzu. args kann ein Array oder ein String sein, der bei Leerzeichen aufgeteilt wird.
Source
# File lib/rubygems/command.rb, line 53 def self.build_args @build_args ||= [] end
Argumente, die beim Erstellen von Gems verwendet werden
Source
# File lib/rubygems/command.rb, line 57 def self.build_args=(value) @build_args = value end
Source
# File lib/rubygems/command.rb, line 61 def self.common_options @common_options ||= [] end
Source
# File lib/rubygems/command.rb, line 69 def self.extra_args @extra_args ||= [] end
Source
# File lib/rubygems/command.rb, line 73 def self.extra_args=(value) case value when Array @extra_args = value when String @extra_args = value.split(" ") end end
Source
# File lib/rubygems/command.rb, line 120 def initialize(command, summary = nil, defaults = {}) @command = command @summary = summary @program_name = "gem #{command}" @defaults = defaults @options = defaults.dup @option_groups = Hash.new {|h,k| h[k] = [] } @deprecated_options = { command => {} } @parser = nil @when_invoked = nil end
Initialisiert einen generischen Gem-Befehl namens command. summary ist eine kurze Beschreibung, die in ‘gem help commands` angezeigt wird. defaults sind die Standardoptionen. Die Standardwerte sollten in defaults_str gespiegelt werden, es sei denn, es gibt keine.
Beim Definieren einer neuen Befehlsunterklasse verwenden Sie add_option, um Befehlszeilenschalter hinzuzufügen.
Nicht behandelte Argumente (Gem-Namen, Dateien usw.) verbleiben in options[:args].
Source
# File lib/rubygems/command.rb, line 86 def self.specific_extra_args(cmd) specific_extra_args_hash[cmd] end
Gibt ein Array von zusätzlichen Argumenten für den Befehl zurück. Die zusätzlichen Argumente stammen aus der Gem-Konfigurationsdatei, die beim Programmstart gelesen wird.
Source
# File lib/rubygems/command.rb, line 102 def self.specific_extra_args_hash @specific_extra_args_hash ||= Hash.new do |h,k| h[k] = Array.new end end
Accessor für den Hash der spezifischen zusätzlichen Argumente (selbstinitialisierend).
Öffentliche Instanzmethoden
Source
# File lib/rubygems/command.rb, line 451 def add_extra_args(args) result = [] s_extra = Gem::Command.specific_extra_args(@command) extra = Gem::Command.extra_args + s_extra until extra.empty? do ex = [] ex << extra.shift ex << extra.shift if /^[^-]/.match?(extra.first.to_s) result << ex if handles?(ex) end result.flatten! result.concat(args) result end
Fügt zusätzliche Argumente aus ~/.gemrc hinzu
Source
# File lib/rubygems/command.rb, line 358 def add_option(*opts, &handler) # :yields: value, options group_name = Symbol === opts.first ? opts.shift : :options raise "Do not pass an empty string in opts" if opts.include?("") @option_groups[group_name] << [opts, handler] end
Fügt eine Befehlszeilenoption und einen Handler zum Befehl hinzu.
Siehe Gem::OptionParser#make_switch für eine Erklärung von opts.
handler wird mit zwei Werten aufgerufen: dem Wert des Arguments und dem Optionen-Hash.
Wenn das erste Argument von add_option ein Symbol ist, wird es verwendet, um Optionen in der Ausgabe zu gruppieren. Siehe ‘gem help list` als Beispiel.
Source
# File lib/rubygems/command.rb, line 258 def arguments "" end
Überschreiben Sie dies, um Details zu den Argumenten anzugeben, die ein Befehl akzeptiert. Es sollte einen linksbündigen String zurückgeben, ein Argument pro Zeile.
Zum Beispiel
def usage "#{program_name} FILE [FILE ...]" end def arguments "FILE name of file to find" end
Source
# File lib/rubygems/command.rb, line 135 def begins?(long, short) return false if short.nil? long[0, short.length] == short end
True, wenn long mit den Zeichen von short beginnt.
Source
# File lib/rubygems/command.rb, line 397 def check_deprecated_options(options) options.each do |option| next unless option_is_deprecated?(option) deprecation = @deprecated_options[command][option] version_to_expire = deprecation["rg_version_to_expire"] deprecate_option_msg = if version_to_expire "The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}." else "The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems." end extra_msg = deprecation["extra_msg"] deprecate_option_msg += " #{extra_msg}" if extra_msg alert_warning(deprecate_option_msg) end end
Source
# File lib/rubygems/command.rb, line 272 def defaults_str "" end
Überschreiben Sie dies, um die Standardwerte der Befehlsoptionen anzuzeigen. (ähnlich wie arguments, zeigt aber die Standardwerte an).
Zum Beispiel
def defaults_str --no-gems-first --no-all end
Source
# File lib/rubygems/command.rb, line 393 def deprecate_option(name, version: nil, extra_msg: nil) @deprecated_options[command].merge!({ name => { "rg_version_to_expire" => version, "extra_msg" => extra_msg } }) end
Markiert eine Befehlszeilenoption als veraltet und gibt optional einen Deprecationshorizont an.
Beachten Sie, dass mit der aktuellen Implementierung jede Version der Option explizit veraltet werden muss. Um eine Option zu veraltet, die wie folgt definiert ist
add_option('-t', '--[no-]test', 'Set test mode') do |value, options| # ... stuff ... end
müssten Sie für jede Version der zu veralteten Option explizit einen Aufruf von ‚deprecate_option` hinzufügen, wie z.B.
deprecate_option('-t') deprecate_option('--test') deprecate_option('--no-test')
Source
# File lib/rubygems/command.rb, line 279 def description nil end
Überschreiben Sie dies, um eine längere Beschreibung dessen anzuzeigen, was dieser Befehl tut.
Source
# File lib/rubygems/command.rb, line 149 def execute raise Gem::Exception, "generic command has no actions" end
Überschreiben Sie dies, um die Befehlsbehandlung bereitzustellen.
options wird mit Ihren geparsten Optionen gefüllt, nicht geparste Optionen verbleiben in options[:args].
Siehe auch: get_all_gem_names, get_one_gem_name, get_one_optional_argument
Source
# File lib/rubygems/command.rb, line 185 def get_all_gem_names args = options[:args] if args.nil? || args.empty? raise Gem::CommandLineError, "Please specify at least one gem name (e.g. gem build GEMNAME)" end args.reject {|arg| arg.start_with?("-") } end
Ruft alle Gem-Namen von der Befehlszeile ab.
Source
# File lib/rubygems/command.rb, line 201 def get_all_gem_names_and_versions get_all_gem_names.map do |name| extract_gem_name_and_version(name) end end
Ruft alle [Gem, Version] von der Befehlszeile ab.
Ein Argument der Form gem:ver wird in den Gem-Namen bzw. die Version aufgeteilt.
Source
# File lib/rubygems/command.rb, line 219 def get_one_gem_name args = options[:args] if args.nil? || args.empty? raise Gem::CommandLineError, "Please specify a gem name on the command line (e.g. gem build GEMNAME)" end if args.size > 1 raise Gem::CommandLineError, "Too many gem names (#{args.join(", ")}); please specify only one" end args.first end
Ruft einen einzelnen Gem-Namen von der Befehlszeile ab. Schlägt fehl, wenn kein Gem-Name vorhanden ist oder wenn mehr als ein Gem-Name angegeben wurde.
Source
# File lib/rubygems/command.rb, line 239 def get_one_optional_argument args = options[:args] || [] args.first end
Ruft ein einzelnes optionales Argument von der Befehlszeile ab. Wenn mehr als ein Argument angegeben wird, wird nur das erste zurückgegeben. Gibt nil zurück, wenn keines angegeben wurde.
Source
# File lib/rubygems/command.rb, line 440 def handle_options(args) args = add_extra_args(args) check_deprecated_options(args) @options = Marshal.load Marshal.dump @defaults # deep copy parser.parse!(args) @options[:args] = args end
Behandelt die angegebene Liste von Argumenten, indem sie geparst und die Ergebnisse aufgezeichnet werden.
Source
# File lib/rubygems/command.rb, line 429 def handles?(args) parser.parse!(args.dup) true rescue StandardError false end
True, wenn der Befehl die angegebene Argumentliste behandelt.
Source
# File lib/rubygems/command.rb, line 303 def invoke(*args) invoke_with_build_args args, nil end
Ruft den Befehl mit der angegebenen Liste von Argumenten auf.
Source
# File lib/rubygems/command.rb, line 311 def invoke_with_build_args(args, build_args) handle_options args options[:build_args] = build_args if options[:silent] old_ui = ui self.ui = ui = Gem::SilentUI.new end if options[:help] show_help elsif @when_invoked @when_invoked.call options else execute end ensure if ui self.ui = old_ui ui.close end end
Ruft den Befehl mit der angegebenen Liste von normalen Argumenten und zusätzlichen Build-Argumenten auf.
Source
# File lib/rubygems/command.rb, line 421 def merge_options(new_options) @options = @defaults.clone new_options.each {|k,v| @options[k] = v } end
Führt einen Satz von Befehlsoptionen mit dem Satz von Standardoptionen zusammen (ohne den Hash der Standardoptionen zu ändern).
Source
# File lib/rubygems/command.rb, line 369 def remove_option(name) @option_groups.each do |_, option_list| option_list.reject! {|args, _| args.any? {|x| x.is_a?(String) && x =~ /^#{name}/ } } end end
Entfernt ein zuvor definiertes Befehlszeilenargument name.
Source
# File lib/rubygems/command.rb, line 295 def show_help parser.program_name = usage say parser end
Zeigt die Hilfenachricht für den Befehl an.
Source
# File lib/rubygems/command.rb, line 157 def show_lookup_failure(gem_name, version, errors, suppress_suggestions = false, required_by = nil) gem = "'#{gem_name}' (#{version})" msg = String.new "Could not find a valid gem #{gem}" if errors && !errors.empty? msg << ", here is why:\n" errors.each {|x| msg << " #{x.wordy}\n" } else if required_by && gem != required_by msg << " (required by #{required_by}) in any repository" else msg << " in any repository" end end alert_error msg unless suppress_suggestions suggestions = Gem::SpecFetcher.fetcher.suggest_gems_from_name(gem_name, :latest, 10) unless suggestions.empty? alert_error "Possible alternatives: #{suggestions.join(", ")}" end end end
Zeigt dem Benutzer an, dass ein Gem nicht gefunden werden konnte und aus welchen Gründen
Source
# File lib/rubygems/command.rb, line 288 def usage program_name end
Überschreiben Sie dies, um die Verwendung für einen einzelnen Gem-Befehl anzuzeigen.
Der Text "[options]" wird automatisch an den Verwendungstext angehängt.
Source
# File lib/rubygems/command.rb, line 343 def when_invoked(&block) @when_invoked = block end
Ruft den angegebenen Block auf, wenn er aufgerufen wird.
Normale Befehlsaufrufe führen einfach die Methode execute des Befehls aus. Die Angabe eines Aufrufblocks ermöglicht es den Testmethoden, die normale Aktion eines Befehls zu überschreiben, um festzustellen, dass er korrekt aufgerufen wurde.
Private Instanzmethoden
Source
# File lib/rubygems/command.rb, line 510 def add_parser_run_info(title, content) return if content.empty? @parser.separator nil @parser.separator " #{title}:" content.each_line do |line| @parser.separator " #{line.rstrip}" end end
Fügt dem Parser-Hilfebildschirm einen Abschnitt mit title und content hinzu. Wird verwendet, um Befehlsargumente und Standardargumente hinzuzufügen.
Source
# File lib/rubygems/command.rb, line 556 def configure_options(header, option_list) return if option_list.nil? || option_list.empty? header = header.to_s.empty? ? "" : "#{header} " @parser.separator " #{header}Options:" option_list.each do |args, handler| @parser.on(*args) do |value| handler.call(value, @options) end end @parser.separator "" end
Source
# File lib/rubygems/command.rb, line 542 def create_option_parser @parser = Gem::OptionParser.new add_parser_options @parser.separator nil configure_options "Common", Gem::Command.common_options add_parser_run_info "Arguments", arguments add_parser_summary add_parser_description add_parser_run_info "Defaults", defaults_str end
Erstellt einen Options-Parser und füllt ihn mit den Hilfebereichen für den Befehl.
Source
# File lib/rubygems/command.rb, line 475 def option_is_deprecated?(option) @deprecated_options[command].key?(option) end
Source
# File lib/rubygems/command.rb, line 533 def parser create_option_parser if @parser.nil? @parser end
Erstellt einen Parser nach Bedarf.
Source
# File lib/rubygems/command.rb, line 574 def wrap(text, width) # :doc: text.gsub(/(.{1,#{width}})( +|$\n?)|(.{1,#{width}})/, "\\1\\3\n") end
Wickelt text auf width um