uri_template 0.2.0 → 0.2.1
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.
- data/CHANGELOG +3 -0
- data/lib/uri_template.rb +43 -35
- data/lib/uri_template/colon.rb +21 -21
- data/lib/uri_template/draft7.rb +137 -141
- data/lib/uri_template/utils.rb +47 -49
- data/uri_template.gemspec +3 -3
- metadata +12 -12
    
        data/lib/uri_template/utils.rb
    CHANGED
    
    | @@ -21,13 +21,13 @@ module URITemplate | |
| 21 21 | 
             
              # Initialize with a regexp and pass a string to :each.
         | 
| 22 22 | 
             
              # It will yield a string or a MatchData
         | 
| 23 23 | 
             
              class RegexpEnumerator
         | 
| 24 | 
            -
             | 
| 24 | 
            +
             | 
| 25 25 | 
             
                include Enumerable
         | 
| 26 | 
            -
             | 
| 26 | 
            +
             | 
| 27 27 | 
             
                def initialize(regexp)
         | 
| 28 28 | 
             
                  @regexp = regexp
         | 
| 29 29 | 
             
                end
         | 
| 30 | 
            -
             | 
| 30 | 
            +
             | 
| 31 31 | 
             
                def each(str)
         | 
| 32 32 | 
             
                  return Enumerator.new(self,:each,str) unless block_given?
         | 
| 33 33 | 
             
                  rest = str
         | 
| @@ -49,19 +49,19 @@ module URITemplate | |
| 49 49 | 
             
                  end
         | 
| 50 50 | 
             
                  return self
         | 
| 51 51 | 
             
                end
         | 
| 52 | 
            -
             | 
| 52 | 
            +
             | 
| 53 53 | 
             
              end
         | 
| 54 54 |  | 
| 55 55 | 
             
              # This error will be raised whenever an object could not be converted to a param string.
         | 
| 56 56 | 
             
              class Unconvertable < StandardError
         | 
| 57 | 
            -
             | 
| 57 | 
            +
             | 
| 58 58 | 
             
                attr_reader :object
         | 
| 59 | 
            -
             | 
| 59 | 
            +
             | 
| 60 60 | 
             
                def initialize(object)
         | 
| 61 61 | 
             
                  @object = object
         | 
| 62 62 | 
             
                  super("Could not convert the given object (#{Object.instance_method(:inspect).bind(@object).call() rescue '<????>'}) to a param since it doesn't respond to :to_param or :to_s.")
         | 
| 63 63 | 
             
                end
         | 
| 64 | 
            -
             | 
| 64 | 
            +
             | 
| 65 65 | 
             
              end
         | 
| 66 66 |  | 
| 67 67 | 
             
              # A collection of some utility methods.
         | 
| @@ -69,12 +69,12 @@ module URITemplate | |
| 69 69 | 
             
              # I will use the escape_utils library if available, but runs happily without.
         | 
| 70 70 | 
             
              #
         | 
| 71 71 | 
             
              module Utils
         | 
| 72 | 
            -
             | 
| 72 | 
            +
             | 
| 73 73 | 
             
                KCODE_UTF8 = (Regexp::KCODE_UTF8 rescue 0)
         | 
| 74 | 
            -
             | 
| 74 | 
            +
             | 
| 75 75 | 
             
                # Bundles some string encoding methods.
         | 
| 76 76 | 
             
                module StringEncoding
         | 
| 77 | 
            -
             | 
| 77 | 
            +
             | 
| 78 78 | 
             
                  # @method to_ascii(string)
         | 
| 79 79 | 
             
                  # converts a string to ascii
         | 
| 80 80 | 
             
                  # 
         | 
| @@ -85,7 +85,7 @@ module URITemplate | |
| 85 85 | 
             
                  def to_ascii_encode(str)
         | 
| 86 86 | 
             
                    str.encode(Encoding::ASCII)
         | 
| 87 87 | 
             
                  end
         | 
| 88 | 
            -
             | 
| 88 | 
            +
             | 
| 89 89 | 
             
                  # @method to_utf8(string)
         | 
| 90 90 | 
             
                  # converts a string to utf8
         | 
