aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/zero/patches/uri.rb27
-rw-r--r--spec/unit/uri/parse_query_string_spec.rb8
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