Sha256: 1120c25f5f5dc21a660bd7756f389ef58b9699091059c386092d68ab1269c10c

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

module CarrierWave
  module Downloader
    class RemoteFile
      attr_reader :file

      def initialize(file)
        @file = file.is_a?(String) ? StringIO.new(file) : file
      end

      def original_filename
        filename = filename_from_header || filename_from_uri
        mime_type = MiniMime.lookup_by_content_type(file.content_type)
        unless File.extname(filename).present? || mime_type.blank?
          filename = "#{filename}.#{mime_type.extension}"
        end
        filename
      end

      def respond_to?(*args)
        super || file.respond_to?(*args)
      end

      private

      def filename_from_header
        return nil unless file.meta.include? 'content-disposition'

        match = file.meta['content-disposition'].match(/filename=(?:"([^"]+)"|([^";]+))/)
        return nil unless match

        match[1].presence || match[2].presence
      end

      def filename_from_uri
        CGI.unescape(File.basename(file.base_uri.path))
      end

      def method_missing(*args, &block)
        file.send(*args, &block)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
carrierwave-2.1.0 lib/carrierwave/downloader/remote_file.rb
carrierwave-2.0.2 lib/carrierwave/downloader/remote_file.rb