| 91 91 | 
             
                  # 
         | 
| @@ -96,15 +96,15 @@ module URITemplate | |
| 96 96 | 
             
                  def to_utf8_encode(str)
         | 
| 97 97 | 
             
                    str.encode(Encoding::UTF_8)
         | 
| 98 98 | 
             
                  end
         | 
| 99 | 
            -
             | 
| 99 | 
            +
             | 
| 100 100 | 
             
                  def to_ascii_fallback(str)
         | 
| 101 101 | 
             
                    str
         | 
| 102 102 | 
             
                  end
         | 
| 103 | 
            -
             | 
| 103 | 
            +
             | 
| 104 104 | 
             
                  def to_utf8_fallback(str)
         | 
| 105 105 | 
             
                    str
         | 
| 106 106 | 
             
                  end
         | 
| 107 | 
            -
             | 
| 107 | 
            +
             | 
| 108 108 | 
             
                  if "".respond_to?(:encode)
         | 
| 109 109 | 
             
                    # @private
         | 
| 110 110 | 
             
                    alias_method :to_ascii, :to_ascii_encode
         | 
| @@ -116,98 +116,97 @@ module URITemplate | |
| 116 116 | 
             
                    # @private
         | 
| 117 117 | 
             
                    alias_method :to_utf8, :to_utf8_fallback
         | 
| 118 118 | 
             
                  end
         | 
| 119 | 
            -
             | 
| 119 | 
            +
             | 
| 120 120 | 
             
                  public :to_ascii
         | 
| 121 121 | 
             
                  public :to_utf8
         | 
| 122 | 
            -
             | 
| 122 | 
            +
             | 
| 123 123 | 
             
                end
         | 
| 124 | 
            -
             | 
| 124 | 
            +
             | 
| 125 125 | 
             
                module Escaping
         | 
| 126 | 
            -
             | 
| 126 | 
            +
             | 
| 127 127 | 
             
                  # A pure escaping module, which implements escaping methods in pure ruby.
         | 
| 128 128 | 
             
                  # The performance is acceptable, but could be better with escape_utils.
         | 
| 129 129 | 
             
                  module Pure
         | 
| 130 | 
            -
             | 
| 130 | 
            +
             | 
| 131 131 | 
             
                    include StringEncoding
         | 
| 132 | 
            -
             | 
| 132 | 
            +
             | 
| 133 133 | 
             
                    # @private
         | 
| 134 134 | 
             
                    URL_ESCAPED = /([^A-Za-z0-9\-\._])/.freeze
         | 
| 135 | 
            -
             | 
| 135 | 
            +
             | 
| 136 136 | 
             
                    # @private
         | 
