URI::Generic (Class)

In: uri/generic.rb
Parent: Object

Methods

+   -   ==   absolute   absolute?   build   build2   coerce   component   component   default_port   default_port   fragment=   hierarchical?   host=   inspect   merge   merge!   new   normalize   normalize!   opaque=   password   password=   path=   port=   query=   registry=   relative?   route_from   route_to   scheme=   select   to_s   use_registry   user   user=   userinfo   userinfo=  

Constants

DEFAULT_PORT = nil
COMPONENT = [ :scheme, :userinfo, :host, :port, :registry, :path, :opaque, :query, :fragment
USE_REGISTRY = false

Attributes

fragment  [R] 
host  [R] 
opaque  [R] 
path  [R] 
port  [R] 
query  [R] 
registry  [R] 
scheme  [R] 

Included Modules

URI REGEXP

Public Class methods

[Source]

# File uri/generic.rb, line 35
    def self.default_port
      self::DEFAULT_PORT
    end

[Source]

# File uri/generic.rb, line 54
    def self.component
      self::COMPONENT
    end

[Source]

# File uri/generic.rb, line 63
    def self.use_registry
      self::USE_REGISTRY
    end

[Source]

# File uri/generic.rb, line 85
    def self.build2(args)
      begin
        return self.build(args)
      rescue InvalidComponentError
        if args.kind_of?(Array)
          return self.build(args.collect{|x| 
                              if x
                                URI.escape(x)
                              else
                                x
                              end
                            })
        elsif args.kind_of?(Hash)
          tmp = {}
          args.each do |key, value|
            tmp[key] = if value
                         URI.escape(value)
                       else
                         value
                       end
          end
          return self.build(tmp)
        end
      end
    end

[Source]

# File uri/generic.rb, line 111
    def self.build(args)
      if args.kind_of?(Array) &&
          args.size == ::URI::Generic::COMPONENT.size
        tmp = args
      elsif args.kind_of?(Hash)
        tmp = ::URI::Generic::COMPONENT.collect do |c|
          if args.include?(c)
            args[c]
          else
            nil
          end
        end
      else
        raise ArgumentError, 
          "expected Array of or Hash of components of #{self.class} (#{self.class.component.join(', ')})"
      end

      tmp << true
      return self.new(*tmp)
    end

[Source]

# File uri/generic.rb, line 132
    def initialize(scheme, 
                   userinfo, host, port, registry, 
                   path, opaque, 
                   query, 
                   fragment,
                   arg_check = false)
      @scheme = nil
      @user = nil
      @password = nil
      @host = nil
      @port = nil
      @path = nil
      @query = nil
      @opaque = nil
      @registry = nil
      @fragment = nil

      if arg_check
        self.scheme = scheme
        self.userinfo = userinfo
        self.host = host
        self.port = port
        self.path = path
        self.query = query
        self.opaque = opaque
        self.registry = registry
        self.fragment = fragment
      else
        self.set_scheme(scheme)
        self.set_userinfo(userinfo)
        self.set_host(host)
        self.set_port(port)
        self.set_path(path)
        self.set_query(query)
        self.set_opaque(opaque)
        self.set_registry(registry)
        self.set_fragment(fragment)
      end
      if @registry && !self.class.use_registry
        raise InvalidURIError, "the scheme #{@scheme} does not accept registry part: #{@registry} (or bad hostname?)"
      end
      
      @scheme.freeze if @scheme
      self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)

      self.set_port(self.default_port) if self.default_port && !@port
    end

Public Instance methods

[Source]

# File uri/generic.rb, line 39
    def default_port
      self.class.default_port
    end

[Source]

# File uri/generic.rb, line 210
    def component
      self.class.component
    end

[Source]

# File uri/generic.rb, line 243
    def scheme=(v)
      check_scheme(v)
      set_scheme(v)
      v
    end

[Source]

# File uri/generic.rb, line 313
    def userinfo=(userinfo)
      if userinfo.nil?
        return nil
      end
      check_userinfo(*userinfo)
      set_userinfo(*userinfo)
      userinfo
    end

[Source]

# File uri/generic.rb, line 322
    def user=(user)
      check_user(user)
      set_user(user)
      user
    end

[Source]

# File uri/generic.rb, line 328
    def password=(password)
      check_password(password)
      set_password(password)
      password
    end

[Source]

# File uri/generic.rb, line 377
    def userinfo
      if !@password
        @user
      else
        @user + ':' + @password
      end
    end

