diff options
| author | Stormwind <stormwind@stormwinds-page.de> | 2012-12-22 13:09:15 +0100 | 
|---|---|---|
| committer | Stormwind <stormwind@stormwinds-page.de> | 2012-12-22 13:09:15 +0100 | 
| commit | bfca378f8f6c24fac252ac94b3ce6d4e0dd75d9d (patch) | |
| tree | 3902c0497c182f10e977720a3fa50a84db5c3ea2 | |
| parent | 443958f8859a47751f7e57deff6b3eda0c13e5ad (diff) | |
Add first implementation of decode_www_form_18
Seperates now foo=bar&bar=foo;baz=foo queries. But does not fix url
encoded strings and such things.
Also added testcase for an empty query string.
| -rw-r--r-- | lib/zero/patches/uri.rb | 27 | ||||
| -rw-r--r-- | spec/unit/uri/parse_query_string_spec.rb | 8 | 
2 files changed, 34 insertions, 1 deletions
| diff --git a/lib/zero/patches/uri.rb b/lib/zero/patches/uri.rb index fb821b2..2545e34 100644 --- a/lib/zero/patches/uri.rb +++ b/lib/zero/patches/uri.rb @@ -14,7 +14,32 @@ module URI        end        # else split the query self -      return [] +      return self.decode_www_form_18 query +    end + +    # Own implementation of decode_www_form. +    # Shall behave almost like the original method, but without any encoding +    # stuff. +    # +    # @param [String] query The query string +    # @return [Array] Parsed query +    # +    def self.decode_www_form_18(query) +      return [] if query.empty? +      unless query.match '=' +        raise ArgumentError, +          "invalid data of application/x-www-form-urlencoded (#{query})" +      end +      parsed = [] +      # breakes the string at & and ; +      query.split(/[&;]/).each do |query_part| +        # breakes the string parts at = +        key, value = query_part.split('=') +        # append the key value pair on the result array +        parsed << [key, value] +      end +      # return result array +      return parsed      end  =begin diff --git a/spec/unit/uri/parse_query_string_spec.rb b/spec/unit/uri/parse_query_string_spec.rb index a2c078b..a165cf3 100644 --- a/spec/unit/uri/parse_query_string_spec.rb +++ b/spec/unit/uri/parse_query_string_spec.rb @@ -108,4 +108,12 @@ describe URI, '#parse_query_string' do      result.should eq([['foo[]', 'foo'], ['foo[]', 'bar']])    end +  it 'returns an empty array, if query string is empty' do +    result = URI::parse_query_string("") + +    result.should eq([]) +  end + +  # what happend on more than one = without an & or ; in between? +  end | 
