aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2012-09-22 23:56:03 +0200
committerXavier Noria <fxn@hashref.com>2012-09-22 23:56:39 +0200
commit3b0da715c5c8cfc97071c4e640c9e00a2895113a (patch)
treec83645d15d8d815c3a5b565f19210ac90dfd9c5a /actionpack
parent512eb971e409d3444d5a049ab20c353bde274357 (diff)
downloadrails-3b0da715c5c8cfc97071c4e640c9e00a2895113a.tar.gz
rails-3b0da715c5c8cfc97071c4e640c9e00a2895113a.tar.bz2
rails-3b0da715c5c8cfc97071c4e640c9e00a2895113a.zip
documents ActionDispatch::Http::UploadedFile
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/http/upload.rb61
1 files changed, 55 insertions, 6 deletions
diff --git a/actionpack/lib/action_dispatch/http/upload.rb b/actionpack/lib/action_dispatch/http/upload.rb
index d50c8cad17..79437d6e85 100644
--- a/actionpack/lib/action_dispatch/http/upload.rb
+++ b/actionpack/lib/action_dispatch/http/upload.rb
@@ -1,9 +1,28 @@
module ActionDispatch
module Http
+ # Models uploaded files.
+ #
+ # The actual file is accessible via the +tempfile+ accessor, though some
+ # of its interface is available directly for convenience.
+ #
+ # Uploaded files are temporary files whose lifespan is one request. When
+ # the object is finalized Ruby unlinks the file, so there is not need to
+ # clean them with a separate maintenance task.
class UploadedFile
- attr_accessor :original_filename, :content_type, :tempfile, :headers
+ # The basename of the file in the client.
+ attr_accessor :original_filename
- def initialize(hash)
+ # A string with the MIME type of the file.
+ attr_accessor :content_type
+
+ # A +Tempfile+ object with the actual uploaded file. Note that some of
+ # its interface is available directly.
+ attr_accessor :tempfile
+
+ # TODO.
+ attr_accessor :headers
+
+ def initialize(hash) # :nodoc:
@tempfile = hash[:tempfile]
raise(ArgumentError, ':tempfile is required') unless @tempfile
@@ -12,9 +31,39 @@ module ActionDispatch
@headers = hash[:head]
end
- # Delegate these methods to the tempfile.
- [:read, :open, :close, :path, :rewind, :size, :eof?].each do |method|
- class_eval "def #{method}(*args); @tempfile.#{method}(*args); end"
+ # Shortcut for +tempfile.read+.
+ def read(length=nil, buffer=nil)
+ @tempfile.read(length, buffer)
+ end
+
+ # Shortcut for +tempfile.open+.
+ def open
+ @tempfile.open
+ end
+
+ # Shortcut for +tempfile.close+.
+ def close(unlink_now=false)
+ @tempfile.close(unlink_now)
+ end
+
+ # Shortcut for +tempfile.path+.
+ def path
+ @tempfile.path
+ end
+
+ # Shortcut for +tempfile.rewind+.
+ def rewind
+ @tempfile.rewind
+ end
+
+ # Shortcut for +tempfile.size+.
+ def size
+ @tempfile.size
+ end
+
+ # Shortcut for +tempfile.eof?+.
+ def eof?
+ @tempfile.eof?
end
private
@@ -25,7 +74,7 @@ module ActionDispatch
end
end
- module Upload
+ module Upload # :nodoc:
# Convert nested Hash to HashWithIndifferentAccess and replace
# file upload hash with UploadedFile objects
def normalize_parameters(value)