Sha256: 02cf593ab565a3f9b455438c7d7b171f9fc87b8ed0a3902626f4a6d3232fce4d

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

module Mack
  # Wraps the Hash that Rack creates when you post a file.
  class Request::UploadedFile
    
    # The name of the file uploaded
    attr_reader :file_name
    # The type of the file uploaded
    attr_reader :file_type
    # The name of the parameter used to upload the file
    attr_reader :param_name
    # A File object representing the uploaded file.
    attr_reader :temp_file
    attr_reader :head
    # The destination path you want the file to be saved to.
    attr_accessor :destination_path
    
    def initialize(param, destination_path = nil)
      @file_name = param[:filename]
      @file_type = param[:type]
      @param_name = param[:name]
      @temp_file = param[:tempfile]
      @head = param[:head]
      @destination_path = nil
    end
    
    # Set the destination_path you want the file to be saved to.
    # This can be a full path, or an array that will get joined with File.join.
    # 
    # Examples:
    #   @uploaded_file.destination_path = "/path/to/my/destination/foo.jpg"
    #   @uploaded_file.destination_path = ["path", "to", "my", "destination", "foo.jpg"]
    def destination_path=(path)
      if path.is_a?(Array)
        @destination_path = File.join(path)
      else
        @destination_path = path
      end
    end
    
    # Takes/sets the destination_path and then calls the save method.
    def save_to(*destination_path)
      self.destination_path = *destination_path
      save
    end
    
    # Saves the temp_file to the destination_path. This method will create the directory
    # tree of the destination_path if it does not exists.
    # Raises ArgumentError if the destination_path has not been set.
    def save
      raise ArgumentError.new("Destination path must be set!") if self.destination_path.blank?
      FileUtils.mkdir_p(File.dirname(self.destination_path))
      FileUtils.mv(self.temp_file.path, self.destination_path)
    end
    
  end
end # :nodoc:

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mack-0.4.7 lib/sea_level/uploaded_file.rb