class Agave::Upload::Image
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