aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r--actionpack/lib/action_controller/integration.rb11
-rw-r--r--actionpack/lib/action_controller/middleware_stack.rb2
-rw-r--r--actionpack/lib/action_controller/rack_ext.rb22
-rw-r--r--actionpack/lib/action_controller/rewindable_input.rb10
4 files changed, 31 insertions, 14 deletions
diff --git a/actionpack/lib/action_controller/integration.rb b/actionpack/lib/action_controller/integration.rb
index 5b08e30d49..163ba84a3e 100644
--- a/actionpack/lib/action_controller/integration.rb
+++ b/actionpack/lib/action_controller/integration.rb
@@ -2,17 +2,6 @@ require 'stringio'
require 'uri'
require 'active_support/test_case'
-# Monkey patch Rack::Lint to support rewind
-module Rack
- class Lint
- class InputWrapper
- def rewind
- @input.rewind
- end
- end
- end
-end
-
module ActionController
module Integration #:nodoc:
# An integration Session instance represents a set of requests and responses
diff --git a/actionpack/lib/action_controller/middleware_stack.rb b/actionpack/lib/action_controller/middleware_stack.rb
index 2bccba2ba1..b94bf6ec4a 100644
--- a/actionpack/lib/action_controller/middleware_stack.rb
+++ b/actionpack/lib/action_controller/middleware_stack.rb
@@ -32,6 +32,8 @@ module ActionController
else
@klass.to_s.constantize
end
+ rescue NameError
+ @klass
end
def active?
diff --git a/actionpack/lib/action_controller/rack_ext.rb b/actionpack/lib/action_controller/rack_ext.rb
new file mode 100644
index 0000000000..3b142307e9
--- /dev/null
+++ b/actionpack/lib/action_controller/rack_ext.rb
@@ -0,0 +1,22 @@
+module Rack
+ module Utils
+ module Multipart
+ class << self
+ def parse_multipart_with_rewind(env)
+ result = parse_multipart_without_rewind(env)
+
+ begin
+ env['rack.input'].rewind if env['rack.input'].respond_to?(:rewind)
+ rescue Errno::ESPIPE
+ # Handles exceptions raised by input streams that cannot be rewound
+ # such as when using plain CGI under Apache
+ end
+
+ result
+ end
+
+ alias_method_chain :parse_multipart, :rewind
+ end
+ end
+ end
+end
diff --git a/actionpack/lib/action_controller/rewindable_input.rb b/actionpack/lib/action_controller/rewindable_input.rb
index 296d8aed22..058453ea68 100644
--- a/actionpack/lib/action_controller/rewindable_input.rb
+++ b/actionpack/lib/action_controller/rewindable_input.rb
@@ -15,15 +15,19 @@ module ActionController
@io.rewind
end
+ def string
+ @string
+ end
+
def method_missing(method, *args, &block)
@io.send(method, *args, &block)
end
private
def read_original_io
- unless @str
- @str = @io.read
- @io = StringIO.new(@str)
+ unless @string
+ @string = @io.read
+ @io = StringIO.new(@string)
end
end
end