addressable 2.3.4 → 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of addressable might be problematic. Click here for more details.
- checksums.yaml +7 -0
 - data/CHANGELOG.md +6 -0
 - data/Gemfile +1 -0
 - data/README.md +10 -3
 - data/lib/addressable/idna.rb +1 -1
 - data/lib/addressable/idna/native.rb +1 -1
 - data/lib/addressable/idna/pure.rb +1 -1
 - data/lib/addressable/template.rb +2 -1
 - data/lib/addressable/uri.rb +62 -12
 - data/lib/addressable/version.rb +2 -2
 - data/spec/addressable/idna_spec.rb +3 -1
 - data/spec/addressable/net_http_compat_spec.rb +3 -1
 - data/spec/addressable/template_spec.rb +57 -1
 - data/spec/addressable/uri_spec.rb +159 -19
 - data/spec/spec_helper.rb +2 -0
 - metadata +17 -28
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7469c2a80add393372ae8c44de978834410a65fc
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ff31775eb9800b5aa84260a06c7fb6b6c93c855e
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d0542072bdbf9520eed193aa4b8fddb95bd8869662ec23566529bb6ecf9688ccaba3dd4b77bdcea889862d7947a71b9bf4770dbc6eb872cc84b976f781bfd5f2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 39ca65c92ecdc6d4891c794e56876e7a3923182c1de78691c9e0b794eea0d93ffe100766706825a5abefd911ac3f392687992eb04de9bbfd44d33b428fb2d6d4
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Addressable 2.3.5
         
     | 
| 
      
 2 
     | 
    
         
            +
            - added Addressable::URI#empty? method
         
     | 
| 
      
 3 
     | 
    
         
            +
            - Addressable::URI#hostname methods now strip square brackets from IPv6 hosts
         
     | 
| 
      
 4 
     | 
    
         
            +
            - compatibility with Net::HTTP in Ruby 2.0.0
         
     | 
| 
      
 5 
     | 
    
         
            +
            - Addressable::URI#route_from should always give relative URIs
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       1 
7 
     | 
    
         
             
            # Addressable 2.3.4
         
     | 
| 
       2 
8 
     | 
    
         
             
            - fixed issue with encoding altering its inputs
         
     | 
| 
       3 
9 
     | 
    
         
             
            - query string normalization now leaves ';' characters alone
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -3,12 +3,19 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            <dl>
         
     | 
| 
       4 
4 
     | 
    
         
             
              <dt>Homepage</dt><dd><a href="http://addressable.rubyforge.org/">addressable.rubyforge.org</a></dd>
         
     | 
| 
       5 
5 
     | 
    
         
             
              <dt>Author</dt><dd><a href="mailto:bob@sporkmonger.com">Bob Aman</a></dd>
         
     | 
| 
       6 
     | 
    
         
            -
              <dt>Copyright</dt><dd>Copyright ©  
     | 
| 
      
 6 
     | 
    
         
            +
              <dt>Copyright</dt><dd>Copyright © 2006-2013 Bob Aman</dd>
         
     | 
| 
       7 
7 
     | 
    
         
             
              <dt>License</dt><dd>Apache 2.0</dd>
         
     | 
| 
       8 
8 
     | 
    
         
             
            </dl>
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            [][gem]
         
     | 
| 
      
 11 
     | 
    
         
            +
            [][travis]
         
     | 
| 
      
 12 
     | 
    
         
            +
            [][gemnasium]
         
     | 
| 
      
 13 
     | 
    
         
            +
            [][coveralls]
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            [gem]: https://rubygems.org/gems/addressable
         
     | 
| 
      
 16 
     | 
    
         
            +
            [travis]: http://travis-ci.org/sporkmonger/addressable
         
     | 
| 
      
 17 
     | 
    
         
            +
            [gemnasium]: https://gemnasium.com/sporkmonger/addressable
         
     | 
| 
      
 18 
     | 
    
         
            +
            [coveralls]: https://coveralls.io/r/sporkmonger/addressable
         
     | 
| 
       12 
19 
     | 
    
         | 
| 
       13 
20 
     | 
    
         
             
            # Description
         
     | 
| 
       14 
21 
     | 
    
         | 
    
        data/lib/addressable/idna.rb
    CHANGED
    
    
    
        data/lib/addressable/template.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding:utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            #--
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
6 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -487,6 +487,7 @@ module Addressable 
     | 
|
| 
       487 
487 
     | 
    
         
             
                #   #=> "http://example.com/?one=1{&two}&three=3"
         
     | 
| 
       488 
488 
     | 
    
         
             
                def partial_expand(mapping, processor=nil)
         
     | 
| 
       489 
489 
     | 
    
         
             
                  result = self.pattern.dup
         
     | 
| 
      
 490 
     | 
    
         
            +
                  mapping = normalize_keys(mapping)
         
     | 
| 
       490 
491 
     | 
    
         
             
                  result.gsub!( EXPRESSION ) do |capture|
         
     | 
| 
       491 
492 
     | 
    
         
             
                    transform_partial_capture(mapping, capture, processor)
         
     | 
| 
       492 
493 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/addressable/uri.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding:utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            #--
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
6 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -1089,12 +1089,32 @@ module Addressable 
     | 
|
| 
       1089 
1089 
     | 
    
         
             
                end
         
     | 
| 
       1090 
1090 
     | 
    
         | 
| 
       1091 
1091 
     | 
    
         
             
                ##
         
     | 
| 
      
 1092 
     | 
    
         
            +
                # This method is same as URI::Generic#host except
         
     | 
| 
      
 1093 
     | 
    
         
            +
                # brackets for IPv6 (and 'IPvFuture') addresses are removed.
         
     | 
| 
      
 1094 
     | 
    
         
            +
                #
         
     | 
| 
       1092 
1095 
     | 
    
         
             
                # @see Addressable::URI#host
         
     | 
| 
       1093 
     | 
    
         
            -
                 
     | 
| 
      
 1096 
     | 
    
         
            +
                #
         
     | 
| 
      
 1097 
     | 
    
         
            +
                # @return [String] The hostname for this URI.
         
     | 
| 
      
 1098 
     | 
    
         
            +
                def hostname
         
     | 
| 
      
 1099 
     | 
    
         
            +
                  v = self.host
         
     | 
| 
      
 1100 
     | 
    
         
            +
                  /\A\[(.*)\]\z/ =~ v ? $1 : v
         
     | 
| 
      
 1101 
     | 
    
         
            +
                end
         
     | 
| 
       1094 
1102 
     | 
    
         | 
| 
       1095 
1103 
     | 
    
         
             
                ##
         
     | 
| 
      
 1104 
     | 
    
         
            +
                # This method is same as URI::Generic#host= except
         
     | 
| 
      
 1105 
     | 
    
         
            +
                # the argument can be a bare IPv6 address (or 'IPvFuture').
         
     | 
| 
      
 1106 
     | 
    
         
            +
                #
         
     | 
| 
       1096 
1107 
     | 
    
         
             
                # @see Addressable::URI#host=
         
     | 
| 
       1097 
     | 
    
         
            -
                 
     | 
| 
      
 1108 
     | 
    
         
            +
                #
         
     | 
