aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGibheer <gibheer@gmail.com>2012-11-30 14:46:52 +0100
committerGibheer <gibheer@gmail.com>2012-11-30 14:46:52 +0100
commitec446a53b1a169a9c43c9821546d1b181c603bab (patch)
treeefb709a667b683119a0cda0341d2e87e02a807b2
parent9cea623595a7347289186dda4273ee65dffea8cb (diff)
use URI to get parameters
-rw-r--r--lib/zero/request/parameter.rb4
-rw-r--r--spec/unit/request/parameter/payload_spec.rb15
-rw-r--r--spec/unit/request/parameter/query_spec.rb11
3 files changed, 21 insertions, 9 deletions
diff --git a/lib/zero/request/parameter.rb b/lib/zero/request/parameter.rb
index cac9915..a9a3abe 100644
--- a/lib/zero/request/parameter.rb
+++ b/lib/zero/request/parameter.rb
@@ -88,9 +88,7 @@ module Zero
# @param query [String] the query string
# @return [Hash] the key/valuie pairs
def parse_string(query)
- params = query.split('&')
- params.map! {|part| part.split('=') }
- Hash[params]
+ Hash[URI.decode_www_form(query)]
end
end
end
diff --git a/spec/unit/request/parameter/payload_spec.rb b/spec/unit/request/parameter/payload_spec.rb
index df9f02d..af1d2ab 100644
--- a/spec/unit/request/parameter/payload_spec.rb
+++ b/spec/unit/request/parameter/payload_spec.rb
@@ -3,17 +3,17 @@ require 'spec_helper'
describe Zero::Request::Parameter, '#payload' do
subject { Zero::Request::Parameter.new(env) }
- context "without parameters" do
+ context 'without parameters' do
let(:env) { EnvGenerator.get('/foo') }
its(:payload) { should == {} }
end
- context "with a query string" do
+ context 'with a query string' do
let(:env) { EnvGenerator.get('/foo?bar=baz') }
its(:payload) { should == {} }
end
- context "with a post body" do
+ context 'with a post body' do
let(:env) do
EnvGenerator.post('/foo', {
:input => 'bar=baz', 'CONTENT_TYPE' => 'multipart/form-data'
@@ -21,4 +21,13 @@ describe Zero::Request::Parameter, '#payload' do
end
its(:payload) { should == {'bar' => 'baz'} }
end
+
+ context 'with special characters' do
+ let(:env) do
+ EnvGenerator.post('/foo', {
+ :input => 'bar=foo%20bar', 'CONTENT_TYPE' => 'multipart/form-data'
+ })
+ end
+ its(:payload) { should == {'bar' => 'foo bar'} }
+ end
end
diff --git a/spec/unit/request/parameter/query_spec.rb b/spec/unit/request/parameter/query_spec.rb
index 5a3964b..940e80e 100644
--- a/spec/unit/request/parameter/query_spec.rb
+++ b/spec/unit/request/parameter/query_spec.rb
@@ -3,18 +3,23 @@ require 'spec_helper'
describe Zero::Request::Parameter, '#query' do
subject { Zero::Request::Parameter.new(env) }
- context "without parameters" do
+ context 'without parameters' do
let(:env) { EnvGenerator.get('/foo') }
its(:query) { should == {} }
end
- context "with a query string" do
+ context 'with a query string' do
let(:env) { EnvGenerator.get('/foo?bar=baz') }
its(:query) { should == {'bar' => 'baz'} }
end
- context "with a post body" do
+ context 'with a post body' do
let(:env) { EnvGenerator.post('/foo', {:input => 'bar=baz'}) }
its(:query) { should == {} }
end
+
+ context 'with special characters' do
+ let(:env) { EnvGenerator.get('/foo?bar=foo%20bar') }
+ its(:query) { should == {'bar' => 'foo bar'} }
+ end
end