diff options
| author | Gibheer <gibheer@gmail.com> | 2012-11-30 14:46:52 +0100 | 
|---|---|---|
| committer | Gibheer <gibheer@gmail.com> | 2012-11-30 14:46:52 +0100 | 
| commit | ec446a53b1a169a9c43c9821546d1b181c603bab (patch) | |
| tree | efb709a667b683119a0cda0341d2e87e02a807b2 | |
| parent | 9cea623595a7347289186dda4273ee65dffea8cb (diff) | |
use URI to get parameters
| -rw-r--r-- | lib/zero/request/parameter.rb | 4 | ||||
| -rw-r--r-- | spec/unit/request/parameter/payload_spec.rb | 15 | ||||
| -rw-r--r-- | spec/unit/request/parameter/query_spec.rb | 11 | 
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 | 
