class URI::Generic
Basisklasse für alle URI-Klassen. Implementiert die generische URI-Syntax gemäß RFC 2396.
Constants
- COMPONENT
-
Eine
Arrayder verfügbaren Komponenten fürURI::Generic. - DEFAULT_PORT
-
Ein Standardport von nil für
URI::Generic.
Attribute
Gibt die Fragmentkomponente der URI zurück.
URI("http://foo/bar/baz?search=FooBar#ponies").fragment #=> "ponies"
Gibt die Hostkomponente der URI zurück.
URI("http://foo/bar/baz").host #=> "foo"
Gibt nil zurück, wenn keine Hostkomponente vorhanden ist.
URI("mailto:foo@example.org").host #=> nil
Die Komponente enthält nicht die Portnummer.
URI("http://foo:8080/bar/baz").host #=> "foo"
Da IPv6-Adressen in URIs in Klammern eingeschlossen sind, gibt diese Methode IPv6-Adressen in Klammern zurück. Dieses Format ist nicht geeignet, um es an Socket-Methoden wie TCPSocket.open zu übergeben. Wenn ungeklammerte Hostnamen benötigt werden, verwenden Sie die Methode hostname.
URI("http://[::1]/bar/baz").host #=> "[::1]" URI("http://[::1]/bar/baz").hostname #=> "::1"
Gibt den opaken Teil der URI zurück.
URI("mailto:foo@example.org").opaque #=> "foo@example.org" URI("http://foo/bar/baz").opaque #=> nil
Der Teil des Pfades, der den Schrägstrich „/“ nicht verwendet. Der Pfad bezieht sich typischerweise auf einen absoluten Pfad oder einen opaken Teil. (Siehe RFC2396 Abschnitt 3 und 5.2.)
Gibt die Portkomponente der URI zurück.
URI("http://foo/bar/baz").port #=> 80 URI("http://foo:8080/bar/baz").port #=> 8080
Gibt die Query-Komponente der URI zurück.
URI("http://foo/bar/baz?search=FooBar").query #=> "search=FooBar"
Gibt die Scheme-Komponente der URI zurück.
URI("http://foo/bar/baz").scheme #=> "http"
Öffentliche Klassenmethoden
Source
# File lib/uri/generic.rb, line 116 def self.build(args) if args.kind_of?(Array) && args.size == ::URI::Generic::COMPONENT.size tmp = args.dup elsif args.kind_of?(Hash) tmp = ::URI::Generic::COMPONENT.collect do |c| if args.include?(c) args[c] else nil end end else component = self.component rescue ::URI::Generic::COMPONENT raise ArgumentError, "expected Array of or Hash of components of #{self} (#{component.join(', ')})" end tmp << nil tmp << true return self.new(*tmp) end
Zusammenfassung
Siehe ::new.
Beschreibung
Erzeugt eine neue URI::Generic-Instanz aus Komponenten von URI::Generic mit Überprüfung. Komponenten sind: scheme, userinfo, host, port, registry, path, opaque, query und fragment. Sie können Argumente entweder als Array oder als Hash übergeben. Sehen Sie ::new für die zu verwendenden Hash-Schlüssel oder die Reihenfolge der Array-Elemente.
Source
# File lib/uri/generic.rb, line 78 def self.build2(args) begin return self.build(args) rescue InvalidComponentError if args.kind_of?(Array) return self.build(args.collect{|x| if x.is_a?(String) URI::RFC2396_PARSER.escape(x) else x end }) elsif args.kind_of?(Hash) tmp = {} args.each do |key, value| tmp[key] = if value URI::RFC2396_PARSER.escape(value) else value end end return self.build(tmp) end end end
Zusammenfassung
Siehe ::new.
Beschreibung
Versucht zunächst, eine neue URI::Generic-Instanz mithilfe von URI::Generic::build zu erstellen. Wenn jedoch die Ausnahme URI::InvalidComponentError ausgelöst wird, werden alle URI-Komponenten mit URI::RFC2396_PARSER.escape behandelt und ein erneuter Versuch gestartet.
Source
# File lib/uri/generic.rb, line 57 def self.component self::COMPONENT end
Komponenten der URI in der Reihenfolge.
Source
# File lib/uri/generic.rb, line 32 def self.default_port self::DEFAULT_PORT end
Gibt den Standardport zurück.
Source
# File lib/uri/generic.rb, line 169 def initialize(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser = DEFAULT_PARSER, arg_check = false) @scheme = nil @user = nil @password = nil @host = nil @port = nil @path = nil @query = nil @opaque = nil @fragment = nil @parser = parser == DEFAULT_PARSER ? nil : parser if arg_check self.scheme = scheme self.hostname = host self.port = port self.userinfo = userinfo self.path = path self.query = query self.opaque = opaque self.fragment = fragment else self.set_scheme(scheme) self.set_host(host) self.set_port(port) self.set_userinfo(userinfo) self.set_path(path) self.query = query self.set_opaque(opaque) self.fragment=(fragment) end if registry raise InvalidURIError, "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)" end @scheme&.freeze self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2) self.set_port(self.default_port) if self.default_port && !@port end
Args
scheme-
Protokoll-Schema, z.B. „http“, „ftp“, „mailto“ und so weiter.
userinfo-
Benutzername und Passwort, z.B. „sdmitry:bla“.
host-
Server-Hostname.
port-
Server-Port.
registry-
Registry von Namensautoritäten.
path-
Pfad auf dem Server.
opaque-
Opaker Teil.
query-
Query-Daten.
fragment-
Teil der
URInach dem „#“-Zeichen. parser-
Parser für interne Verwendung (standardmäßig URI::DEFAULT_PARSER).
arg_check-
Argumente prüfen (standardmäßig false).
Beschreibung
Erzeugt eine neue URI::Generic-Instanz aus „generischen“ Komponenten ohne Überprüfung.
Öffentliche Instanzmethoden
Source
# File lib/uri/generic.rb, line 1399 def ==(oth) if self.class == oth.class self.normalize.component_ary == oth.normalize.component_ary else false end end
Vergleicht zwei URIs.
Source
# File lib/uri/generic.rb, line 987 def absolute? if @scheme true else false end end
Gibt true zurück, wenn die URI ein Schema (z.B. http:// oder https://) angegeben hat.
Source
# File lib/uri/generic.rb, line 1478 def coerce(oth) case oth when String oth = parser.parse(oth) else super end return oth, self end
Args
Beschreibung
Versucht, die andere URI oth zu parsen, und gibt [parsed_oth, self] zurück.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.coerce("http://foo.com") #=> [#<URI::HTTP http://foo.com>, #<URI::HTTP http://my.example.com>]
Source
# File lib/uri/generic.rb, line 313 def component self.class.component end
Komponenten der URI in der Reihenfolge.
Source
# File lib/uri/generic.rb, line 589 def decoded_password URI.decode_uri_component(@password) if @password end
Gibt die Passwortkomponente nach URI-Dekodierung zurück.
Source
# File lib/uri/generic.rb, line 584 def decoded_user URI.decode_uri_component(@user) if @user end
Gibt die Benutzerkomponente nach URI-Dekodierung zurück.
Source
# File lib/uri/generic.rb, line 39 def default_port self.class.default_port end
Gibt den Standardport zurück.
Source
# File lib/uri/generic.rb, line 1413 def eql?(oth) self.class == oth.class && parser == oth.parser && self.component_ary.eql?(oth.component_ary) end
Vergleicht mit oth für Hash.
Source
# File lib/uri/generic.rb, line 1504 def find_proxy(env=ENV) raise BadURIError, "relative URI: #{self}" if self.relative? name = self.scheme.downcase + '_proxy' proxy_uri = nil if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI? # HTTP_PROXY conflicts with *_proxy for proxy settings and # HTTP_* for header information in CGI. # So it should be careful to use it. pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k } case pairs.length when 0 # no proxy setting anyway. proxy_uri = nil when 1 k, _ = pairs.shift if k == 'http_proxy' && env[k.upcase] == nil # http_proxy is safe to use because ENV is case sensitive. proxy_uri = env[name] else proxy_uri = nil end else # http_proxy is safe to use because ENV is case sensitive. proxy_uri = env.to_hash[name] end if !proxy_uri # Use CGI_HTTP_PROXY. cf. libwww-perl. proxy_uri = env["CGI_#{name.upcase}"] end elsif name == 'http_proxy' if RUBY_ENGINE == 'jruby' && p_addr = ENV_JAVA['http.proxyHost'] p_port = ENV_JAVA['http.proxyPort'] if p_user = ENV_JAVA['http.proxyUser'] p_pass = ENV_JAVA['http.proxyPass'] proxy_uri = "http://#{p_user}:#{p_pass}@#{p_addr}:#{p_port}" else proxy_uri = "http://#{p_addr}:#{p_port}" end else unless proxy_uri = env[name] if proxy_uri = env[name.upcase] warn 'The environment variable HTTP_PROXY is discouraged. Please use http_proxy instead.', uplevel: 1 end end end else proxy_uri = env[name] || env[name.upcase] end if proxy_uri.nil? || proxy_uri.empty? return nil end if self.hostname begin addr = IPSocket.getaddress(self.hostname) return nil if /\A127\.|\A::1\z/ =~ addr rescue SocketError end end name = 'no_proxy' if no_proxy = env[name] || env[name.upcase] return nil unless URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy) end URI.parse(proxy_uri) end
Gibt eine Proxy-URI zurück. Die Proxy-URI wird aus Umgebungsvariablen wie http_proxy, ftp_proxy, no_proxy usw. bezogen. Wenn kein geeigneter Proxy vorhanden ist, wird nil zurückgegeben.
Wenn der optionale Parameter env angegeben ist, wird er anstelle von ENV verwendet.
Beachten Sie, dass auch großgeschriebene Variablen (HTTP_PROXY, FTP_PROXY, NO_PROXY usw.) untersucht werden.
Aber http_proxy und HTTP_PROXY werden unter der CGI-Umgebung speziell behandelt. Da HTTP_PROXY durch den Proxy: Header gesetzt werden kann. Daher wird HTTP_PROXY nicht verwendet. http_proxy wird ebenfalls nicht verwendet, wenn die Variable case-insensiv ist. CGI_HTTP_PROXY kann stattdessen verwendet werden.
Source
# File lib/uri/generic.rb, line 944 def fragment=(v) return @fragment = nil unless v x = v.to_str v = x.dup if x.equal? v v.encode!(Encoding::UTF_8) rescue nil v.delete!("\t\r\n") v.force_encoding(Encoding::ASCII_8BIT) v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord} v.force_encoding(Encoding::US_ASCII) @fragment = v end
Prüft die Fragmentkomponente v gegen den parser Regexp für :FRAGMENT.
Args
v
Beschreibung
Öffentlicher Setter für die Fragmentkomponente v (mit Validierung).
Verwendung
require 'uri' uri = URI.parse("http://my.example.com/?id=25#time=1305212049") uri.fragment = "time=1305212086" uri.to_s #=> "http://my.example.com/?id=25#time=1305212086"
Source
# File lib/uri/generic.rb, line 1408 def hash self.component_ary.hash end
Gibt den Hash-Wert zurück.
Source
# File lib/uri/generic.rb, line 976 def hierarchical? if @path true else false end end
Gibt true zurück, wenn die URI hierarchisch ist.
Beschreibung
URI hat Komponenten, die von links nach rechts in absteigender Reihenfolge der Bedeutung aufgeführt sind, siehe RFC3986 www.rfc-editor.org/rfc/rfc3986 1.2.3.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com/") uri.hierarchical? #=> true uri = URI.parse("mailto:joe@example.com") uri.hierarchical? #=> false
Source
# File lib/uri/generic.rb, line 652 def host=(v) check_host(v) set_host(v) set_userinfo(nil) v end
Args
v
Beschreibung
Öffentlicher Setter für die Hostkomponente v (mit Validierung).
Siehe auch URI::Generic.check_host.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.host = "foo.com" uri.to_s #=> "http://foo.com"
Source
# File lib/uri/generic.rb, line 668 def hostname v = self.host v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v end
Extrahiert den Hostteil der URI und entfernt Klammern für IPv6-Adressen.
Diese Methode ist dieselbe wie URI::Generic#host, außer dass Klammern für IPv6 (und zukünftige IP)-Adressen entfernt werden.
uri = URI("http://[::1]/bar") uri.hostname #=> "::1" uri.host #=> "[::1]"
Source
# File lib/uri/generic.rb, line 685 def hostname=(v) v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':') self.host = v end
Setzt den Hostteil der URI als das Argument mit Klammern für IPv6-Adressen.
Diese Methode ist dieselbe wie URI::Generic#host=, außer dass das Argument eine reine IPv6-Adresse sein kann.
uri = URI("http://foo/bar") uri.hostname = "::1" uri.to_s #=> "http://[::1]/bar"
Wenn das Argument wie eine IPv6-Adresse aussieht, wird es in Klammern gesetzt.
Source
# File lib/uri/generic.rb, line 1124 def merge(oth) rel = parser.__send__(:convert_to_uri, oth) if rel.absolute? #raise BadURIError, "both URI are absolute" if absolute? # hmm... should return oth for usability? return rel end unless self.absolute? raise BadURIError, "both URI are relative" end base = self.dup authority = rel.authority # RFC2396, Section 5.2, 2) if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query base.fragment=(rel.fragment) if rel.fragment return base end base.query = nil base.fragment=(nil) # RFC2396, Section 5.2, 4) if authority base.set_authority(*authority) base.set_path(rel.path) elsif base.path && rel.path base.set_path(merge_path(base.path, rel.path)) end # RFC2396, Section 5.2, 7) base.query = rel.query if rel.query base.fragment=(rel.fragment) if rel.fragment return base end
Args
Beschreibung
Fügt zwei URIs zusammen.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.merge("/main.rbx?page=1") # => "http://my.example.com/main.rbx?page=1"
Source
# File lib/uri/generic.rb, line 1096 def merge!(oth) t = merge(oth) if self == t nil else replace!(t) self end end
Args
Beschreibung
Destruktive Form von merge.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.merge!("/main.rbx?page=1") uri.to_s # => "http://my.example.com/main.rbx?page=1"
Source
# File lib/uri/generic.rb, line 1331 def normalize uri = dup uri.normalize! uri end
Gibt eine normalisierte URI zurück.
require 'uri' URI("HTTP://my.EXAMPLE.com").normalize #=> #<URI::HTTP http://my.example.com/>
Normalisierung bedeutet hier:
-
Scheme und Host werden in Kleinbuchstaben umgewandelt,
-
eine leere Pfadkomponente wird auf „/“ gesetzt.
Source
# File lib/uri/generic.rb, line 1340 def normalize! if path&.empty? set_path('/') end if scheme && scheme != scheme.downcase set_scheme(self.scheme.downcase) end if host && host != host.downcase set_host(self.host.downcase) end end
Destruktive Version von normalize.
Source
# File lib/uri/generic.rb, line 916 def opaque=(v) check_opaque(v) set_opaque(v) v end
Args
v
Beschreibung
Öffentlicher Setter für die opake Komponente v (mit Validierung).
Siehe auch URI::Generic.check_opaque.
Source
# File lib/uri/generic.rb, line 289 def parser if !defined?(@parser) || !@parser DEFAULT_PARSER else @parser || DEFAULT_PARSER end end
Gibt den zu verwendenden Parser zurück.
Wenn der parser nicht definiert ist, wird DEFAULT_PARSER verwendet.
Source
# File lib/uri/generic.rb, line 573 def password @password end
Gibt die Passwortkomponente zurück (ohne URI-Dekodierung).
Source
# File lib/uri/generic.rb, line 498 def password=(password) check_password(password) set_password(password) # returns password end
Args
v
Beschreibung
Öffentlicher Setter für die password-Komponente (mit Validierung).
Siehe auch URI::Generic.check_password.
Verwendung
require 'uri' uri = URI.parse("http://john:S3nsit1ve@my.example.com") uri.password = "V3ry_S3nsit1ve" uri.to_s #=> "http://john:V3ry_S3nsit1ve@my.example.com"
Source
# File lib/uri/generic.rb, line 830 def path=(v) check_path(v) set_path(v) v end
Args
v
Beschreibung
Öffentlicher Setter für die Pfadkomponente v (mit Validierung).
Siehe auch URI::Generic.check_path.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com/pub/files") uri.path = "/faq/" uri.to_s #=> "http://my.example.com/faq/"
Source
# File lib/uri/generic.rb, line 743 def port=(v) check_port(v) set_port(v) set_userinfo(nil) port end
Args
v
Beschreibung
Öffentlicher Setter für die Portkomponente v (mit Validierung).
Siehe auch URI::Generic.check_port.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.port = 8080 uri.to_s #=> "http://my.example.com:8080"
Source
# File lib/uri/generic.rb, line 854 def query=(v) return @query = nil unless v raise InvalidURIError, "query conflicts with opaque" if @opaque x = v.to_str v = x.dup if x.equal? v v.encode!(Encoding::UTF_8) rescue nil v.delete!("\t\r\n") v.force_encoding(Encoding::ASCII_8BIT) raise InvalidURIError, "invalid percent escape: #{$1}" if /(%\H\H)/n.match(v) v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord} v.force_encoding(Encoding::US_ASCII) @query = v end
Args
v
Beschreibung
Öffentlicher Setter für die Query-Komponente v.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com/?id=25") uri.query = "id=1" uri.to_s #=> "http://my.example.com/?id=1"
Source
# File lib/uri/generic.rb, line 999 def relative? !absolute? end
Gibt true zurück, wenn die URI kein Schema (z.B. http:// oder https://) angegeben hat.
Source
# File lib/uri/generic.rb, line 1274 def route_from(oth) # you can modify `rel', but cannot `oth'. begin oth, rel = route_from0(oth) rescue raise $!.class, $!.message end if oth == rel return rel end rel.set_path(route_from_path(oth.path, self.path)) if rel.path == './' && self.query # "./?foo" -> "?foo" rel.set_path('') end return rel end
Args
Beschreibung
Berechnet den relativen Pfad von oth zu self.
Verwendung
require 'uri' uri = URI.parse('http://my.example.com/main.rbx?page=1') uri.route_from('http://my.example.com') #=> #<URI::Generic /main.rbx?page=1>
Source
# File lib/uri/generic.rb, line 1314 def route_to(oth) parser.__send__(:convert_to_uri, oth).route_from(self) end
Args
Beschreibung
Berechnet den relativen Pfad zu oth von self.
Verwendung
require 'uri' uri = URI.parse('http://my.example.com') uri.route_to('http://my.example.com/main.rbx?page=1') #=> #<URI::Generic /main.rbx?page=1>
Source
# File lib/uri/generic.rb, line 360 def scheme=(v) check_scheme(v) set_scheme(v) v end
Args
v
Beschreibung
Öffentlicher Setter für die Scheme-Komponente v (mit Validierung).
Siehe auch URI::Generic.check_scheme.
Verwendung
require 'uri' uri = URI.parse("http://my.example.com") uri.scheme = "https" uri.to_s #=> "https://my.example.com"
Source
# File lib/uri/generic.rb, line 1444 def select(*components) components.collect do |c| if component.include?(c) self.__send__(c) else raise ArgumentError, "expected of components of #{self.class} (#{self.class.component.join(', ')})" end end end
Args
Beschreibung
Wählt die angegebenen Komponenten aus der URI aus.
Verwendung
require 'uri' uri = URI.parse('http://myuser:mypass@my.example.com/test.rbx') uri.select(:userinfo, :host, :path) # => ["myuser:mypass", "my.example.com", "/test.rbx"]
Source
# File lib/uri/generic.rb, line 1355 def to_s str = ''.dup if @scheme str << @scheme str << ':' end if @opaque str << @opaque else if @host || %w[file postgres].include?(@scheme) str << '//' end if self.userinfo str << self.userinfo str << '@' end if @host str << @host end if @port && @port != self.default_port str << ':' str << @port.to_s end if (@host || @port) && !@path.empty? && !@path.start_with?('/') str << '/' end str << @path if @query str << '?' str << @query end end if @fragment str << '#' str << @fragment end str end
Source
# File lib/uri/generic.rb, line 568 def user @user end
Gibt die Benutzerkomponente zurück (ohne URI-Dekodierung).
Source
# File lib/uri/generic.rb, line 471 def user=(user) check_user(user) set_user(user) # returns user end
Args
v
Beschreibung
Öffentlicher Setter für die user-Komponente (mit Validierung).
Siehe auch URI::Generic.check_user.
Verwendung
require 'uri' uri = URI.parse("http://john:S3nsit1ve@my.example.com") uri.user = "sam" uri.to_s #=> "http://sam@my.example.com"
Source
# File lib/uri/generic.rb, line 557 def userinfo if @user.nil? nil elsif @password.nil? @user else @user + ':' + @password end end
Gibt die Benutzerinformationen zurück, entweder als „user“ oder als „user:password“.
Source
# File lib/uri/generic.rb, line 441 def userinfo=(userinfo) if userinfo.nil? return nil end check_userinfo(*userinfo) set_userinfo(*userinfo) # returns userinfo end
Setzt die Benutzerinformationen, Argument ist ein String wie „name:pass“.
Geschützte Instanzmethoden
Source
# File lib/uri/generic.rb, line 1420 def component_ary component.collect do |x| self.__send__(x) end end
Source
# File lib/uri/generic.rb, line 619 def set_host(v) @host = v end
Geschützter Setter für die Hostkomponente v.
Siehe auch URI::Generic.host=.
Source
# File lib/uri/generic.rb, line 898 def set_opaque(v) @opaque = v end
Geschützter Setter für die opake Komponente v.
Siehe auch URI::Generic.opaque=.
Source
# File lib/uri/generic.rb, line 534 def set_password(v) @password = v # returns v end
Geschützter Setter für die Passwortkomponente v.
Siehe auch URI::Generic.password=.
Source
# File lib/uri/generic.rb, line 804 def set_path(v) @path = v end
Geschützter Setter für die Pfadkomponente v.
Siehe auch URI::Generic.path=.
Source
# File lib/uri/generic.rb, line 716 def set_port(v) v = v.empty? ? nil : v.to_i unless !v || v.kind_of?(Integer) @port = v end
Geschützter Setter für die Portkomponente v.
Siehe auch URI::Generic.port=.
Source
# File lib/uri/generic.rb, line 334 def set_scheme(v) @scheme = v&.downcase end
Geschützter Setter für die Scheme-Komponente v.
Siehe auch URI::Generic.scheme=.
Source
# File lib/uri/generic.rb, line 524 def set_user(v) set_userinfo(v, nil) v end
Geschützter Setter für die Benutzerkomponente v.
Siehe auch URI::Generic.user=.
Source
# File lib/uri/generic.rb, line 509 def set_userinfo(user, password = nil) unless password user, password = split_userinfo(user) end @user = user @password = password [@user, @password] end
Geschützter Setter für die user-Komponente und password, falls verfügbar (mit Validierung).
Siehe auch URI::Generic.userinfo=.
Private Instanzmethoden
Source
# File lib/uri/generic.rb, line 600 def check_host(v) return v unless v if @opaque raise InvalidURIError, "cannot set host with registry or opaque" elsif parser.regexp[:HOST] !~ v raise InvalidComponentError, "bad component(expected host component): #{v}" end return true end
Prüft die Hostkomponente v auf RFC2396-Konformität und gegen den parser Regexp für :HOST.
Kann keine Registry- oder opake Komponente definiert haben, wenn eine Hostkomponente definiert ist.
Source
# File lib/uri/generic.rb, line 876 def check_opaque(v) return v unless v # raise if both hier and opaque are not nil, because: # absoluteURI = scheme ":" ( hier_part | opaque_part ) # hier_part = ( net_path | abs_path ) [ "?" query ] if @host || @port || @user || @path # userinfo = @user + ':' + @password raise InvalidURIError, "cannot set opaque with host, port, userinfo or path" elsif v && parser.regexp[:OPAQUE] !~ v raise InvalidComponentError, "bad component(expected opaque component): #{v}" end return true end
Prüft die opake Komponente v auf RFC2396-Konformität und gegen den parser Regexp für :OPAQUE.
Kann keine Host-, Port-, Benutzer- oder Pfadkomponente definiert haben, wenn eine opake Komponente definiert ist.
Source
# File lib/uri/generic.rb, line 417 def check_password(v, user = @user) if @opaque raise InvalidURIError, "cannot set password with opaque" end return v unless v if !user raise InvalidURIError, "password component depends user component" end if parser.regexp[:USERINFO] !~ v raise InvalidComponentError, "bad password component" end return true end
Prüft die Passwortkomponente v auf RFC2396-Konformität und gegen den parser Regexp für :USERINFO.
Kann keine Registry- oder opake Komponente definiert haben, wenn eine Benutzerkomponente definiert ist.
Source
# File lib/uri/generic.rb, line 772 def check_path(v) # raise if both hier and opaque are not nil, because: # absoluteURI = scheme ":" ( hier_part | opaque_part ) # hier_part = ( net_path | abs_path ) [ "?" query ] if v && @opaque raise InvalidURIError, "path conflicts with opaque" end # If scheme is ftp, path may be relative. # See RFC 1738 section 3.2.2, and RFC 2396. if @scheme && @scheme != "ftp" if v && v != '' && parser.regexp[:ABS_PATH] !~ v raise InvalidComponentError, "bad component(expected absolute path component): #{v}" end else if v && v != '' && parser.regexp[:ABS_PATH] !~ v && parser.regexp[:REL_PATH] !~ v raise InvalidComponentError, "bad component(expected relative path component): #{v}" end end return true end
Prüft die Pfadkomponente v auf RFC2396-Konformität und gegen den parser Regexp für :ABS_PATH und :REL_PATH.
Kann keine opake Komponente definiert haben, wenn eine Pfadkomponente definiert ist.
Source
# File lib/uri/generic.rb, line 697 def check_port(v) return v unless v if @opaque raise InvalidURIError, "cannot set port with registry or opaque" elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v raise InvalidComponentError, "bad component(expected port component): #{v.inspect}" end return true end
Prüft die Portkomponente v auf RFC2396-Konformität und gegen den parser Regexp für :PORT.
Kann keine Registry- oder opake Komponente definiert haben, wenn eine Portkomponente definiert ist.
Source
# File lib/uri/generic.rb, line 320 def check_scheme(v) if v && parser.regexp[:SCHEME] !~ v raise InvalidComponentError, "bad component(expected scheme component): #{v}" end return true end
Prüft die Scheme-Komponente v gegen den parser Regexp für :SCHEME.
Source
# File lib/uri/generic.rb, line 393 def check_user(v) if @opaque raise InvalidURIError, "cannot set user with opaque" end return v unless v if parser.regexp[:USERINFO] !~ v raise InvalidComponentError, "bad component(expected userinfo component or user component): #{v}" end return true end
Prüft die Benutzerkomponente v auf RFC2396-Konformität und gegen den parser Regexp für :USERINFO.
Kann keine Registry- oder opake Komponente definiert haben, wenn eine Benutzerkomponente definiert ist.
Source
# File lib/uri/generic.rb, line 375 def check_userinfo(user, password = nil) if !password user, password = split_userinfo(user) end check_user(user) check_password(password, user) return true end
Prüft den user und das password.
Wenn password nicht angegeben ist, wird user mithilfe von URI::Generic.split_userinfo aufgeteilt, um user und +password zu extrahieren.
Siehe auch URI::Generic.check_user, URI::Generic.check_password.
Source
# File lib/uri/generic.rb, line 551 def escape_userpass(v) parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/ end
Escaped „user:password“ v basierend auf RFC 1738 Abschnitt 3.1.
Source
# File lib/uri/generic.rb, line 1015 def merge_path(base, rel) # RFC2396, Section 5.2, 5) # RFC2396, Section 5.2, 6) base_path = split_path(base) rel_path = split_path(rel) # RFC2396, Section 5.2, 6), a) base_path << '' if base_path.last == '..' while i = base_path.index('..') base_path.slice!(i - 1, 2) end if (first = rel_path.first) and first.empty? base_path.clear rel_path.shift end # RFC2396, Section 5.2, 6), c) # RFC2396, Section 5.2, 6), d) rel_path.push('') if rel_path.last == '.' || rel_path.last == '..' rel_path.delete('.') # RFC2396, Section 5.2, 6), e) tmp = [] rel_path.each do |x| if x == '..' && !(tmp.empty? || tmp.last == '..') tmp.pop else tmp << x end end add_trailer_slash = !tmp.empty? if base_path.empty? base_path = [''] # keep '/' for root directory elsif add_trailer_slash base_path.pop end while x = tmp.shift if x == '..' # RFC2396, Section 4 # a .. or . in an absolute path has no special meaning base_path.pop if base_path.size > 1 else # if x == '..' # valid absolute (but abnormal) path "/../..." # else # valid absolute path # end base_path << x tmp.each {|t| base_path << t} add_trailer_slash = false break end end base_path.push('') if add_trailer_slash return base_path.join('/') end
Fügt einen Basis-Pfad base mit einem relativen Pfad rel zusammen und gibt einen modifizierten Basis-Pfad zurück.
Source
# File lib/uri/generic.rb, line 299 def replace!(oth) if self.class != oth.class raise ArgumentError, "expected #{self.class} object" end component.each do |c| self.__send__("#{c}=", oth.__send__(c)) end end
Ersetzt self durch ein anderes URI-Objekt.
Source
# File lib/uri/generic.rb, line 1006 def split_path(path) path.split("/", -1) end
Gibt ein Array des auf „/“ aufgeteilten Pfades zurück.
Source
# File lib/uri/generic.rb, line 542 def split_userinfo(ui) return nil, nil unless ui user, password = ui.split(':', 2) return user, password end
Gibt die Benutzerinformationen ui als [user, password] zurück, wenn sie ordnungsgemäß als „user:password“ formatiert sind.