| 
      
 1109 
     | 
    
         
            +
                # @param [String, #to_str] new_hostname The new hostname for this URI.
         
     | 
| 
      
 1110 
     | 
    
         
            +
                def hostname=(new_hostname)
         
     | 
| 
      
 1111 
     | 
    
         
            +
                  if new_hostname && !new_hostname.respond_to?(:to_str)
         
     | 
| 
      
 1112 
     | 
    
         
            +
                    raise TypeError, "Can't convert #{new_hostname.class} into String."
         
     | 
| 
      
 1113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1114 
     | 
    
         
            +
                  v = new_hostname ? new_hostname.to_str : nil
         
     | 
| 
      
 1115 
     | 
    
         
            +
                  v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
         
     | 
| 
      
 1116 
     | 
    
         
            +
                  self.host = v
         
     | 
| 
      
 1117 
     | 
    
         
            +
                end
         
     | 
| 
       1098 
1118 
     | 
    
         | 
| 
       1099 
1119 
     | 
    
         
             
                ##
         
     | 
| 
       1100 
1120 
     | 
    
         
             
                # The authority component for this URI.
         
     | 
| 
         @@ -1175,7 +1195,7 @@ module Addressable 
     | 
|
| 
       1175 
1195 
     | 
    
         | 
| 
       1176 
1196 
     | 
    
         
             
                ##
         
     | 
| 
       1177 
1197 
     | 
    
         
             
                # The origin for this URI, serialized to ASCII, as per
         
     | 
| 
       1178 
     | 
    
         
            -
                #  
     | 
| 
      
 1198 
     | 
    
         
            +
                # RFC 6454, section 6.2.
         
     | 
| 
       1179 
1199 
     | 
    
         
             
                #
         
     | 
| 
       1180 
1200 
     | 
    
         
             
                # @return [String] The serialized origin.
         
     | 
| 
       1181 
1201 
     | 
    
         
             
                def origin
         
     | 
| 
         @@ -1771,7 +1791,7 @@ module Addressable 
     | 
|
| 
       1771 
1791 
     | 
    
         
             
                  end
         
     | 
| 
       1772 
1792 
     | 
    
         
             
                  joined_fragment = uri.fragment
         
     | 
| 
       1773 
1793 
     | 
    
         | 
| 
       1774 
     | 
    
         
            -
                  return  
     | 
