class Agave::Upload::File

Constants

IMAGE_FORMATS

Attributes

client[R]
source[R]

Public Class Methods

new(client, source) click to toggle source
# File lib/agave/upload/file.rb, line 15
def initialize(client, source)
  @client = client
  @source = source
end

Public Instance Methods

file() click to toggle source
# File lib/agave/upload/file.rb, line 20
def file
  @file ||= if http_source?
              uri = Addressable::URI.parse(source)
              ext = ::File.extname(uri.path)
              Tempfile.new(['file', ext]).tap do |file|
                Downloadr::HTTP.new(source, file).download
              end
            else
              ::File.new(::File.expand_path(source))
            end
end
filename() click to toggle source
# File lib/agave/upload/file.rb, line 39
def filename
  if http_source?
    ::File.basename(source)
  else
    ::File.basename(file.path)
  end
end
format_resource(upload_request) click to toggle source
# File lib/agave/upload/file.rb, line 69
def format_resource(upload_request)
  extension = ::File.extname(::File.basename(file.path)).delete('.')

  base_format = {
    path: upload_request[:id],
    size: ::File.size(file.path),
    format: extension
  }

  if IMAGE_FORMATS.include?(extension)
    width, height = FastImage.size(file.path)

    base_format.merge(
      width: width,
      height: height,
      format: FastImage.type(file.path).to_s
    )
  else
    base_format
  end
end
http_source?() click to toggle source
# File lib/agave/upload/file.rb, line 32
def http_source?
  uri = Addressable::URI.parse(source)
  uri.scheme == 'http' || uri.scheme == 'https'
rescue Addressable::URI::InvalidURIError
  false
end
upload() click to toggle source
# File lib/agave/upload/file.rb, line 47
def upload
  upload_request = client.upload_request.create(filename: filename)
  uri = URI.parse(upload_request[:url])

  request = Net::HTTP::Put.new(
    uri,
    'x-amz-acl' => 'public-read'
  )
  request.body = file.read

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  http.request(request)

  uploads = client.uploads.create(
    format_resource(upload_request)
  )

  uploads["id"]
end