class BreezyPDF::Uploads::Base

Upload an asset

Public Class Methods

new(filename, content_type, file_path) click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 6
def initialize(filename, content_type, file_path)
  @filename     = filename
  @content_type = content_type
  @file_path    = file_path

  @start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

Public Instance Methods

id() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 26
def id
  resource.id
end
public_url() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 14
def public_url
  @start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  BreezyPDF.logger.info(%([BreezyPDF] Starting private asset upload for #{@filename}))
  upload!

  @end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  BreezyPDF.logger.info(
    %([BreezyPDF] Private asset upload for #{@filename} completed in #{timing} seconds)
  )
  resource.presigned_url
end
timing() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 30
def timing
  @timing ||= Process.clock_gettime(Process::CLOCK_MONOTONIC) - @start_time
end

Private Instance Methods

client() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 36
def client
  @client ||= BreezyPDF::Client.new
end
file() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 40
def file
  @file ||= File.open(@file_path)
end
resource() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 56
def resource
  @resource ||= client.post("/uploads", resource_options).tap do
    BreezyPDF.logger.info(%([BreezyPDF] Initiating presign of private asset upload #{@filename}))
  end
rescue Net::HTTP => error
  BreezyPDF.logger.fatal(%([BreezyPDF] Unable to presign private asset upload for #{@filename}))
  raise PresignError, error.message
end
resource_options() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 65
def resource_options
  @resource_options ||= { filename: @filename, size: file.size, content_type: @content_type }
end
upload!() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 44
def upload!
  BreezyPDF.logger.info(%([BreezyPDF] Initiating private asset upload of #{@filename}))
  upload_response = upload_http.request(upload_request)

  return if upload_response.code.to_i == 204

  raise UploadError, "HTTP Status: #{upload_response.code}: #{upload_response.body}"
rescue Net::HTTP => error
  BreezyPDF.logger.fatal(%([BreezyPDF] Unable to upload private asset #{@filename}))
  raise UploadError, error.message
end
upload_http() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 73
def upload_http
  @upload_http ||= Net::HTTP.new(upload_uri.host, upload_uri.port).tap { |http| http.use_ssl = true }
end
upload_request() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 77
def upload_request
  @upload_request ||= Net::HTTP::Post.new(upload_uri.request_uri).tap do |post|
    file_form_data = FileFormData.new(resource.presigned_upload_fields, @content_type, @filename, file)

    post.content_type = "multipart/form-data; boundary=#{file_form_data.boundary}"
    post.body = file_form_data.data
  end
end
upload_uri() click to toggle source
# File lib/breezy_pdf/uploads/base.rb, line 69
def upload_uri
  @upload_uri ||= URI.parse(resource.presigned_upload_url)
end