# 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

default_port()

[Source]

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

component()

[Source]

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

use_registry()

[Source]

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

build2(args)

[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

build(args)

[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

new(scheme, userinfo, host, port, registry, path, opaque, query, fragment, arg_check = false)

[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

default_port()

[Source]

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

component()

[Source]

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

scheme=(v)

[Source]

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

userinfo=(userinfo)

[Source]

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

user=(user)

[Source]

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

password=(password)

[Source]

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

userinfo()

[Source]

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

user()

[Source]

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

password()

[Source]

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

host=(v)

[Source]

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

port=(v)

[Source]

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

registry=(v)

[Source]

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

path=(v)

[Source]

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

query=(v)

[Source]

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

opaque=(v)

[Source]

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

fragment=(v)

[Source]

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

hierarchical?()

[Source]

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

absolute?()

[Source]

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

absolute()

Alias for absolute?

relative?()

[Source]

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

merge!(oth)

[Source]

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

merge(oth)

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

route_from(oth)

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

route_to(oth)

[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

normalize()

[Source]

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

normalize!()

[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

to_s()

[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

==(oth)

[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

select(*components)

[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

inspect()

[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

coerce(oth)

[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]