| 137 137 | 
             
                    URI_ESCAPED = /([^A-Za-z0-9!$&'()*+,.\/:;=?@\[\]_~])/.freeze
         | 
| 138 | 
            -
             | 
| 138 | 
            +
             | 
| 139 139 | 
             
                    # @private
         | 
| 140 | 
            -
                    PCT = /%( | 
| 141 | 
            -
             | 
| 140 | 
            +
                    PCT = /%([0-9a-fA-F]{2})/.freeze
         | 
| 141 | 
            +
             | 
| 142 142 | 
             
                    def escape_url(s)
         | 
| 143 143 | 
             
                      to_utf8(s.to_s).gsub(URL_ESCAPED){
         | 
| 144 144 | 
             
                        '%'+$1.unpack('H2'*$1.bytesize).join('%').upcase
         | 
| 145 145 | 
             
                      }
         | 
| 146 146 | 
             
                    end
         | 
| 147 | 
            -
             | 
| 147 | 
            +
             | 
| 148 148 | 
             
                    def escape_uri(s)
         | 
| 149 149 | 
             
                      to_utf8(s.to_s).gsub(URI_ESCAPED){
         | 
| 150 150 | 
             
                        '%'+$1.unpack('H2'*$1.bytesize).join('%').upcase
         | 
| 151 151 | 
             
                      }
         | 
| 152 152 | 
             
                    end
         | 
| 153 | 
            -
             | 
| 153 | 
            +
             | 
| 154 154 | 
             
                    def unescape_url(s)
         | 
| 155 155 | 
             
                      to_utf8( s.to_s.gsub('+',' ').gsub(PCT){
         | 
| 156 156 | 
             
                        $1.to_i(16).chr
         | 
| 157 157 | 
             
                      } )
         | 
| 158 158 | 
             
                    end
         | 
| 159 | 
            -
             | 
| 159 | 
            +
             | 
| 160 160 | 
             
                    def unescape_uri(s)
         | 
| 161 161 | 
             
                      to_utf8( s.to_s.gsub(PCT){
         | 
| 162 162 | 
             
                        $1.to_i(16).chr
         | 
| 163 163 | 
             
                      })
         | 
| 164 164 | 
             
                    end
         | 
| 165 | 
            -
             | 
| 165 | 
            +
             | 
| 166 166 | 
             
                    def using_escape_utils?
         | 
| 167 167 | 
             
                      false
         | 
| 168 168 | 
             
                    end
         | 
| 169 | 
            -
             | 
| 169 | 
            +
             | 
| 170 170 | 
             
                  end
         | 
| 171 | 
            -
             | 
| 171 | 
            +
             | 
| 172 172 | 
             
                if defined? EscapeUtils
         | 
| 173 | 
            -
             | 
| 173 | 
            +
             | 
| 174 174 | 
             
                  # A escaping module, which is backed by escape_utils.
         | 
| 175 175 | 
             
                  # The performance is good, espacially for strings with many escaped characters.
         | 
| 176 176 | 
             
                  module EscapeUtils
         | 
| 177 | 
            -
             | 
| 177 | 
            +
             | 
| 178 178 | 
             
                    include StringEncoding
         | 
| 179 | 
            -
             | 
| 179 | 
            +
             | 
| 180 180 | 
             
                    include ::EscapeUtils
         | 
| 181 | 
            -
             | 
| 181 | 
            +
             | 
| 182 182 | 
             
                    def using_escape_utils?
         | 
| 183 183 | 
             
                      true
         | 
| 184 184 | 
             
                    end
         | 
| 185 | 
            -
             | 
| 185 | 
            +
             | 
| 186 186 | 
             
                    def escape_url(s)
         | 
| 187 187 | 
             
                      super(to_utf8(s)).gsub('+','%20')
         | 
| 188 188 | 
             
                    end
         | 
| 189 | 
            -
             | 
| 189 | 
            +
             | 
| 190 190 | 
             
                    def escape_uri(s)
         | 
| 191 191 | 
             
                      super(to_utf8(s))
         | 
| 192 192 | 
             
                    end
         | 
| 193 | 
            -
             | 
| 193 | 
            +
             | 
| 194 194 | 
             
                    def unescape_url(s)
         | 
| 195 195 | 
             
                      super(to_ascii(s))
         | 
| 196 196 | 
             
                    end
         | 
| 197 | 
            -
             | 
| 197 | 
            +
             | 
| 198 198 | 
             
                    def unescape_uri(s)
         | 
| 199 199 | 
             
                      super(to_ascii(s))
         | 
| 200 200 | 
             
                    end
         | 
| 201 | 
            -
             | 
| 201 | 
            +
             | 
| 202 202 | 
             
                  end
         | 
| 203 | 
            -
             | 
| 203 | 
            +
             | 
| 204 204 | 
             
                end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                
         | 
| 205 | 
            +
             | 
| 207 206 | 
             
                end
         | 
| 208 | 
            -
             | 
| 207 | 
            +
             | 
| 209 208 | 
             
                include StringEncoding
         | 
| 210 | 
            -
             | 
| 209 | 
            +
             | 
| 211 210 | 
             
                if Escaping.const_defined? :EscapeUtils
         | 
| 212 211 | 
             
                  include Escaping::EscapeUtils
         | 
| 213 212 | 
             
                  puts "Using escape_utils." if $VERBOSE
         | 
| @@ -215,7 +214,7 @@ module URITemplate | |
| 215 214 | 
             
                  include Escaping::Pure
         | 
| 216 215 | 
             
                  puts "Not using escape_utils." if $VERBOSE
         | 
| 217 216 | 
             
                end
         | 
| 218 | 
            -
             | 
| 217 | 
            +
             | 
| 219 218 | 
             
                # Converts an object to a param value.
         | 
| 220 219 | 
             
                # Tries to call :to_param and then :to_s on that object.
         | 
| 221 220 | 
             
                # @raise Unconvertable if the object could not be converted.
         | 
| @@ -237,8 +236,7 @@ module URITemplate | |
| 237 236 | 
             
                rescue NoMethodError
         | 
| 238 237 | 
             
                  raise Unconvertable.new(object)
         | 
| 239 238 | 
             
                end
         | 
| 240 | 
            -
             | 
| 241 | 
            -
                
         | 
| 239 | 
            +
             | 
| 242 240 | 
             
                # Returns true when the given value is an array and it only consists of arrays with two items.
         | 
| 243 241 | 
             
                # This useful when using a hash is not ideal, since it doesn't allow duplicate keys.
         | 
| 244 242 | 
             
                # @example
         | 
| @@ -274,9 +272,9 @@ module URITemplate | |
| 274 272 | 
             
                    return x
         | 
| 275 273 | 
             
                  end
         | 
| 276 274 | 
             
                end
         | 
| 277 | 
            -
             | 
| 275 | 
            +
             | 
| 278 276 | 
             
                extend self
         | 
| 279 | 
            -
             | 
| 277 | 
            +
             | 
| 280 278 | 
             
              end
         | 
| 281 279 |  | 
| 282 280 | 
             
            end
         | 
    
        data/uri_template.gemspec
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |s|
         | 
| 2 2 | 
             
              s.name = 'uri_template'
         | 
| 3 | 
            -
              s.version = '0.2. | 
| 4 | 
            -
              s.date = '2011-12- | 
| 3 | 
            +
              s.version = '0.2.1'
         | 
| 4 | 
            +
              s.date = '2011-12-30'
         | 
| 5 5 | 
             
              s.authors = ["HannesG"]
         | 
| 6 6 | 
             
              s.email = %q{hannes.georg@googlemail.com}
         | 
| 7 7 | 
             
              s.summary = 'A templating system for URIs.'
         | 
| 8 8 | 
             
              s.homepage = 'http://github.com/hannesg/uri_template'
         | 
| 9 | 
            -
              s.description = 'A templating system for URIs, which implements http://tools.ietf.org/html/draft-gregorio-uritemplate-07 . An implementation of an older version of that spec is known as addressable. This gem however is intended to be extended when newer specs evolve. For now only draft 7  | 
| 9 | 
            +
              s.description = 'A templating system for URIs, which implements http://tools.ietf.org/html/draft-gregorio-uritemplate-07 . An implementation of an older version of that spec is known as addressable. This gem however is intended to be extended when newer specs evolve. For now only draft 7 and a simple colon based format are supported.'
         | 
| 10 10 |  | 
| 11 11 | 
             
              s.require_paths = ['lib']
         | 
| 12 12 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: uri_template
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011-12- | 
| 12 | 
            +
            date: 2011-12-30 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rspec
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &7325660 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :development
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *7325660
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: yard
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &7325220 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :development
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *7325220
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: rake
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &7324800 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :development
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *7324800
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: bundler
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &7324380 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ! '>='
         | 
| @@ -54,11 +54,11 @@ dependencies: | |
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 58 | 
            -
            description:  | 
| 57 | 
            +
              version_requirements: *7324380
         | 
| 58 | 
            +
            description: A templating system for URIs, which implements http://tools.ietf.org/html/draft-gregorio-uritemplate-07
         | 
| 59 59 | 
             
              . An implementation of an older version of that spec is known as addressable. This
         | 
| 60 60 | 
             
              gem however is intended to be extended when newer specs evolve. For now only draft
         | 
| 61 | 
            -
              7  | 
| 61 | 
            +
              7 and a simple colon based format are supported.
         | 
| 62 62 | 
             
            email: hannes.georg@googlemail.com
         | 
| 63 63 | 
             
            executables: []
         | 
| 64 64 | 
             
            extensions: []
         |