class Ramaze::Helper::Upload::UploadedFile

This class represents an uploaded file.

@author Lars Olsson @since 18-08-2011

Attributes

filename[R]

Suggested file name @return [String]

type[R]

MIME-type @return [String]

Public Class Methods

new(filename, type, tempfile, options) click to toggle source

Initializes a new Ramaze::Helper::Upload::UploadedFile object.

@param [String] filename Suggested file name @param [String] type MIME-type @param [File] tempfile temporary file @param [Hash] options Options for uploaded files. Options supported

match those available to
Ramaze::Helper::Upload::ClassMethods#upload_options

@return [Ramaze::Helper::Upload::UploadedFile] A new

Ramaze::Helper::Upload::UploadedFile object

@see save @see Ramaze::Helper::Upload::ClassMethods#upload_options

# File lib/ramaze/helper/upload.rb, line 378
def initialize(filename, type, tempfile, options)
  @filename = File.basename(filename)
  @type     = type
  @tempfile = tempfile
  @realfile = nil

  trait :options => options
end

Public Instance Methods

filename=(name) click to toggle source

Changes the suggested filename of this Ramaze::Helper::Upload::UploadedFile. name should be a string representing the filename (only the filename, not a complete path), but if you provide a complete path this method it will try to identify the filename and use that instead.

@param [String] name The new suggested filename.

# File lib/ramaze/helper/upload.rb, line 396
def filename=(name)
  @filename = File.basename(name)
end
path() click to toggle source

Returns the path of the Ramaze::Helper::Upload::UploadedFile object. The method will always return nil before save has been called on the Ramaze::Helper::Upload::UploadedFile object.

@return [String|nil]

# File lib/ramaze/helper/upload.rb, line 407
def path
  return self.saved? ? @realfile.path : nil
end
save(path = nil, options = {}) click to toggle source

Saves the Ramaze::Helper::Upload::UploadedFile.

If path is not set, the method checks whether there exists default options for the path and tries to use that instead.

If you need to override any options set in the controller (using upload_options) you can set the corresponding option in options to override the behavior for this particular Ramaze::Helper::Upload::UploadedFile object.

@param [String] path Path where the

Ramaze::Helper::Upload::UploadedFile will be saved

@param [Hash] options Options for uploaded files. Options supported

match those available to
Ramaze::Helper::Upload::ClassMethods#upload_options

@raise [StandardError] Will be raised if the save operation fails. @see initialize @see Ramaze::Helper::Upload::ClassMethods#upload_options

# File lib/ramaze/helper/upload.rb, line 431
def save(path = nil, options = {})
  # Merge options
  opts = trait[:options].merge(options)

  unless path
    # No path was provided, use info stored elsewhere to try to build
    # the path
    unless opts[:default_upload_dir]
      raise StandardError.new('Unable to save file, no dirname given')
    end

    unless @filename
      raise StandardError.new('Unable to save file, no filename given')
    end

    # Check to see if a proc or a string was used for the
    # default_upload_dir parameter. If it was a proc, call the proc and
    # use the result as the directory part of the path. If a string was
    # used, use the string directly as the directory part of the path.
    dn = opts[:default_upload_dir]

    if dn.respond_to?(:call)
      dn = dn.call
    end

    path = File.join(dn, @filename)
  end

  path = File.expand_path(path)

  # Abort if file altready exists and overwrites are not allowed
  if File.exists?(path) and !opts[:allow_overwrite]
    raise StandardError.new('Unable to overwrite existing file')
  end

  # Confirm that we can read source file
  unless File.readable?(@tempfile.path)
    raise StandardError.new('Unable to read temporary file')
  end

  # Confirm that we can write to the destination file
  unless (File.exists?(path) and File.writable?(path))            or (File.exists?(File.dirname(path))              and File.writable?(File.dirname(path)))
    raise StandardError.new(
      "Unable to save file to #{path}. Path is not writable"
    )
  end

  # If supported, use IO,copy_stream. If not, require fileutils
  # and use the same method from there
  if IO.respond_to?(:copy_stream)
    IO.copy_stream(@tempfile, path)
  else
    require 'fileutils'
    File.open(@tempfile.path, 'rb') do |src|
      File.open(path, 'wb') do |dest|
        FileUtils.copy_stream(src, dest)
      end
    end
  end

  # Update the realfile property, indicating that the file has been
  # saved
  @realfile = File.new(path)
  # But no need to keep it open
  @realfile.close

  # If the unlink_tempfile option is set to true, delete the temporary
  # file created by Rack
  unlink_tempfile if opts[:unlink_tempfile]
end
saved?() click to toggle source

Returns whether the Ramaze::Helper::Upload::UploadedFile has been saved or not.

@return [Boolean]

# File lib/ramaze/helper/upload.rb, line 510
def saved?
  return !@realfile.nil?
end