[Source]

# File uri/generic.rb, line 385
    def user
      @user
    end

[Source]

# File uri/generic.rb, line 389
    def password
      @password
    end

[Source]

# File uri/generic.rb, line 424
    def host=(v)
      check_host(v)
      set_host(v)
      v
    end

[Source]

# File uri/generic.rb, line 468
    def port=(v)
      check_port(v)
      set_port(v)
      port
    end

[Source]

# File uri/generic.rb, line 508
    def registry=(v)
      check_registry(v)
      set_registry(v)
      v
    end

[Source]

# File uri/generic.rb, line 555
    def path=(v)
      check_path(v)
      set_path(v)
      v
    end

[Source]

# File uri/generic.rb, line 597
    def query=(v)
      check_query(v)
      set_query(v)
      v
    end

[Source]

# File uri/generic.rb, line 637
    def opaque=(v)
      check_opaque(v)
      set_opaque(v)
      v
    end

[Source]

# File uri/generic.rb, line 671
    def fragment=(v)
      check_fragment(v)
      set_fragment(v)
      v
    end

[Source]

# File uri/generic.rb, line 682
    def hierarchical?
      if @path
        true
      else
        false
      end
    end

[Source]

# File uri/generic.rb, line 695
    def absolute?
      if @scheme
        true
      else
        false
      end
    end
absolute()

Alias for absolute?

[Source]

# File uri/generic.rb, line 709
    def relative?
      !absolute?
    end

[Source]

# File uri/generic.rb, line 784
    def merge!(oth)
      t = merge(oth)
      if self == t
        nil
      else
        replace!(t)
        self
      end
    end

abs(self) + rel(oth) => abs(new)

[Source]

# File uri/generic.rb, line 795
    def merge(oth)
      base, rel = merge0(oth)
      if base == rel
        return base
      end

      authority = rel.userinfo || rel.host || rel.port

      # RFC2396, Section 5.2, 2)

      if rel.path.empty? && !authority && !rel.query
        base.set_fragment(rel.fragment) if rel.fragment
        return base
      end

      base.set_query(nil)
      base.set_fragment(nil)

      # RFC2396, Section 5.2, 4)

      if !authority
        base.set_path(merge_path(base.path, rel.path))
      else
        # RFC2396, Section 5.2, 4)

        base.set_path(rel.path)
      end

      # RFC2396, Section 5.2, 7)

      base.set_userinfo(rel.userinfo) if rel.userinfo
      base.set_host(rel.host)         if rel.host
      base.set_port(rel.port)         if rel.port
      base.set_query(rel.query)       if rel.query
      base.set_fragment(rel.fragment) if rel.fragment

      return base
    end
+(oth)

Alias for merge

calculate relative path from oth to self

[Source]

# File uri/generic.rb, line 971
    def route_from(oth)
      # you can modify `rel', but can not `oth'.

      oth, rel = route_from0(oth)
      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
-(oth)

Alias for route_from

[Source]

# File uri/generic.rb, line 996
    def route_to(oth)
      case oth
      when Generic
      when String
        oth = URI.parse(oth)
      else
        raise ArgumentError,
          "bad argument(expected URI object or URI string)"
      end

      oth.route_from(self)
    end

[Source]

# File uri/generic.rb, line 1015
    def normalize
      uri = dup
      uri.normalize!
      uri
    end

[Source]

# File uri/generic.rb, line 1021
    def normalize!
      if path && path == ''
        set_path('/')
      end
      if host && host != host.downcase
        set_host(self.host.downcase)
      end       
    end

[Source]

# File uri/generic.rb, line 1044
    def to_s
      str = ''
      if @scheme
        str << @scheme
        str << ':'
      end

      if @opaque
        str << @opaque

      else
        if @registry
          str << @registry
        else
          if @host
            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
        end

        str << path_query
      end

      if @fragment
        str << '#'
        str << @fragment
      end

      str
    end

[Source]

# File uri/generic.rb, line 1090
    def ==(oth)
      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

[Source]

# File uri/generic.rb, line 1119
    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

[Source]

# File uri/generic.rb, line 1132
    def inspect
      sprintf("#<%s:0x%x URL:%s>", self.class.to_s, self.object_id, self.to_s)
    end

[Source]

# File uri/generic.rb, line 1138
    def coerce(oth)
      case oth
      when String
        oth = URI.parse(oth)
      else
        super
      end

      return oth, self
    end

[Validate]