# Hack ActionController::DataStreaming to allow streaming from a file handle
module ActionController
  module DataStreaming
    alias old_send_file send_file

    def send_file(file, options = {})
      if file.is_a?(File) || file.is_a?(Tempfile)
        headers["Content-Length"] ||= file.size.to_s

        options[:filename] ||= File.basename(file.path) unless options[:url_based_filename]
        send_file_headers! options

        self.status = options[:status] || 200
        self.content_type = options[:content_type] if options.key?(:content_type)
        self.response_body = file
      else
        headers["Content-Length"] ||= File.size(file).to_s

        old_send_file(file, options)
      end
    end
  end
end
