aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/rewindable_input.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-04-20 20:06:30 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-04-20 20:06:30 -0700
commit696375ac628bd41edf3a8c8c00dde196696f4add (patch)
tree0b8ca850e462d5d2722ea4d2217d9c132a0e3cb1 /actionpack/lib/action_dispatch/middleware/rewindable_input.rb
parent685a53a360d0d8fc4a9f3b49f900621c940a71f2 (diff)
parentb10fb7e7bcb5efea6c93ae52bad125887cfc235c (diff)
downloadrails-696375ac628bd41edf3a8c8c00dde196696f4add.tar.gz
rails-696375ac628bd41edf3a8c8c00dde196696f4add.tar.bz2
rails-696375ac628bd41edf3a8c8c00dde196696f4add.zip
Merge branch 'master' into cherry
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/rewindable_input.rb')
-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