class Valkyrie::Shrine::Checksum::S3
Attributes
part_size[R]
threshold[R]
Public Class Methods
digest_class()
click to toggle source
# File lib/valkyrie/shrine/checksum/s3.rb, line 9 def self.digest_class Digest::MD5 end
new(threshold: 15 * 1024 * 1024, part_size: 5 * 1024 * 1024)
click to toggle source
# File lib/valkyrie/shrine/checksum/s3.rb, line 13 def initialize(threshold: 15 * 1024 * 1024, part_size: 5 * 1024 * 1024) @threshold = threshold @part_size = part_size end
Public Instance Methods
calculate_checksum(result)
click to toggle source
# File lib/valkyrie/shrine/checksum/s3.rb, line 18 def calculate_checksum(result) result.io.data[:object]&.data&.etag&.delete('"') || checksum_for(result.io) end
checksum_for(io)
click to toggle source
# File lib/valkyrie/shrine/checksum/s3.rb, line 23 def checksum_for(io) io.rewind io.size < threshold ? simple_digest(io) : multipart_checksum(io) end
Private Instance Methods
multipart_checksum(io)
click to toggle source
# File lib/valkyrie/shrine/checksum/s3.rb, line 30 def multipart_checksum(io) parts = 0 checksums = [] while (chunk = io.read(part_size)) parts += 1 checksums << digest_class.digest(chunk) end [digest_class.hexdigest(checksums.join('')), parts.to_s].join('-') end