class Openstack::Client::Storage::PutObject

Uploads a file to the Object Store. Checksum is validated after upload.

Attributes

checksum[R]
io[R]
uri[R]

Public Class Methods

new(io:, uri:, checksum: nil) click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 16
def initialize(io:, uri:, checksum: nil)
  @io = io
  @uri = uri
  @checksum = checksum
end

Public Instance Methods

request() click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 22
def request
  Net::HTTP::Put.new(uri).tap do |request|
    request.add_field('Content-Type', content_type)
    request.add_field('ETag', md5_checksum)
    request.body = io.read
  end
end

Private Instance Methods

checksum_to_hexdigest() click to toggle source

ActiveStorage sends a `Digest::MD5.base64digest` checksum OpenStack expects a `Digest::MD5.hexdigest` ETag

# File lib/openstack/client/storage/put_object.rb, line 46
def checksum_to_hexdigest
  checksum.unpack1('m0').unpack1('H*')
end
content_type() click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 32
def content_type
  Marcel::MimeType.for io,
                       name: io.try(:original_filename),
                       declared_type: io.try(:content_type)
end
md5_checksum() click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 38
def md5_checksum
  return checksum_to_hexdigest if checksum.present?

  Digest::MD5.file(io).hexdigest
end