aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_dispatch/http/upload.rb18
-rw-r--r--actionpack/test/dispatch/uploaded_file_test.rb18
2 files changed, 23 insertions, 13 deletions
diff --git a/actionpack/lib/action_dispatch/http/upload.rb b/actionpack/lib/action_dispatch/http/upload.rb
index 49465d820e..bfbe7c5305 100644
--- a/actionpack/lib/action_dispatch/http/upload.rb
+++ b/actionpack/lib/action_dispatch/http/upload.rb
@@ -2,27 +2,19 @@ require 'active_support/core_ext/object/blank'
module ActionDispatch
module Http
- class UploadedFile < Tempfile
+ class UploadedFile
attr_accessor :original_filename, :content_type, :tempfile, :headers
def initialize(hash)
@original_filename = hash[:filename]
@content_type = hash[:type]
@headers = hash[:head]
-
- # To the untrained eye, this may appear as insanity. Given the alternatives,
- # such as busting the method cache on every request or breaking backwards
- # compatibility with is_a?(Tempfile), this solution is the best available
- # option.
- #
- # TODO: Deprecate is_a?(Tempfile) and define a real API for this parameter
- tempfile = hash[:tempfile]
- tempfile.instance_variables.each do |ivar|
- instance_variable_set(ivar, tempfile.instance_variable_get(ivar))
- end
+ @tempfile = hash[:tempfile]
end
- alias local_path path
+ def method_missing(name, *args, &block)
+ @tempfile.send(name, *args, &block)
+ end
end
module Upload
diff --git a/actionpack/test/dispatch/uploaded_file_test.rb b/actionpack/test/dispatch/uploaded_file_test.rb
index def6289fb3..d04d5a8650 100644
--- a/actionpack/test/dispatch/uploaded_file_test.rb
+++ b/actionpack/test/dispatch/uploaded_file_test.rb
@@ -21,5 +21,23 @@ module ActionDispatch
uf = Http::UploadedFile.new(:tempfile => 'foo')
assert_equal 'foo', uf.tempfile
end
+
+ def test_delegates_to_tempfile
+ tf = Class.new { def tenderlove; 'thunderhorse' end }
+ uf = Http::UploadedFile.new(:tempfile => tf.new)
+ assert_equal 'thunderhorse', uf.tenderlove
+ end
+
+ def test_delegates_to_tempfile_with_params
+ tf = Class.new { def tenderlove *args; args end }
+ uf = Http::UploadedFile.new(:tempfile => tf.new)
+ assert_equal %w{ thunder horse }, uf.tenderlove(*%w{ thunder horse })
+ end
+
+ def test_delegates_to_tempfile_with_block
+ tf = Class.new { def tenderlove; yield end }
+ uf = Http::UploadedFile.new(:tempfile => tf.new)
+ assert_equal('thunderhorse', uf.tenderlove { 'thunderhorse' })
+ end
end
end