class RocketJob::Sliced::EncryptedSlice

Compress the records within a slice

Private Instance Methods

parse_records() click to toggle source
# File lib/rocket_job/sliced/encrypted_slice.rb, line 8
def parse_records
  # Convert BSON::Binary to a string
  encrypted_str = attributes.delete("records").data

  header = SymmetricEncryption::Header.new
  header.parse(encrypted_str)
  # Use the header that is present to decrypt the data, since its version could be different
  decrypted_str = header.cipher.binary_decrypt(encrypted_str, header: header)

  @records = Hash.from_bson(BSON::ByteBuffer.new(decrypted_str))["r"]
end
serialize_records() click to toggle source
# File lib/rocket_job/sliced/encrypted_slice.rb, line 20
def serialize_records
  return [] if @records.nil? || @records.empty?

  # Convert slice of records into a single string
  str = {"r" => to_a}.to_bson.to_s

  # Encrypt to binary without applying an encoding such as Base64
  # Use a random_iv with each encryption for better security
  data = SymmetricEncryption.cipher.binary_encrypt(str, random_iv: true, compress: true)
  BSON::Binary.new(data)
end