aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-04-20 18:34:43 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-04-20 18:34:43 -0700
commitb10fb7e7bcb5efea6c93ae52bad125887cfc235c (patch)
treebda34b186b63ac607e7387df935e4d67f3b5123b /actionpack/lib
parent164a94d0bc8c9124ab820506e5ad79496395c026 (diff)
parentde0ea3866370ec61581f910cf393a3cc97eba32f (diff)
downloadrails-b10fb7e7bcb5efea6c93ae52bad125887cfc235c.tar.gz
rails-b10fb7e7bcb5efea6c93ae52bad125887cfc235c.tar.bz2
rails-b10fb7e7bcb5efea6c93ae52bad125887cfc235c.zip
Merge branch 'master' of git@github.com:rails/rails
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_dispatch/middleware/rewindable_input.rb25
1 files changed, 8 insertions, 17 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/rewindable_input.rb b/actionpack/lib/action_dispatch/middleware/rewindable_input.rb
index 725414efc4..c818f28cce 100644
--- a/actionpack/lib/action_dispatch/middleware/rewindable_input.rb
+++ b/actionpack/lib/action_dispatch/middleware/rewindable_input.rb
@@ -1,27 +1,18 @@
module ActionDispatch
class RewindableInput
- class RewindableIO < ActiveSupport::BasicObject
- def initialize(io)
- @io = io
- @rewindable = io.is_a?(::StringIO)
- end
-
- def method_missing(method, *args, &block)
- unless @rewindable
- @io = ::StringIO.new(@io.read)
- @rewindable = true
- end
-
- @io.__send__(method, *args, &block)
- end
- end
-
def initialize(app)
@app = app
end
def call(env)
- env['rack.input'] = RewindableIO.new(env['rack.input'])
+ begin
+ env['rack.input'].rewind
+ rescue NoMethodError, Errno::ESPIPE
+ # Handles exceptions raised by input streams that cannot be rewound
+ # such as when using plain CGI under Apache
+ env['rack.input'] = StringIO.new(env['rack.input'].read)
+ end
+
@app.call(env)
end
end