class OptionParser
OptionParser
Neu bei OptionParser?
Siehe das Tutorial.
Einführung
OptionParser ist eine Klasse zur Analyse von Kommandozeilenoptionen. Sie ist weit fortgeschrittener, aber auch einfacher zu verwenden als GetoptLong und eine Ruby-orientiertere Lösung.
Funktionen
-
Die Argumentenspezifikation und der Code zu dessen Behandlung sind am selben Ort geschrieben.
-
Es kann eine Optionszusammenfassung ausgegeben werden; Sie müssen diese Zeichenkette nicht separat pflegen.
-
Optionale und obligatorische Argumente werden sehr elegant spezifiziert.
-
Argumente können automatisch in eine angegebene Klasse konvertiert werden.
-
Argumente können auf eine bestimmte Menge eingeschränkt werden.
Alle diese Funktionen werden in den folgenden Beispielen demonstriert. Siehe make_switch für die vollständige Dokumentation.
Minimalbeispiel
require 'optparse' options = {} OptionParser.new do |parser| parser.banner = "Usage: example.rb [options]" parser.on("-v", "--[no-]verbose", "Run verbosely") do |v| options[:verbose] = v end end.parse! p options p ARGV
Generieren von Hilfe
OptionParser kann verwendet werden, um automatisch Hilfe für die von Ihnen geschriebenen Befehle zu generieren
require 'optparse' Options = Struct.new(:name) class Parser def self.parse(options) args = Options.new("world") opt_parser = OptionParser.new do |parser| parser.banner = "Usage: example.rb [options]" parser.on("-nNAME", "--name=NAME", "Name to say hello to") do |n| args.name = n end parser.on("-h", "--help", "Prints this help") do puts parser exit end end opt_parser.parse!(options) return args end end options = Parser.parse %w[--help] #=> # Usage: example.rb [options] # -n, --name=NAME Name to say hello to # -h, --help Prints this help
Erforderliche Argumente
Für Optionen, die ein Argument erfordern, können Optionsspezifikationszeichenketten einen Optionsnamen in Großbuchstaben enthalten. Wenn eine Option ohne das erforderliche Argument verwendet wird, wird eine Ausnahme ausgelöst.
require 'optparse' options = {} OptionParser.new do |parser| parser.on("-r", "--require LIBRARY", "Require the LIBRARY before executing your script") do |lib| puts "You required #{lib}!" end end.parse!
Verwendet
$ ruby optparse-test.rb -r optparse-test.rb:9:in '<main>': missing argument: -r (OptionParser::MissingArgument) $ ruby optparse-test.rb -r my-library You required my-library!
Typkonvertierung
OptionParser unterstützt die Möglichkeit, Kommandozeilenargumente in Objekte für uns zu konvertieren.
OptionParser wird mit einigen sofort einsatzbereiten Typkonvertierungsarten geliefert. Diese sind
-
Date– Alles, was vonDate.parseakzeptiert wird (mussoptparse/dateerfordern) -
DateTime– Alles, was vonDateTime.parseakzeptiert wird (mussoptparse/dateerfordern) -
Time– Alles, was vonTime.httpdateoderTime.parseakzeptiert wird (mussoptparse/timeerfordern) -
URI– Alles, was vonURI.parseakzeptiert wird (mussoptparse/urierfordern) -
Shellwords– Alles, was vonShellwords.shellwordsakzeptiert wird (mussoptparse/shellwordserfordern) -
String– Jede nicht leere Zeichenkette -
Integer– Jede Ganzzahl. Konvertiert Oktalzahlen. (z. B. 124, -3, 040) -
Float– Jede Fließkommazahl. (z. B. 10, 3.14, -100E+13) -
Numeric– Jede Ganzzahl, Fließkommazahl oder Bruchzahl (1, 3.4, 1/3) -
DecimalInteger– WieInteger, aber kein Oktalformat. -
OctalInteger– WieInteger, aber kein Dezimalformat. -
DecimalNumeric– Dezimalzahl oder Gleitkommazahl. -
TrueClass– Akzeptiert '+, yes, true, -, no, false' und standardmäßigtrue -
FalseClass– WieTrueClass, aber standardmäßigfalse -
Array– Durch ',' getrennte Zeichenketten (z. B. 1,2,3) -
Regexp– Reguläre Ausdrücke. Enthält auch Optionen.
Wir können auch eigene Konvertierungen hinzufügen, die wir unten behandeln werden.
Verwendung integrierter Konvertierungen
Als Beispiel wird die integrierte Time-Konvertierung verwendet. Die anderen integrierten Konvertierungen verhalten sich genauso. OptionParser versucht, das Argument als Time zu parsen. Wenn dies gelingt, wird diese Zeit an den Handler-Block übergeben. Andernfalls wird eine Ausnahme ausgelöst.
require 'optparse' require 'optparse/time' OptionParser.new do |parser| parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time| p time end end.parse!
Verwendet
$ ruby optparse-test.rb -t nonsense ... invalid argument: -t nonsense (OptionParser::InvalidArgument) $ ruby optparse-test.rb -t 10-11-12 2010-11-12 00:00:00 -0500 $ ruby optparse-test.rb -t 9:30 2014-08-13 09:30:00 -0400
Erstellung benutzerdefinierter Konvertierungen
Die Methode accept auf OptionParser kann zum Erstellen von Konvertern verwendet werden. Sie gibt an, welcher Konvertierungsblock aufgerufen werden soll, wenn eine Klasse angegeben wird. Das folgende Beispiel verwendet sie, um ein User-Objekt abzurufen, bevor der on-Handler es erhält.
require 'optparse' User = Struct.new(:id, :name) def find_user id not_found = ->{ raise "No User Found for id #{id}" } [ User.new(1, "Sam"), User.new(2, "Gandalf") ].find(not_found) do |u| u.id == id end end op = OptionParser.new op.accept(User) do |user_id| find_user user_id.to_i end op.on("--user ID", User) do |user| puts user end op.parse!
Verwendet
$ ruby optparse-test.rb --user 1 #<struct User id=1, name="Sam"> $ ruby optparse-test.rb --user 2 #<struct User id=2, name="Gandalf"> $ ruby optparse-test.rb --user 3 optparse-test.rb:15:in 'block in find_user': No User Found for id 3 (RuntimeError)
Optionen in einem Hash speichern
Die Option into der Methoden order, parse usw. speichert Kommandozeilenoptionen in einem Hash.
require 'optparse' options = {} OptionParser.new do |parser| parser.on('-a') parser.on('-b NUM', Integer) parser.on('-v', '--verbose') end.parse!(into: options) p options
Verwendet
$ ruby optparse-test.rb -a
{:a=>true}
$ ruby optparse-test.rb -a -v
{:a=>true, :verbose=>true}
$ ruby optparse-test.rb -a -b 100
{:a=>true, :b=>100}
Vollständiges Beispiel
Das folgende Beispiel ist ein vollständiges Ruby-Programm. Sie können es ausführen und die Auswirkungen der Angabe verschiedener Optionen sehen. Dies ist wahrscheinlich der beste Weg, die Funktionen von optparse zu erlernen.
require 'optparse' require 'optparse/time' require 'ostruct' require 'pp' class OptparseExample Version = '1.0.0' CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary] CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" } class ScriptOptions attr_accessor :library, :inplace, :encoding, :transfer_type, :verbose, :extension, :delay, :time, :record_separator, :list def initialize self.library = [] self.inplace = false self.encoding = "utf8" self.transfer_type = :auto self.verbose = false end def define_options(parser) parser.banner = "Usage: example.rb [options]" parser.separator "" parser.separator "Specific options:" # add additional options perform_inplace_option(parser) delay_execution_option(parser) execute_at_time_option(parser) specify_record_separator_option(parser) list_example_option(parser) specify_encoding_option(parser) optional_option_argument_with_keyword_completion_option(parser) boolean_verbose_option(parser) parser.separator "" parser.separator "Common options:" # No argument, shows at tail. This will print an options summary. # Try it and see! parser.on_tail("-h", "--help", "Show this message") do puts parser exit end # Another typical switch to print the version. parser.on_tail("--version", "Show version") do puts Version exit end end def perform_inplace_option(parser) # Specifies an optional option argument parser.on("-i", "--inplace [EXTENSION]", "Edit ARGV files in place", "(make backup if EXTENSION supplied)") do |ext| self.inplace = true self.extension = ext || '' self.extension.sub!(/\A\.?(?=.)/, ".") # Ensure extension begins with dot. end end def delay_execution_option(parser) # Cast 'delay' argument to a Float. parser.on("--delay N", Float, "Delay N seconds before executing") do |n| self.delay = n end end def execute_at_time_option(parser) # Cast 'time' argument to a Time object. parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time| self.time = time end end def specify_record_separator_option(parser) # Cast to octal integer. parser.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger, "Specify record separator (default \\0)") do |rs| self.record_separator = rs end end def list_example_option(parser) # List of arguments. parser.on("--list x,y,z", Array, "Example 'list' of arguments") do |list| self.list = list end end def specify_encoding_option(parser) # Keyword completion. We are specifying a specific set of arguments (CODES # and CODE_ALIASES - notice the latter is a Hash), and the user may provide # the shortest unambiguous text. code_list = (CODE_ALIASES.keys + CODES).join(', ') parser.on("--code CODE", CODES, CODE_ALIASES, "Select encoding", "(#{code_list})") do |encoding| self.encoding = encoding end end def optional_option_argument_with_keyword_completion_option(parser) # Optional '--type' option argument with keyword completion. parser.on("--type [TYPE]", [:text, :binary, :auto], "Select transfer type (text, binary, auto)") do |t| self.transfer_type = t end end def boolean_verbose_option(parser) # Boolean switch. parser.on("-v", "--[no-]verbose", "Run verbosely") do |v| self.verbose = v end end end # # Return a structure describing the options. # def parse(args) # The options specified on the command line will be collected in # *options*. @options = ScriptOptions.new @args = OptionParser.new do |parser| @options.define_options(parser) parser.parse!(args) end @options end attr_reader :parser, :options end # class OptparseExample example = OptparseExample.new options = example.parse(ARGV) pp options # example.options pp ARGV
Shell-VervollständigungCompletion
Für moderne Shells (z. B. bash, zsh usw.) können Sie die Shell-Vervollständigung für Kommandozeilenoptionen verwenden.
Weitere Dokumentation
Die obigen Beispiele sollten zusammen mit dem begleitenden Tutorial ausreichen, um zu lernen, wie diese Klasse verwendet wird. Wenn Sie Fragen haben, reichen Sie ein Ticket unter bugs.ruby-lang.org ein.
Constants
- DecimalInteger
-
Dezimales Ganzzahlformat, das in
Integerkonvertiert werden soll. - DecimalNumeric
-
Dezimalzahl oder Gleitkommazahlenformat, das für Ganzzahlen in
Integerund für Gleitkommazahlen inFloatkonvertiert werden soll. - OctalInteger
-
Ruby/C-ähnliches Oktal-/Hexadezimal-/Binärzahlformat, das in
Integerkonvertiert werden soll. - VERSION
-
Die Versionszeichenfolge
- Version
-
Ein Alias für Kompatibilität
Attribute
Zeichenketten, die standardmäßig geparst werden sollen.
Programmname, der in Fehlermeldungen und Standardbannern ausgegeben werden soll, standardmäßig $0.
Ob bei unbekannter Option eine Ausnahme ausgelöst werden soll.
Versionscode
Ob Optionen exakt übereinstimmen müssen (erlaubt nicht die Angabe einer abgekürzten langen Option als kurze Option).
Programmname, der in Fehlermeldungen und Standardbannern ausgegeben werden soll, standardmäßig $0.
Breite für den Optionslistenteil der Zusammenfassung. Muss ein Numeric sein.
Breite für den Optionslistenteil der Zusammenfassung. Muss ein Numeric sein.
Öffentliche Klassenmethoden
Source
# File lib/optparse.rb, line 1237 def self.accept(*args, &blk) top.accept(*args, &blk) end
Siehe accept.
Source
# File lib/optparse.rb, line 1939 def self.getopts(*args, symbolize_names: false) new.getopts(*args, symbolize_names: symbolize_names) end
Siehe getopts.
Source
# File lib/optparse.rb, line 1159 def self.inc(arg, default = nil) case arg when Integer arg.nonzero? when nil default.to_i + 1 end end
Gibt einen inkrementierten Wert von default gemäß arg zurück.
Source
# File lib/optparse.rb, line 1182 def initialize(banner = nil, width = 32, indent = ' ' * 4) @stack = [DefaultList, List.new, List.new] @program_name = nil @banner = banner @summary_width = width @summary_indent = indent @default_argv = ARGV @require_exact = false @raise_unknown = true add_officious yield self if block_given? end
Initialisiert die Instanz und übergibt sich selbst, wenn sie mit einem Block aufgerufen wird.
banner-
Banner-Nachricht.
Breite-
Zusammenfassungsbreite.
Einrückung-
Zusammenfassungseinrückung.
Source
# File lib/optparse.rb, line 1250 def self.reject(*args, &blk) top.reject(*args, &blk) end
Siehe reject.
Source
# File lib/optparse/version.rb, line 10 def show_version(*pkgs) progname = ARGV.options.program_name result = false show = proc do |klass, cname, version| str = "#{progname}" unless klass == ::Object and cname == :VERSION version = version.join(".") if Array === version str << ": #{klass}" unless klass == Object str << " version #{version}" end [:Release, :RELEASE].find do |rel| if klass.const_defined?(rel) str << " (#{klass.const_get(rel)})" end end puts str result = true end if pkgs.size == 1 and pkgs[0] == "all" self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version| unless cname[1] == ?e and klass.const_defined?(:Version) show.call(klass, cname.intern, version) end end else pkgs.each do |pkg| begin pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)} v = case when pkg.const_defined?(:Version) pkg.const_get(n = :Version) when pkg.const_defined?(:VERSION) pkg.const_get(n = :VERSION) else n = nil "unknown" end show.call(pkg, n, v) rescue NameError end end end result end
Zeigt den Versionsstring in Paketen an, wenn Version definiert ist.
pkgs-
Paketliste
Source
# File lib/optparse.rb, line 1212 def self.terminate(arg = nil) throw :terminate, arg end
Siehe terminate.
Source
# File lib/optparse.rb, line 1222 def self.top() DefaultList end
Gibt die globale Top-Optionsliste zurück.
Nicht direkt verwenden.
Source
# File lib/optparse.rb, line 1150 def self.with(*args, &block) opts = new(*args) opts.instance_eval(&block) opts end
Öffentliche Instanzmethoden
Source
# File lib/optparse.rb, line 1360 def abort(mesg = $!) super("#{program_name}: #{mesg}") end
Zeigt eine Nachricht mit dem Programmnamen an und bricht dann ab.
mesg-
Nachricht, standardmäßig +$!+.
Siehe Kernel#abort.
Kernel#abort aufSource
# File lib/optparse.rb, line 1233 def accept(*args, &blk) top.accept(*args, &blk) end
Leitet die Annahme der angegebenen Klasse t ein. Das Argumentstring wird an den Block übergeben, in dem es in die gewünschte Klasse konvertiert werden sollte.
t-
Argumentklassenspezifizierer, jedes Objekt einschließlich Klasse.
pat-
Muster für das Argument, standardmäßig
t, wenn es auf match reagiert.
accept(t, pat, &block)
Source
# File lib/optparse.rb, line 1987 def additional_message(typ, opt) return unless typ and opt and defined?(DidYouMean::SpellChecker) all_candidates = [] visit(:get_candidates, typ) do |candidates| all_candidates.concat(candidates) end all_candidates.select! {|cand| cand.is_a?(String) } checker = DidYouMean::SpellChecker.new(dictionary: all_candidates) DidYouMean.formatter.message_for(all_candidates & checker.correct(opt)) end
Gibt zusätzliche Informationen zurück.
Source
# File lib/optparse.rb, line 2001 def candidate(word) list = [] case word when '-' long = short = true when /\A--/ word, arg = word.split(/=/, 2) argpat = Completion.regexp(arg, false) if arg and !arg.empty? long = true when /\A-/ short = true end pat = Completion.regexp(word, long) visit(:each_option) do |opt| next unless Switch === opt opts = (long ? opt.long : []) + (short ? opt.short : []) opts = Completion.candidate(word, true, pat, &opts.method(:each)).map(&:first) if pat if /\A=/ =~ opt.arg opts.map! {|sw| sw + "="} if arg and CompletingHash === opt.pattern if opts = opt.pattern.candidate(arg, false, argpat) opts.map!(&:last) end end end list.concat(opts) end list end
Gibt Kandidaten für word zurück.
Source
# File lib/optparse.rb, line 1631 def define(*opts, &block) top.append(*(sw = make_switch(opts, block))) sw[0] end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Source
# File lib/optparse/kwargs.rb, line 15 def define_by_keywords(options, method, **params) method.parameters.each do |type, name| case type when :key, :keyreq op, cl = *(type == :key ? %w"[ ]" : ["", ""]) define("--#{name}=#{op}#{name.upcase}#{cl}", *params[name]) do |o| options[name] = o end end end options end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Definiert Optionen, die in options für Schlüsselwortparameter von method gesetzt werden.
Parameter für jedes Schlüsselwort werden als Elemente von params angegeben.
Source
# File lib/optparse.rb, line 1652 def define_head(*opts, &block) top.prepend(*(sw = make_switch(opts, block))) sw[0] end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Source
# File lib/optparse.rb, line 1675 def define_tail(*opts, &block) base.append(*(sw = make_switch(opts, block))) sw[0] end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Source
# File lib/optparse.rb, line 2082 def environment(env = File.basename($0, '.*'), **keywords) env = ENV[env] || ENV[env.upcase] or return require 'shellwords' parse(*Shellwords.shellwords(env), **keywords) end
Parst die Umgebungsvariable env oder deren Großbuchstaben mit einer Teilung wie in einer Shell.
env hat standardmäßig den Basisnamen des Programms.
Source
# File lib/optparse.rb, line 1901 def getopts(*args, symbolize_names: false, **keywords) argv = Array === args.first ? args.shift : default_argv single_options, *long_options = *args result = {} setter = (symbolize_names ? ->(name, val) {result[name.to_sym] = val} : ->(name, val) {result[name] = val}) single_options.scan(/(.)(:)?/) do |opt, val| if val setter[opt, nil] define("-#{opt} VAL") else setter[opt, false] define("-#{opt}") end end if single_options long_options.each do |arg| arg, desc = arg.split(';', 2) opt, val = arg.split(':', 2) if val setter[opt, (val unless val.empty?)] define("--#{opt}=#{result[opt] || "VAL"}", *[desc].compact) else setter[opt, false] define("--#{opt}", *[desc].compact) end end parse_in_order(argv, setter, **keywords) result end
Wrapper-Methode für getopts.rb.
params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option") # params["a"] = true # -a # params["b"] = "1" # -b1 # params["foo"] = "1" # --foo # params["bar"] = "x" # --bar x # params["zot"] = "z" # --zot Z
Die Option symbolize_names (boolean) gibt an, ob die Schlüssel des zurückgegebenen Hash Symbole sein sollen; standardmäßig false (verwendet Strings).
params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option", symbolize_names: true) # params[:a] = true # -a # params[:b] = "1" # -b1 # params[:foo] = "1" # --foo # params[:bar] = "x" # --bar x # params[:zot] = "z" # --zot Z
Source
# File lib/optparse.rb, line 1419 def help; summarize("#{banner}".sub(/\n?\z/, "\n")) end
Gibt die Optionszusammenfassungszeichenkette zurück.
Source
# File lib/optparse.rb, line 1171 def inc(*args) self.class.inc(*args) end
Siehe self.inc
Source
# File lib/optparse.rb, line 2042 def load(filename = nil, **keywords) unless filename basename = File.basename($0, '.*') return true if load(File.expand_path("~/.options/#{basename}"), **keywords) rescue nil basename << ".options" if !(xdg = ENV['XDG_CONFIG_HOME']) or xdg.empty? # https://specifications.freedesktop.org/basedir-spec/latest/#variables # # If $XDG_CONFIG_HOME is either not set or empty, a default # equal to $HOME/.config should be used. xdg = ['~/.config', true] end return [ xdg, *ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR), # Haiku ['~/config/settings', true], ].any? {|dir, expand| next if !dir or dir.empty? filename = File.join(dir, basename) filename = File.expand_path(filename) if expand load(filename, **keywords) rescue nil } end begin parse(*File.readlines(filename, chomp: true), **keywords) true rescue Errno::ENOENT, Errno::ENOTDIR false end end
Lädt Optionen aus Dateinamen wie filename. Tut nichts, wenn die Datei nicht vorhanden ist. Gibt zurück, ob erfolgreich geladen wurde.
filename hat standardmäßig den Basisnamen des Programms ohne Suffix in einem Verzeichnis ~/.options, dann den Basisnamen mit dem Suffix '.options' unter Standardorten von XDG und Haiku.
Das optionale Schlüsselwortargument into funktioniert genau wie das, das in der Methode parse akzeptiert wird.
Source
# File lib/optparse.rb, line 1473 def make_switch(opts, block = nil) short, long, nolong, style, pattern, conv, not_pattern, not_conv, not_style = [], [], [] ldesc, sdesc, desc, arg = [], [], [] default_style = Switch::NoArgument default_pattern = nil klass = nil q, a = nil has_arg = false values = nil opts.each do |o| # argument class next if search(:atype, o) do |pat, c| klass = notwice(o, klass, 'type') if not_style and not_style != Switch::NoArgument not_pattern, not_conv = pat, c else default_pattern, conv = pat, c end end # directly specified pattern(any object possible to match) if !Completion.completable?(o) and o.respond_to?(:match) pattern = notwice(o, pattern, 'pattern') if pattern.respond_to?(:convert) conv = pattern.method(:convert).to_proc else conv = SPLAT_PROC end next end # anything others case o when Proc, Method block = notwice(o, block, 'block') when Array, Hash, Set if Array === o o, v = o.partition {|v,| Completion.completable?(v)} values = notwice(v, values, 'values') unless v.empty? next if o.empty? end case pattern when CompletingHash when nil pattern = CompletingHash.new conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert) else raise ArgumentError, "argument pattern given twice" end o.each {|pat, *v| pattern[pat] = v.fetch(0) {pat}} when Range values = notwice(o, values, 'values') when Module raise ArgumentError, "unsupported argument type: #{o}", ParseError.filter_backtrace(caller(4)) when *ArgumentStyle.keys style = notwice(ArgumentStyle[o], style, 'style') when /\A--no-([^\[\]=\s]*)(.+)?/ q, a = $1, $2 o = notwice(a ? Object : TrueClass, klass, 'type') not_pattern, not_conv = search(:atype, o) unless not_style not_style = (not_style || default_style).guess(arg = a) if a default_style = Switch::NoArgument default_pattern, conv = search(:atype, FalseClass) unless default_pattern ldesc << "--no-#{q}" (q = q.downcase).tr!('_', '-') long << "no-#{q}" nolong << q when /\A--\[no-\]([^\[\]=\s]*)(.+)?/ q, a = $1, $2 o = notwice(a ? Object : TrueClass, klass, 'type') if a default_style = default_style.guess(arg = a) default_pattern, conv = search(:atype, o) unless default_pattern end ldesc << "--[no-]#{q}" (o = q.downcase).tr!('_', '-') long << o not_pattern, not_conv = search(:atype, FalseClass) unless not_style not_style = Switch::NoArgument nolong << "no-#{o}" when /\A--([^\[\]=\s]*)(.+)?/ q, a = $1, $2 if a o = notwice(NilClass, klass, 'type') default_style = default_style.guess(arg = a) default_pattern, conv = search(:atype, o) unless default_pattern end ldesc << "--#{q}" (o = q.downcase).tr!('_', '-') long << o when /\A-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/ q, a = $1, $2 o = notwice(Object, klass, 'type') if a default_style = default_style.guess(arg = a) default_pattern, conv = search(:atype, o) unless default_pattern else has_arg = true end sdesc << "-#{q}" short << Regexp.new(q) when /\A-(.)(.+)?/ q, a = $1, $2 if a o = notwice(NilClass, klass, 'type') default_style = default_style.guess(arg = a) default_pattern, conv = search(:atype, o) unless default_pattern end sdesc << "-#{q}" short << q when /\A=/ style = notwice(default_style.guess(arg = o), style, 'style') default_pattern, conv = search(:atype, Object) unless default_pattern else desc.push(o) if o && !o.empty? end end default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern if Range === values and klass unless (!values.begin or klass === values.begin) and (!values.end or klass === values.end) raise ArgumentError, "range does not match class" end end if !(short.empty? and long.empty?) if has_arg and default_style == Switch::NoArgument default_style = Switch::RequiredArgument end s = (style || default_style).new(pattern || default_pattern, conv, sdesc, ldesc, arg, desc, block, values) elsif !block if style or pattern raise ArgumentError, "no switch given", ParseError.filter_backtrace(caller) end s = desc else short << pattern s = (style || default_style).new(pattern, conv, nil, nil, arg, desc, block, values) end return s, short, long, (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style), nolong end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Source
# File lib/optparse.rb, line 1384 def new @stack.push(List.new) if block_given? yield self else self end end
Schiebt eine neue List ein.
Wenn ein Block angegeben wird, wird self übergeben und das Ergebnis des Blocks zurückgegeben, andernfalls wird self zurückgegeben.
Source
# File lib/optparse.rb, line 1641 def on(*opts, &block) define(*opts, &block) self end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Source
# File lib/optparse.rb, line 1664 def on_head(*opts, &block) define_head(*opts, &block) self end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Die neue Option wird am Anfang der Zusammenfassung hinzugefügt.
Source
# File lib/optparse.rb, line 1688 def on_tail(*opts, &block) define_tail(*opts, &block) self end
Erstellt eine Option aus den gegebenen Parametern params. Siehe Parameter für neue Optionen.
Der Block, falls vorhanden, ist der Handler für die erstellte Option. Wenn die Option während des Parsens der Kommandozeile angetroffen wird, wird der Block mit dem für die Option gegebenen Argument aufgerufen, falls vorhanden. Siehe Optionshandler.
Die neue Option wird am Ende der Zusammenfassung hinzugefügt.
Source
# File lib/optparse.rb, line 1717 def order(*argv, **keywords, &nonopt) argv = argv[0].dup if argv.size == 1 and Array === argv[0] order!(argv, **keywords, &nonopt) end
Parst Kommandozeilenargumente argv in der Reihenfolge. Wenn ein Block angegeben wird, wird jedes Nicht-Optionsargument übergeben. Wenn das optionale Schlüsselwortargument into bereitgestellt wird, werden die geparsten Optionswerte dort über die Methode []= gespeichert (es kann also ein Hash, ein OpenStruct oder ein anderes ähnliches Objekt sein).
Gibt den Rest von argv zurück, der nicht geparst wurde.
Source
# File lib/optparse.rb, line 1726 def order!(argv = default_argv, into: nil, **keywords, &nonopt) setter = ->(name, val) {into[name.to_sym] = val} if into parse_in_order(argv, setter, **keywords, &nonopt) end
Wie order, aber entfernt Schalter destruktiv. Nicht-Optionsargumente verbleiben in argv.
Source
# File lib/optparse.rb, line 1865 def parse(*argv, **keywords) argv = argv[0].dup if argv.size == 1 and Array === argv[0] parse!(argv, **keywords) end
Parst Kommandozeilenargumente argv in der Reihenfolge, wenn die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, und andernfalls im Permutationsmodus. Wenn das optionale Schlüsselwortargument into bereitgestellt wird, werden die geparsten Optionswerte dort über die Methode []= gespeichert (es kann also ein Hash, ein OpenStruct oder ein anderes ähnliches Objekt sein).
Source
# File lib/optparse.rb, line 1874 def parse!(argv = default_argv, **keywords) if ENV.include?('POSIXLY_CORRECT') order!(argv, **keywords) else permute!(argv, **keywords) end end
Wie parse, aber entfernt Schalter destruktiv. Nicht-Optionsargumente verbleiben in argv.
Source
# File lib/optparse.rb, line 1842 def permute(*argv, **keywords) argv = argv[0].dup if argv.size == 1 and Array === argv[0] permute!(argv, **keywords) end
Parst Kommandozeilenargumente argv im Permutationsmodus und gibt eine Liste von Nicht-Optionsargumenten zurück. Wenn das optionale Schlüsselwortargument into bereitgestellt wird, werden die geparsten Optionswerte dort über die Methode []= gespeichert (es kann also ein Hash, ein OpenStruct oder ein anderes ähnliches Objekt sein).
Source
# File lib/optparse.rb, line 1851 def permute!(argv = default_argv, **keywords) nonopts = [] order!(argv, **keywords) {|nonopt| nonopts << nonopt} argv[0, 0] = nonopts argv end
Wie permute, aber entfernt Schalter destruktiv. Nicht-Optionsargumente verbleiben in argv.
Source
# File lib/optparse.rb, line 1294 def program_name @program_name || strip_ext(File.basename($0)) end
Programmname, der in Fehlermeldungen und Standardbannern ausgegeben werden soll, standardmäßig $0.
Source
# File lib/optparse.rb, line 1246 def reject(*args, &blk) top.reject(*args, &blk) end
Leitet die Ablehnung des angegebenen Klassenarguments ein.
type-
Argumentklassenspezifizierer, jedes Objekt einschließlich Klasse.
reject(type)
Source
# File lib/optparse.rb, line 1327 def release (defined?(@release) && @release) || (defined?(::Release) && ::Release) || (defined?(::RELEASE) && ::RELEASE) end
Versionscode
Source
# File lib/optparse.rb, line 1697 def separator(string) top.append(string, nil, nil) end
Fügt einen Trennstrich in die Zusammenfassung ein.
Source
# File lib/optparse.rb, line 1409 def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk) nl = "\n" blk ||= proc {|l| to << (l.index(nl, -1) ? l : l + nl)} visit(:summarize, {}, {}, width, max, indent, &blk) to end
Schreibt die Optionszusammenfassung in to und gibt to zurück. Übergibt jede Zeile, wenn ein Block vorhanden ist.
zu-
Ausgabeziel, das die Methode << haben muss. Standardmäßig [].
Breite-
Breite der linken Seite, standardmäßig @summary_width.
max-
Maximale zulässige Länge für die linke Seite, standardmäßig
width- 1. Einrückung-
Einrückung, standardmäßig @summary_indent.
Source
# File lib/optparse.rb, line 1206 def terminate(arg = nil) self.class.terminate(arg) end
Beendet die Optionsanalyse. Der optionale Parameter arg ist eine Zeichenkette, die zurückgegeben wird, um das erste Nicht-Optionsargument zu sein.
Source
# File lib/optparse.rb, line 1448 def to_a; summarize("#{banner}".split(/^/)) end
Gibt die Optionszusammenfassungsliste zurück.
Source
# File lib/optparse.rb, line 1367 def top @stack[-1] end
Source
# File lib/optparse.rb, line 1334 def ver if v = version str = +"#{program_name} #{[v].join('.')}" str << " (#{v})" if v = release str end end
Gibt den Versionsstring aus program_name, Version und Release zurück.
Source
# File lib/optparse.rb, line 1320 def version (defined?(@version) && @version) || (defined?(::Version) && ::Version) end
Source
# File lib/optparse.rb, line 1349 def warn(mesg = $!) super("#{program_name}: #{mesg}") end
Zeigt eine Warnmeldung mit dem Programmnamen an
mesg-
Nachricht, standardmäßig +$!+.
Siehe Kernel#warn.
Kernel#warn auf