diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 3ae7a1d0..75d9069f 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -14,6 +14,13 @@ module Sinatra def accept @env['HTTP_ACCEPT'].split(',').map { |a| a.strip } end + + # Override Rack 0.9.x's #params implementation (see #72 in lighthouse) + def params + self.GET.update(self.POST) + rescue EOFError => boom + self.GET + end end class Response < Rack::Response diff --git a/test/request_test.rb b/test/request_test.rb index b6f16ee1..7fb1b15a 100644 --- a/test/request_test.rb +++ b/test/request_test.rb @@ -6,4 +6,13 @@ describe 'Sinatra::Request' do assert request.respond_to?(:user_agent) assert_equal 'Test', request.user_agent end + + it 'parses POST params when Content-Type is form-dataish' do + request = Sinatra::Request.new( + 'REQUEST_METHOD' => 'PUT', + 'CONTENT_TYPE' => 'application/x-www-form-urlencoded', + 'rack.input' => StringIO.new('foo=bar') + ) + assert_equal 'bar', request.params['foo'] + end end