| 
      
 1794 
     | 
    
         
            +
                  return self.class.new(
         
     | 
| 
       1775 
1795 
     | 
    
         
             
                    :scheme => joined_scheme,
         
     | 
| 
       1776 
1796 
     | 
    
         
             
                    :user => joined_user,
         
     | 
| 
       1777 
1797 
     | 
    
         
             
                    :password => joined_password,
         
     | 
| 
         @@ -1827,7 +1847,7 @@ module Addressable 
     | 
|
| 
       1827 
1847 
     | 
    
         
             
                    end
         
     | 
| 
       1828 
1848 
     | 
    
         
             
                  end
         
     | 
| 
       1829 
1849 
     | 
    
         | 
| 
       1830 
     | 
    
         
            -
                  uri =  
     | 
| 
      
 1850 
     | 
    
         
            +
                  uri = self.class.new
         
     | 
| 
       1831 
1851 
     | 
    
         
             
                  uri.defer_validation do
         
     | 
| 
       1832 
1852 
     | 
    
         
             
                    # Bunch of crazy logic required because of the composite components
         
     | 
| 
       1833 
1853 
     | 
    
         
             
                    # like userinfo and authority.
         
     | 
| 
         @@ -1911,9 +1931,16 @@ module Addressable 
     | 
|
| 
       1911 
1931 
     | 
    
         
             
                          components[:query] = nil
         
     | 
| 
       1912 
1932 
     | 
    
         
             
                        end
         
     | 
| 
       1913 
1933 
     | 
    
         
             
                      else
         
     | 
| 
       1914 
     | 
    
         
            -
                        if uri.path != SLASH
         
     | 
| 
       1915 
     | 
    
         
            -
                           
     | 
| 
       1916 
     | 
    
         
            -
             
     | 
| 
      
 1934 
     | 
    
         
            +
                        if uri.path != SLASH and components[:path]
         
     | 
| 
      
 1935 
     | 
    
         
            +
                          self_splitted_path = split_path(components[:path])
         
     | 
| 
      
 1936 
     | 
    
         
            +
                          uri_splitted_path = split_path(uri.path)
         
     | 
| 
      
 1937 
     | 
    
         
            +
                          self_dir = self_splitted_path.shift
         
     | 
| 
      
 1938 
     | 
    
         
            +
                          uri_dir = uri_splitted_path.shift
         
     | 
| 
      
 1939 
     | 
    
         
            +
                          while !self_splitted_path.empty? && !uri_splitted_path.empty? and self_dir == uri_dir
         
     | 
| 
      
 1940 
     | 
    
         
            +
                            self_dir = self_splitted_path.shift
         
     | 
| 
      
 1941 
     | 
    
         
            +
                            uri_dir = uri_splitted_path.shift
         
     | 
| 
      
 1942 
     | 
    
         
            +
                          end
         
     | 
| 
      
 1943 
     | 
    
         
            +
                          components[:path] = (uri_splitted_path.fill('..') + [self_dir] + self_splitted_path).join(SLASH)
         
     | 
| 
       1917 
1944 
     | 
    
         
             
                        end
         
     | 
| 
       1918 
1945 
     | 
    
         
             
                      end
         
     | 
| 
       1919 
1946 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1968,7 +1995,7 @@ module Addressable 
     | 
|
| 
       1968 
1995 
     | 
    
         
             
                    end
         
     | 
| 
       1969 
1996 
     | 
    
         
             
                  end
         
     | 
| 
       1970 
1997 
     | 
    
         | 
| 
       1971 
     | 
    
         
            -
                  return  
     | 
| 
      
 1998 
     | 
    
         
            +
                  return self.class.new(
         
     | 
| 
       1972 
1999 
     | 
    
         
             
                    :scheme => normalized_scheme,
         
     | 
| 
       1973 
2000 
     | 
    
         
             
                    :authority => normalized_authority,
         
     | 
| 
       1974 
2001 
     | 
    
         
             
                    :path => normalized_path,
         
     | 
| 
         @@ -2065,7 +2092,7 @@ module Addressable 
     | 
|
| 
       2065 
2092 
     | 
    
         
             
                #
         
     | 
| 
       2066 
2093 
     | 
    
         
             
                # @return [Addressable::URI] The cloned URI.
         
     | 
| 
       2067 
2094 
     | 
    
         
             
                def dup
         
     | 
| 
       2068 
     | 
    
         
            -
                  duplicated_uri =  
     | 
| 
      
 2095 
     | 
    
         
            +
                  duplicated_uri = self.class.new(
         
     | 
| 
       2069 
2096 
     | 
    
         
             
                    :scheme => self.scheme ? self.scheme.dup : nil,
         
     | 
| 
       2070 
2097 
     | 
    
         
             
                    :user => self.user ? self.user.dup : nil,
         
     | 
| 
       2071 
2098 
     | 
    
         
             
                    :password => self.password ? self.password.dup : nil,
         
     | 
| 
         @@ -2121,6 +2148,15 @@ module Addressable 
     | 
|
| 
       2121 
2148 
     | 
    
         
             
                  replace_self(self.omit(*components))
         
     | 
| 
       2122 
2149 
     | 
    
         
             
                end
         
     | 
| 
       2123 
2150 
     | 
    
         | 
| 
      
 2151 
     | 
    
         
            +
                ##
         
     | 
| 
      
 2152 
     | 
    
         
            +
                # Determines if the URI is an empty string.
         
     | 
| 
      
 2153 
     | 
    
         
            +
                #
         
     | 
| 
      
 2154 
     | 
    
         
            +
                # @return [TrueClass, FalseClass]
         
     | 
| 
      
 2155 
     | 
    
         
            +
                #   Returns <code>true</code> if empty, <code>false</code> otherwise.
         
     | 
| 
      
 2156 
     | 
    
         
            +
                def empty?
         
     | 
| 
      
 2157 
     | 
    
         
            +
                  return self.to_s.empty?
         
     | 
| 
      
 2158 
     | 
    
         
            +
                end
         
     | 
| 
      
 2159 
     | 
    
         
            +
             
     | 
| 
       2124 
2160 
     | 
    
         
             
                ##
         
     | 
| 
       2125 
2161 
     | 
    
         
             
                # Converts the URI to a <code>String</code>.
         
     | 
| 
       2126 
2162 
     | 
    
         
             
                #
         
     | 
| 
         @@ -2239,7 +2275,7 @@ module Addressable 
     | 
|
| 
       2239 
2275 
     | 
    
         
             
                # Ensures that the URI is valid.
         
     | 
| 
       2240 
2276 
     | 
    
         
             
                def validate
         
     | 
| 
       2241 
2277 
     | 
    
         
             
                  return if !!@validation_deferred
         
     | 
| 
       2242 
     | 
    
         
            -
                  if self.scheme != nil &&
         
     | 
| 
      
 2278 
     | 
    
         
            +
                  if self.scheme != nil && self.ip_based? &&
         
     | 
| 
       2243 
2279 
     | 
    
         
             
                      (self.host == nil || self.host.empty?) &&
         
     | 
| 
       2244 
2280 
     | 
    
         
             
                      (self.path == nil || self.path.empty?)
         
     | 
| 
       2245 
2281 
     | 
    
         
             
                    raise InvalidURIError,
         
     | 
| 
         @@ -2283,5 +2319,19 @@ module Addressable 
     | 
|
| 
       2283 
2319 
     | 
    
         
             
                  @fragment = uri.fragment
         
     | 
| 
       2284 
2320 
     | 
    
         
             
                  return self
         
     | 
| 
       2285 
2321 
     | 
    
         
             
                end
         
     | 
| 
      
 2322 
     | 
    
         
            +
             
     | 
| 
      
 2323 
     | 
    
         
            +
                ##
         
     | 
| 
      
 2324 
     | 
    
         
            +
                # Splits path string with "/"(slash).
         
     | 
| 
      
 2325 
     | 
    
         
            +
                # It is considered that there is empty string after last slash when
         
     | 
| 
      
 2326 
     | 
    
         
            +
                # path ends with slash.
         
     | 
| 
      
 2327 
     | 
    
         
            +
                #
         
     | 
| 
      
 2328 
     | 
    
         
            +
                # @param [String] path The path to split.
         
     | 
| 
      
 2329 
     | 
    
         
            +
                #
         
     | 
| 
      
 2330 
     | 
    
         
            +
                # @return [Array<String>] An array of parts of path.
         
     | 
| 
      
 2331 
     | 
    
         
            +
                def split_path(path)
         
     | 
| 
      
 2332 
     | 
    
         
            +
                  splitted = path.split(SLASH)
         
     | 
| 
      
 2333 
     | 
    
         
            +
                  splitted << EMPTY_STR if path.end_with? SLASH
         
     | 
| 
      
 2334 
     | 
    
         
            +
                  splitted
         
     | 
| 
      
 2335 
     | 
    
         
            +
                end
         
     | 
| 
       2286 
2336 
     | 
    
         
             
              end
         
     | 
| 
       2287 
2337 
     | 
    
         
             
            end
         
     | 
    
        data/lib/addressable/version.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding:utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            #--
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
6 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -22,7 +22,7 @@ if !defined?(Addressable::VERSION) 
     | 
|
| 
       22 
22 
     | 
    
         
             
                module VERSION
         
     | 
| 
       23 
23 
     | 
    
         
             
                  MAJOR = 2
         
     | 
| 
       24 
24 
     | 
    
         
             
                  MINOR = 3
         
     | 
| 
       25 
     | 
    
         
            -
                  TINY  =  
     | 
| 
      
 25 
     | 
    
         
            +
                  TINY  = 5
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                  STRING = [MAJOR, MINOR, TINY].join('.')
         
     | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -14,6 +14,8 @@ 
     | 
|
| 
       14 
14 
     | 
    
         
             
            #    limitations under the License.
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
            require "spec_helper"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
            # Have to use RubyGems to load the idn gem.
         
     | 
| 
       18 
20 
     | 
    
         
             
            require "rubygems"
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -14,6 +14,8 @@ 
     | 
|
| 
       14 
14 
     | 
    
         
             
            #    limitations under the License.
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
            require "spec_helper"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
            require "addressable/uri"
         
     | 
| 
       18 
20 
     | 
    
         
             
            require "net/http"
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
         @@ -1,3 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 5 
     | 
    
         
            +
            #    you may not use this file except in compliance with the License.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #    You may obtain a copy of the License at
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            #        http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            #    Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 11 
     | 
    
         
            +
            #    distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 12 
     | 
    
         
            +
            #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 13 
     | 
    
         
            +
            #    See the License for the specific language governing permissions and
         
     | 
| 
      
 14 
     | 
    
         
            +
            #    limitations under the License.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            require "spec_helper"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       1 
19 
     | 
    
         
             
            require "addressable/template"
         
     | 
| 
       2 
20 
     | 
    
         | 
| 
       3 
21 
     | 
    
         
             
            shared_examples_for 'expands' do |tests|
         
     | 
| 
         @@ -736,7 +754,45 @@ describe Addressable::Template do 
     | 
|
| 
       736 
754 
     | 
    
         
             
                  }
         
     | 
| 
       737 
755 
     | 
    
         
             
                end
         
     | 
| 
       738 
756 
     | 
    
         
             
              end
         
     | 
| 
       739 
     | 
    
         
            -
              describe "Partial expand" do
         
     | 
| 
      
 757 
     | 
    
         
            +
              describe "Partial expand with symbols" do
         
     | 
| 
      
 758 
     | 
    
         
            +
                context "partial_expand with two simple values" do
         
     | 
| 
      
 759 
     | 
    
         
            +
                  subject{
         
     | 
| 
      
 760 
     | 
    
         
            +
                    Addressable::Template.new("http://example.com/{one}/{two}/")
         
     | 
| 
      
 761 
     | 
    
         
            +
                  }
         
     | 
| 
      
 762 
     | 
    
         
            +
                  it "builds a new pattern" do
         
     | 
| 
      
 763 
     | 
    
         
            +
                    subject.partial_expand(:one => "1").pattern.should ==
         
     | 
| 
      
 764 
     | 
    
         
            +
                      "http://example.com/1/{two}/"
         
     | 
| 
      
 765 
     | 
    
         
            +
                  end
         
     | 
| 
      
 766 
     | 
    
         
            +
                end
         
     | 
| 
      
 767 
     | 
    
         
            +
                context "partial_expand query with missing param in middle" do
         
     | 
| 
      
 768 
     | 
    
         
            +
                  subject{
         
     | 
| 
      
 769 
     | 
    
         
            +
                    Addressable::Template.new("http://example.com/{?one,two,three}/")
         
     | 
| 
      
 770 
     | 
    
         
            +
                  }
         
     | 
| 
      
 771 
     | 
    
         
            +
                  it "builds a new pattern" do
         
     | 
| 
      
 772 
     | 
    
         
            +
                    subject.partial_expand(:one => "1", :three => "3").pattern.should ==
         
     | 
| 
      
 773 
     | 
    
         
            +
                      "http://example.com/?one=1{&two}&three=3/"
         
     | 
| 
      
 774 
     | 
    
         
            +
                  end
         
     | 
| 
      
 775 
     | 
    
         
            +
                end
         
     | 
| 
      
 776 
     | 
    
         
            +
                context "partial_expand with query string" do
         
     | 
| 
      
 777 
     | 
    
         
            +
                  subject{
         
     | 
| 
      
 778 
     | 
    
         
            +
                    Addressable::Template.new("http://example.com/{?two,one}/")
         
     | 
| 
      
 779 
     | 
    
         
            +
                  }
         
     | 
| 
      
 780 
     | 
    
         
            +
                  it "builds a new pattern" do
         
     | 
| 
      
 781 
     | 
    
         
            +
                    subject.partial_expand(:one => "1").pattern.should ==
         
     | 
| 
      
 782 
     | 
    
         
            +
                      "http://example.com/{?two}&one=1/"
         
     | 
| 
      
 783 
     | 
    
         
            +
                  end
         
     | 
| 
      
 784 
     | 
    
         
            +
                end
         
     | 
| 
      
 785 
     | 
    
         
            +
                context "partial_expand with path operator" do
         
     | 
| 
      
 786 
     | 
    
         
            +
                  subject{
         
     | 
| 
      
 787 
     | 
    
         
            +
                    Addressable::Template.new("http://example.com{/one,two}/")
         
     | 
| 
      
 788 
     | 
    
         
            +
                  }
         
     | 
| 
      
 789 
     | 
    
         
            +
                  it "builds a new pattern" do
         
     | 
| 
      
 790 
     | 
    
         
            +
                    subject.partial_expand(:one => "1").pattern.should ==
         
     | 
| 
      
 791 
     | 
    
         
            +
                      "http://example.com/1{/two}/"
         
     | 
| 
      
 792 
     | 
    
         
            +
                  end
         
     | 
| 
      
 793 
     | 
    
         
            +
                end
         
     | 
| 
      
 794 
     | 
    
         
            +
              end
         
     | 
| 
      
 795 
     | 
    
         
            +
              describe "Partial expand with strings" do
         
     | 
| 
       740 
796 
     | 
    
         
             
                context "partial_expand with two simple values" do
         
     | 
| 
       741 
797 
     | 
    
         
             
                  subject{
         
     | 
| 
       742 
798 
     | 
    
         
             
                    Addressable::Template.new("http://example.com/{one}/{two}/")
         
     | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2006- 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2006-2013 Bob Aman
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       5 
5 
     | 
    
         
             
            #    you may not use this file except in compliance with the License.
         
     | 
| 
         @@ -14,6 +14,8 @@ 
     | 
|
| 
       14 
14 
     | 
    
         
             
            #    limitations under the License.
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
            require "spec_helper"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
            require "addressable/uri"
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
21 
     | 
    
         
             
            if !"".respond_to?("force_encoding")
         
     | 
| 
         @@ -41,14 +43,18 @@ if !"".respond_to?("force_encoding") 
     | 
|
| 
       41 
43 
     | 
    
         
             
              end
         
     | 
| 
       42 
44 
     | 
    
         
             
            end
         
     | 
| 
       43 
45 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
            module  
     | 
| 
       45 
     | 
    
         
            -
               
     | 
| 
       46 
     | 
    
         
            -
                 
     | 
| 
       47 
     | 
    
         
            -
                   
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
            module Fake
         
     | 
| 
      
 47 
     | 
    
         
            +
              module URI
         
     | 
| 
      
 48 
     | 
    
         
            +
                class HTTP
         
     | 
| 
      
 49 
     | 
    
         
            +
                  def initialize(uri)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @uri = uri
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
                  def to_s
         
     | 
| 
      
 54 
     | 
    
         
            +
                    return @uri.to_s
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  alias :to_str :to_s
         
     | 
| 
       52 
58 
     | 
    
         
             
                end
         
     | 
| 
       53 
59 
     | 
    
         
             
              end
         
     | 
| 
       54 
60 
     | 
    
         
             
            end
         
     | 
| 
         @@ -179,6 +185,10 @@ describe Addressable::URI, "when created from nil components" do 
     | 
|
| 
       179 
185 
     | 
    
         
             
                @uri.default_port.should == nil
         
     | 
| 
       180 
186 
     | 
    
         
             
              end
         
     | 
| 
       181 
187 
     | 
    
         | 
| 
      
 188 
     | 
    
         
            +
              it "should be empty" do
         
     | 
| 
      
 189 
     | 
    
         
            +
                @uri.should be_empty
         
     | 
| 
      
 190 
     | 
    
         
            +
              end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
       182 
192 
     | 
    
         
             
              it "should raise an error if the scheme is set to whitespace" do
         
     | 
| 
       183 
193 
     | 
    
         
             
                (lambda do
         
     | 
| 
       184 
194 
     | 
    
         
             
                  @uri.scheme = "\t \n"
         
     | 
| 
         @@ -333,11 +343,14 @@ describe Addressable::URI, "when initialized from individual components" do 
     | 
|
| 
       333 
343 
     | 
    
         
             
                  "http://user:password@example.com:8080/path?query=value#fragment"
         
     | 
| 
       334 
344 
     | 
    
         
             
              end
         
     | 
| 
       335 
345 
     | 
    
         | 
| 
      
 346 
     | 
    
         
            +
              it "should not be empty" do
         
     | 
| 
      
 347 
     | 
    
         
            +
                @uri.should_not be_empty
         
     | 
| 
      
 348 
     | 
    
         
            +
              end
         
     | 
| 
      
 349 
     | 
    
         
            +
             
     | 
| 
       336 
350 
     | 
    
         
             
              it "should not be frozen" do
         
     | 
| 
       337 
351 
     | 
    
         
             
                @uri.should_not be_frozen
         
     | 
| 
       338 
352 
     | 
    
         
             
              end
         
     | 
| 
       339 
353 
     | 
    
         | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
354 
     | 
    
         
             
              it "should allow destructive operations" do
         
     | 
| 
       342 
355 
     | 
    
         
             
                expect { @uri.normalize! }.not_to raise_error
         
     | 
| 
       343 
356 
     | 
    
         
             
              end
         
     | 
| 
         @@ -459,6 +472,10 @@ describe Addressable::URI, "when initialized from " + 
     | 
|
| 
       459 
472 
     | 
    
         
             
                  "http://user:password@example.com:8080/path?query=value#fragment"
         
     | 
| 
       460 
473 
     | 
    
         
             
              end
         
     | 
| 
       461 
474 
     | 
    
         | 
| 
      
 475 
     | 
    
         
            +
              it "should not be empty" do
         
     | 
| 
      
 476 
     | 
    
         
            +
                @uri.should_not be_empty
         
     | 
| 
      
 477 
     | 
    
         
            +
              end
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
       462 
479 
     | 
    
         
             
              it "should not be frozen" do
         
     | 
| 
       463 
480 
     | 
    
         
             
                @uri.should_not be_frozen
         
     | 
| 
       464 
481 
     | 
    
         
             
              end
         
     | 
| 
         @@ -576,6 +593,10 @@ describe Addressable::URI, "when parsed from a frozen string" do 
     | 
|
| 
       576 
593 
     | 
    
         
             
                  "http://user:password@example.com:8080/path?query=value#fragment"
         
     | 
| 
       577 
594 
     | 
    
         
             
              end
         
     | 
| 
       578 
595 
     | 
    
         | 
| 
      
 596 
     | 
    
         
            +
              it "should not be empty" do
         
     | 
| 
      
 597 
     | 
    
         
            +
                @uri.should_not be_empty
         
     | 
| 
      
 598 
     | 
    
         
            +
              end
         
     | 
| 
      
 599 
     | 
    
         
            +
             
     | 
| 
       579 
600 
     | 
    
         
             
              it "should not be frozen" do
         
     | 
| 
       580 
601 
     | 
    
         
             
                @uri.should_not be_frozen
         
     | 
| 
       581 
602 
     | 
    
         
             
              end
         
     | 
| 
         @@ -690,6 +711,10 @@ describe Addressable::URI, "when frozen" do 
     | 
|
| 
       690 
711 
     | 
    
         
             
                @uri.to_s.should == ''
         
     | 
| 
       691 
712 
     | 
    
         
             
              end
         
     | 
| 
       692 
713 
     | 
    
         | 
| 
      
 714 
     | 
    
         
            +
              it "should be empty" do
         
     | 
| 
      
 715 
     | 
    
         
            +
                @uri.should be_empty
         
     | 
| 
      
 716 
     | 
    
         
            +
              end
         
     | 
| 
      
 717 
     | 
    
         
            +
             
     | 
| 
       693 
718 
     | 
    
         
             
              it "should be frozen" do
         
     | 
| 
       694 
719 
     | 
    
         
             
                @uri.should be_frozen
         
     | 
| 
       695 
720 
     | 
    
         
             
              end
         
     | 
| 
         @@ -822,6 +847,10 @@ describe Addressable::URI, "when frozen" do 
     | 
|
| 
       822 
847 
     | 
    
         
             
                @uri.normalize.to_s.should == 'http://example.com/path?a=1#123'
         
     | 
| 
       823 
848 
     | 
    
         
             
              end
         
     | 
| 
       824 
849 
     | 
    
         | 
| 
      
 850 
     | 
    
         
            +
              it "should not be empty" do
         
     | 
| 
      
 851 
     | 
    
         
            +
                @uri.should_not be_empty
         
     | 
| 
      
 852 
     | 
    
         
            +
              end
         
     | 
| 
      
 853 
     | 
    
         
            +
             
     | 
| 
       825 
854 
     | 
    
         
             
              it "should be frozen" do
         
     | 
| 
       826 
855 
     | 
    
         
             
                @uri.should be_frozen
         
     | 
| 
       827 
856 
     | 
    
         
             
              end
         
     | 
| 
         @@ -977,7 +1006,7 @@ end 
     | 
|
| 
       977 
1006 
     | 
    
         
             
            describe Addressable::URI, "when parsed from something that looks " +
         
     | 
| 
       978 
1007 
     | 
    
         
             
                "like a URI object" do
         
     | 
| 
       979 
1008 
     | 
    
         
             
              it "should parse without error" do
         
     | 
| 
       980 
     | 
    
         
            -
                uri = Addressable::URI.parse(URI::HTTP.new("http://example.com/"))
         
     | 
| 
      
 1009 
     | 
    
         
            +
                uri = Addressable::URI.parse(Fake::URI::HTTP.new("http://example.com/"))
         
     | 
| 
       981 
1010 
     | 
    
         
             
                (lambda do
         
     | 
| 
       982 
1011 
     | 
    
         
             
                  Addressable::URI.parse(uri)
         
     | 
| 
       983 
1012 
     | 
    
         
             
                end).should_not raise_error
         
     | 
| 
         @@ -1210,6 +1239,50 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       1210 
1239 
     | 
    
         
             
              end
         
     | 
| 
       1211 
1240 
     | 
    
         
             
            end
         
     | 
| 
       1212 
1241 
     | 
    
         | 
| 
      
 1242 
     | 
    
         
            +
            # Section 2 of RFC 6068
         
     | 
| 
      
 1243 
     | 
    
         
            +
            describe Addressable::URI, "when parsed from " +
         
     | 
| 
      
 1244 
     | 
    
         
            +
                "'mailto:?to=addr1@an.example,addr2@an.example'" do
         
     | 
| 
      
 1245 
     | 
    
         
            +
              before do
         
     | 
| 
      
 1246 
     | 
    
         
            +
                @uri = Addressable::URI.parse(
         
     | 
| 
      
 1247 
     | 
    
         
            +
                  "mailto:?to=addr1@an.example,addr2@an.example"
         
     | 
| 
      
 1248 
     | 
    
         
            +
                )
         
     | 
| 
      
 1249 
     | 
    
         
            +
              end
         
     | 
| 
      
 1250 
     | 
    
         
            +
             
     | 
| 
      
 1251 
     | 
    
         
            +
              it "should use the 'mailto' scheme" do
         
     | 
| 
      
 1252 
     | 
    
         
            +
                @uri.scheme.should == "mailto"
         
     | 
| 
      
 1253 
     | 
    
         
            +
              end
         
     | 
| 
      
 1254 
     | 
    
         
            +
             
     | 
| 
      
 1255 
     | 
    
         
            +
              it "should not be considered to be ip-based" do
         
     | 
| 
      
 1256 
     | 
    
         
            +
                @uri.should_not be_ip_based
         
     | 
| 
      
 1257 
     | 
    
         
            +
              end
         
     | 
| 
      
 1258 
     | 
    
         
            +
             
     | 
| 
      
 1259 
     | 
    
         
            +
              it "should not have an inferred_port" do
         
     | 
| 
      
 1260 
     | 
    
         
            +
                @uri.inferred_port.should == nil
         
     | 
| 
      
 1261 
     | 
    
         
            +
              end
         
     | 
| 
      
 1262 
     | 
    
         
            +
             
     | 
| 
      
 1263 
     | 
    
         
            +
              it "should have a path of ''" do
         
     | 
| 
      
 1264 
     | 
    
         
            +
                @uri.path.should == ""
         
     | 
| 
      
 1265 
     | 
    
         
            +
              end
         
     | 
| 
      
 1266 
     | 
    
         
            +
             
     | 
| 
      
 1267 
     | 
    
         
            +
              it "should not have a request URI" do
         
     | 
| 
      
 1268 
     | 
    
         
            +
                @uri.request_uri.should == nil
         
     | 
| 
      
 1269 
     | 
    
         
            +
              end
         
     | 
| 
      
 1270 
     | 
    
         
            +
             
     | 
| 
      
 1271 
     | 
    
         
            +
              it "should have the To: field value parameterized" do
         
     | 
| 
      
 1272 
     | 
    
         
            +
                @uri.query_values(Hash)["to"].should == (
         
     | 
| 
      
 1273 
     | 
    
         
            +
                  "addr1@an.example,addr2@an.example"
         
     | 
| 
      
 1274 
     | 
    
         
            +
                )
         
     | 
| 
      
 1275 
     | 
    
         
            +
              end
         
     | 
| 
      
 1276 
     | 
    
         
            +
             
     | 
| 
      
 1277 
     | 
    
         
            +
              it "should be considered to be in normal form" do
         
     | 
| 
      
 1278 
     | 
    
         
            +
                @uri.normalize.should be_eql(@uri)
         
     | 
| 
      
 1279 
     | 
    
         
            +
              end
         
     | 
| 
      
 1280 
     | 
    
         
            +
             
     | 
| 
      
 1281 
     | 
    
         
            +
              it "should have a 'null' origin" do
         
     | 
| 
      
 1282 
     | 
    
         
            +
                @uri.origin.should == 'null'
         
     | 
| 
      
 1283 
     | 
    
         
            +
              end
         
     | 
| 
      
 1284 
     | 
    
         
            +
            end
         
     | 
| 
      
 1285 
     | 
    
         
            +
             
     | 
| 
       1213 
1286 
     | 
    
         
             
            # Section 1.1.2 of RFC 3986
         
     | 
| 
       1214 
1287 
     | 
    
         
             
            describe Addressable::URI, "when parsed from " +
         
     | 
| 
       1215 
1288 
     | 
    
         
             
                "'news:comp.infosystems.www.servers.unix'" do
         
     | 
| 
         @@ -1564,9 +1637,9 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       1564 
1637 
     | 
    
         
             
                  Addressable::URI.parse("/path/")
         
     | 
| 
       1565 
1638 
     | 
    
         
             
              end
         
     | 
| 
       1566 
1639 
     | 
    
         | 
| 
       1567 
     | 
    
         
            -
              it "should have a route of ' 
     | 
| 
      
 1640 
     | 
    
         
            +
              it "should have a route of '..' from 'http://example.com/path/'" do
         
     | 
| 
       1568 
1641 
     | 
    
         
             
                @uri.route_from("http://example.com/path/").should ==
         
     | 
| 
       1569 
     | 
    
         
            -
                  Addressable::URI.parse(" 
     | 
| 
      
 1642 
     | 
    
         
            +
                  Addressable::URI.parse("..")
         
     | 
| 
       1570 
1643 
     | 
    
         
             
              end
         
     | 
| 
       1571 
1644 
     | 
    
         | 
| 
       1572 
1645 
     | 
    
         
             
              it "should have a route of '#' to 'http://example.com/'" do
         
     | 
| 
         @@ -1771,6 +1844,28 @@ describe Addressable::URI, "when parsing IPv6 addresses" do 
     | 
|
| 
       1771 
1844 
     | 
    
         
             
              end
         
     | 
| 
       1772 
1845 
     | 
    
         
             
            end
         
     | 
| 
       1773 
1846 
     | 
    
         | 
| 
      
 1847 
     | 
    
         
            +
            describe Addressable::URI, "when parsing IPv6 address" do
         
     | 
| 
      
 1848 
     | 
    
         
            +
              subject { Addressable::URI.parse("http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/") }
         
     | 
| 
      
 1849 
     | 
    
         
            +
              its(:host) { should == '[3ffe:1900:4545:3:200:f8ff:fe21:67cf]' }
         
     | 
| 
      
 1850 
     | 
    
         
            +
              its(:hostname) { should == '3ffe:1900:4545:3:200:f8ff:fe21:67cf' }
         
     | 
| 
      
 1851 
     | 
    
         
            +
            end
         
     | 
| 
      
 1852 
     | 
    
         
            +
             
     | 
| 
      
 1853 
     | 
    
         
            +
            describe Addressable::URI, "when assigning IPv6 address" do
         
     | 
| 
      
 1854 
     | 
    
         
            +
              it "should allow to set bare IPv6 address as hostname" do
         
     | 
| 
      
 1855 
     | 
    
         
            +
                uri = Addressable::URI.parse("http://[::1]/")
         
     | 
| 
      
 1856 
     | 
    
         
            +
                uri.hostname = '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
         
     | 
| 
      
 1857 
     | 
    
         
            +
                uri.to_s.should == 'http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'
         
     | 
| 
      
 1858 
     | 
    
         
            +
              end
         
     | 
| 
      
 1859 
     | 
    
         
            +
             
     | 
| 
      
 1860 
     | 
    
         
            +
              it "should not allow to set bare IPv6 address as host" do
         
     | 
| 
      
 1861 
     | 
    
         
            +
                uri = Addressable::URI.parse("http://[::1]/")
         
     | 
| 
      
 1862 
     | 
    
         
            +
                pending "not checked"
         
     | 
| 
      
 1863 
     | 
    
         
            +
                (lambda do
         
     | 
| 
      
 1864 
     | 
    
         
            +
                  uri.host = '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
         
     | 
| 
      
 1865 
     | 
    
         
            +
                end).should raise_error(Addressable::URI::InvalidURIError)
         
     | 
| 
      
 1866 
     | 
    
         
            +
              end
         
     | 
| 
      
 1867 
     | 
    
         
            +
            end
         
     | 
| 
      
 1868 
     | 
    
         
            +
             
     | 
| 
       1774 
1869 
     | 
    
         
             
            describe Addressable::URI, "when parsing IPvFuture addresses" do
         
     | 
| 
       1775 
1870 
     | 
    
         
             
              it "should not raise an error for " +
         
     | 
| 
       1776 
1871 
     | 
    
         
             
                  "'http://[v9.3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'" do
         
     | 
| 
         @@ -2438,10 +2533,10 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       2438 
2533 
     | 
    
         
             
                  Addressable::URI.parse("http://example.com:8080/")
         
     | 
| 
       2439 
2534 
     | 
    
         
             
              end
         
     | 
| 
       2440 
2535 
     | 
    
         | 
| 
       2441 
     | 
    
         
            -
              it "should have a route of ' 
     | 
| 
      
 2536 
     | 
    
         
            +
              it "should have a route of '../../' from " +
         
     | 
| 
       2442 
2537 
     | 
    
         
             
                  "'http://example.com:8080/path/to/'" do
         
     | 
| 
       2443 
2538 
     | 
    
         
             
                @uri.route_from("http://example.com:8080/path/to/").should ==
         
     | 
| 
       2444 
     | 
    
         
            -
                  Addressable::URI.parse(" 
     | 
| 
      
 2539 
     | 
    
         
            +
                  Addressable::URI.parse("../../")
         
     | 
| 
       2445 
2540 
     | 
    
         
             
              end
         
     | 
| 
       2446 
2541 
     | 
    
         | 
| 
       2447 
2542 
     | 
    
         
             
              it "should have a route of 'http://example.com:8080/' from " +
         
     | 
| 
         @@ -2722,6 +2817,25 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       2722 
2817 
     | 
    
         
             
                  Addressable::URI.parse("resource/")
         
     | 
| 
       2723 
2818 
     | 
    
         
             
              end
         
     | 
| 
       2724 
2819 
     | 
    
         | 
| 
      
 2820 
     | 
    
         
            +
              it "should have a route of '../' from " +
         
     | 
| 
      
 2821 
     | 
    
         
            +
                "'http://example.com/path/to/resource/sub'" do
         
     | 
| 
      
 2822 
     | 
    
         
            +
                @uri.route_from("http://example.com/path/to/resource/sub").should ==
         
     | 
| 
      
 2823 
     | 
    
         
            +
                  Addressable::URI.parse("../")
         
     | 
| 
      
 2824 
     | 
    
         
            +
              end
         
     | 
| 
      
 2825 
     | 
    
         
            +
             
     | 
| 
      
 2826 
     | 
    
         
            +
             
     | 
| 
      
 2827 
     | 
    
         
            +
              it "should have a route of 'resource/' from " +
         
     | 
| 
      
 2828 
     | 
    
         
            +
                "'http://example.com/path/to/another'" do
         
     | 
| 
      
 2829 
     | 
    
         
            +
                @uri.route_from("http://example.com/path/to/another").should ==
         
     | 
| 
      
 2830 
     | 
    
         
            +
                  Addressable::URI.parse("resource/")
         
     | 
| 
      
 2831 
     | 
    
         
            +
              end
         
     | 
| 
      
 2832 
     | 
    
         
            +
             
     | 
| 
      
 2833 
     | 
    
         
            +
              it "should have a route of 'resource/' from " +
         
     | 
| 
      
 2834 
     | 
    
         
            +
                  "'http://example.com/path/to/res'" do
         
     | 
| 
      
 2835 
     | 
    
         
            +
                @uri.route_from("http://example.com/path/to/res").should ==
         
     | 
| 
      
 2836 
     | 
    
         
            +
                  Addressable::URI.parse("resource/")
         
     | 
| 
      
 2837 
     | 
    
         
            +
              end
         
     | 
| 
      
 2838 
     | 
    
         
            +
             
     | 
| 
       2725 
2839 
     | 
    
         
             
              it "should have a route of 'resource/' from " +
         
     | 
| 
       2726 
2840 
     | 
    
         
             
                  "'http://example.com:80/path/to/'" do
         
     | 
| 
       2727 
2841 
     | 
    
         
             
                @uri.route_from("http://example.com:80/path/to/").should ==
         
     | 
| 
         @@ -2740,10 +2854,10 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       2740 
2854 
     | 
    
         
             
                  Addressable::URI.parse("http://example.com/path/to/resource/")
         
     | 
| 
       2741 
2855 
     | 
    
         
             
              end
         
     | 
| 
       2742 
2856 
     | 
    
         | 
| 
       2743 
     | 
    
         
            -
              it "should have a route of ' 
     | 
| 
      
 2857 
     | 
    
         
            +
              it "should have a route of '../../path/to/resource/' from " +
         
     | 
| 
       2744 
2858 
     | 
    
         
             
                  "'http://example.com/to/resource/'" do
         
     | 
| 
       2745 
2859 
     | 
    
         
             
                @uri.route_from("http://example.com/to/resource/").should ==
         
     | 
| 
       2746 
     | 
    
         
            -
                  Addressable::URI.parse(" 
     | 
| 
      
 2860 
     | 
    
         
            +
                  Addressable::URI.parse("../../path/to/resource/")
         
     | 
| 
       2747 
2861 
     | 
    
         
             
              end
         
     | 
| 
       2748 
2862 
     | 
    
         | 
| 
       2749 
2863 
     | 
    
         
             
              it "should correctly convert to a hash" do
         
     | 
| 
         @@ -3282,13 +3396,13 @@ describe Addressable::URI, "when parsed from " + 
     | 
|
| 
       3282 
3396 
     | 
    
         
             
                @uri.normalize.should be_eql(@uri)
         
     | 
| 
       3283 
3397 
     | 
    
         
             
              end
         
     | 
| 
       3284 
3398 
     | 
    
         | 
| 
       3285 
     | 
    
         
            -
              it "should have a route of ' 
     | 
| 
      
 3399 
     | 
    
         
            +
              it "should have a route of '../../' to " +
         
     | 
| 
       3286 
3400 
     | 
    
         
             
                  "'http://user:pass@example.com/path/'" do
         
     | 
| 
       3287 
3401 
     | 
    
         
             
                @uri.route_to("http://user:pass@example.com/path/").should ==
         
     | 
| 
       3288 
     | 
    
         
            -
                  Addressable::URI.parse(" 
     | 
| 
      
 3402 
     | 
    
         
            +
                  Addressable::URI.parse("../../")
         
     | 
| 
       3289 
3403 
     | 
    
         
             
              end
         
     | 
| 
       3290 
3404 
     | 
    
         | 
| 
       3291 
     | 
    
         
            -
              it "should have a route of ' 
     | 
| 
      
 3405 
     | 
    
         
            +
              it "should have a route of 'to/resource?query=x#fragment' " +
         
     | 
| 
       3292 
3406 
     | 
    
         
             
                  "from 'http://user:pass@example.com/path/'" do
         
     | 
| 
       3293 
3407 
     | 
    
         
             
                @uri.route_from("http://user:pass@example.com/path/").should ==
         
     | 
| 
       3294 
3408 
     | 
    
         
             
                  Addressable::URI.parse("to/resource?query=x#fragment")
         
     | 
| 
         @@ -5694,3 +5808,29 @@ describe Addressable::URI, "when assigning path values" do 
     | 
|
| 
       5694 
5808 
     | 
    
         
             
                end).should_not raise_error(Addressable::URI::InvalidURIError)
         
     | 
| 
       5695 
5809 
     | 
    
         
             
              end
         
     | 
| 
       5696 
5810 
     | 
    
         
             
            end
         
     | 
| 
      
 5811 
     | 
    
         
            +
             
     | 
| 
      
 5812 
     | 
    
         
            +
            describe Addressable::URI, "when initializing a subclass of Addressable::URI" do
         
     | 
| 
      
 5813 
     | 
    
         
            +
              before do
         
     | 
| 
      
 5814 
     | 
    
         
            +
                @uri = Class.new(Addressable::URI).new
         
     | 
| 
      
 5815 
     | 
    
         
            +
              end
         
     | 
| 
      
 5816 
     | 
    
         
            +
             
     | 
| 
      
 5817 
     | 
    
         
            +
              it "should have the same class after being parsed" do
         
     | 
| 
      
 5818 
     | 
    
         
            +
                @uri.class.should == Addressable::URI.parse(@uri).class
         
     | 
| 
      
 5819 
     | 
    
         
            +
              end
         
     | 
| 
      
 5820 
     | 
    
         
            +
             
     | 
| 
      
 5821 
     | 
    
         
            +
              it "should have the same class as its duplicate" do
         
     | 
| 
      
 5822 
     | 
    
         
            +
                @uri.class.should == @uri.dup.class
         
     | 
| 
      
 5823 
     | 
    
         
            +
              end
         
     | 
| 
      
 5824 
     | 
    
         
            +
             
     | 
| 
      
 5825 
     | 
    
         
            +
              it "should have the same class after being normalized" do
         
     | 
| 
      
 5826 
     | 
    
         
            +
                @uri.class.should == @uri.normalize.class
         
     | 
| 
      
 5827 
     | 
    
         
            +
              end
         
     | 
| 
      
 5828 
     | 
    
         
            +
             
     | 
| 
      
 5829 
     | 
    
         
            +
              it "should have the same class after being merged" do
         
     | 
| 
      
 5830 
     | 
    
         
            +
                @uri.class.should == @uri.merge(:path => 'path').class
         
     | 
| 
      
 5831 
     | 
    
         
            +
              end
         
     | 
| 
      
 5832 
     | 
    
         
            +
             
     | 
| 
      
 5833 
     | 
    
         
            +
              it "should have the same class after being joined" do
         
     | 
| 
      
 5834 
     | 
    
         
            +
                @uri.class.should == @uri.join('path').class
         
     | 
| 
      
 5835 
     | 
    
         
            +
              end
         
     | 
| 
      
 5836 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,72 +1,61 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: addressable
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.3. 
     | 
| 
       5 
     | 
    
         
            -
              prerelease: 
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.3.5
         
     | 
| 
       6 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       8 
7 
     | 
    
         
             
            - Bob Aman
         
     | 
| 
       9 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-06-27 00:00:00.000000000 Z
         
     | 
| 
       13 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
14 
     | 
    
         
             
              name: rake
         
     | 
| 
       16 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       17 
     | 
    
         
            -
                none: false
         
     | 
| 
       18 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
     | 
    
         
            -
                - -  
     | 
| 
      
 17 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       20 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       21 
19 
     | 
    
         
             
                    version: 0.7.3
         
     | 
| 
       22 
20 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       25 
     | 
    
         
            -
                none: false
         
     | 
| 
       26 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       27 
     | 
    
         
            -
                - -  
     | 
| 
      
 24 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       28 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       29 
26 
     | 
    
         
             
                    version: 0.7.3
         
     | 
| 
       30 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       31 
28 
     | 
    
         
             
              name: rspec
         
     | 
| 
       32 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       33 
     | 
    
         
            -
                none: false
         
     | 
| 
       34 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       35 
     | 
    
         
            -
                - -  
     | 
| 
      
 31 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       36 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       37 
33 
     | 
    
         
             
                    version: 2.9.0
         
     | 
| 
       38 
34 
     | 
    
         
             
              type: :development
         
     | 
| 
       39 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       40 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       41 
     | 
    
         
            -
                none: false
         
     | 
| 
       42 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       43 
     | 
    
         
            -
                - -  
     | 
| 
      
 38 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       44 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       45 
40 
     | 
    
         
             
                    version: 2.9.0
         
     | 
| 
       46 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       47 
42 
     | 
    
         
             
              name: launchy
         
     | 
| 
       48 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       49 
     | 
    
         
            -
                none: false
         
     | 
| 
       50 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       51 
     | 
    
         
            -
                - -  
     | 
| 
      
 45 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       52 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       53 
47 
     | 
    
         
             
                    version: 0.3.2
         
     | 
| 
       54 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       55 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       56 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       57 
     | 
    
         
            -
                none: false
         
     | 
| 
       58 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - -  
     | 
| 
      
 52 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       60 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
54 
     | 
    
         
             
                    version: 0.3.2
         
     | 
| 
       62 
     | 
    
         
            -
            description:  
     | 
| 
       63 
     | 
    
         
            -
              of
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
              Ruby''s standard library. It more closely conforms to the relevant RFCs and
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
            description: |
         
     | 
| 
      
 56 
     | 
    
         
            +
              Addressable is a replacement for the URI implementation that is part of
         
     | 
| 
      
 57 
     | 
    
         
            +
              Ruby's standard library. It more closely conforms to the relevant RFCs and
         
     | 
| 
       67 
58 
     | 
    
         
             
              adds support for IRIs and URI templates.
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
            '
         
     | 
| 
       70 
59 
     | 
    
         
             
            email: bob@sporkmonger.com
         
     | 
| 
       71 
60 
     | 
    
         
             
            executables: []
         
     | 
| 
       72 
61 
     | 
    
         
             
            extensions: []
         
     | 
| 
         @@ -83,6 +72,7 @@ files: 
     | 
|
| 
       83 
72 
     | 
    
         
             
            - spec/addressable/net_http_compat_spec.rb
         
     | 
| 
       84 
73 
     | 
    
         
             
            - spec/addressable/template_spec.rb
         
     | 
| 
       85 
74 
     | 
    
         
             
            - spec/addressable/uri_spec.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
       86 
76 
     | 
    
         
             
            - data/unicode.data
         
     | 
| 
       87 
77 
     | 
    
         
             
            - tasks/clobber.rake
         
     | 
| 
       88 
78 
     | 
    
         
             
            - tasks/gem.rake
         
     | 
| 
         @@ -100,6 +90,7 @@ files: 
     | 
|
| 
       100 
90 
     | 
    
         
             
            homepage: http://addressable.rubyforge.org/
         
     | 
| 
       101 
91 
     | 
    
         
             
            licenses:
         
     | 
| 
       102 
92 
     | 
    
         
             
            - Apache License 2.0
         
     | 
| 
      
 93 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
       103 
94 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       104 
95 
     | 
    
         
             
            rdoc_options:
         
     | 
| 
       105 
96 
     | 
    
         
             
            - --main
         
     | 
| 
         @@ -107,21 +98,19 @@ rdoc_options: 
     | 
|
| 
       107 
98 
     | 
    
         
             
            require_paths:
         
     | 
| 
       108 
99 
     | 
    
         
             
            - lib
         
     | 
| 
       109 
100 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       110 
     | 
    
         
            -
              none: false
         
     | 
| 
       111 
101 
     | 
    
         
             
              requirements:
         
     | 
| 
       112 
     | 
    
         
            -
              - -  
     | 
| 
      
 102 
     | 
    
         
            +
              - - '>='
         
     | 
| 
       113 
103 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       114 
104 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       115 
105 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       116 
     | 
    
         
            -
              none: false
         
     | 
| 
       117 
106 
     | 
    
         
             
              requirements:
         
     | 
| 
       118 
     | 
    
         
            -
              - -  
     | 
| 
      
 107 
     | 
    
         
            +
              - - '>='
         
     | 
| 
       119 
108 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       120 
109 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       121 
110 
     | 
    
         
             
            requirements: []
         
     | 
| 
       122 
111 
     | 
    
         
             
            rubyforge_project: addressable
         
     | 
| 
       123 
     | 
    
         
            -
            rubygems_version:  
     | 
| 
      
 112 
     | 
    
         
            +
            rubygems_version: 2.0.3
         
     | 
| 
       124 
113 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       125 
     | 
    
         
            -
            specification_version:  
     | 
| 
      
 114 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
       126 
115 
     | 
    
         
             
            summary: URI Implementation
         
     | 
| 
       127 
116 
     | 
    
         
             
            test_files: []
         
     |