class ActiveRecord::Encryption::Properties

This is a wrapper for a hash of encryption properties. It is used by Key (public tags) and Message (headers).

Since properties are serialized in messages, it is important for storage efficiency to keep their keys as short as possible. It defines accessors for common properties that will keep these keys very short while exposing a readable name.

message.headers.encrypted_data_key # instead of message.headers[:k]

See +Properties#DEFAULT_PROPERTIES+, Key, Message

Constants

ALLOWED_VALUE_CLASSES
DEFAULT_PROPERTIES

For each entry it generates an accessor exposing the full name

Attributes

data[R]

Public Class Methods

new(initial_properties = {}) click to toggle source
# File lib/active_record/encryption/properties.rb, line 42
def initialize(initial_properties = {})
  @data = {}
  add(initial_properties)
end

Public Instance Methods

[]=(key, value) click to toggle source

Set a value for a given key

It will raise an EncryptedContentIntegrity if the value exists

# File lib/active_record/encryption/properties.rb, line 50
def []=(key, value)
  raise Errors::EncryptedContentIntegrity, "Properties can't be overridden: #{key}" if key?(key)
  validate_value_type(value)
  data[key] = value
end
add(other_properties) click to toggle source
# File lib/active_record/encryption/properties.rb, line 62
def add(other_properties)
  other_properties.each do |key, value|
    self[key.to_sym] = value
  end
end
to_h() click to toggle source
# File lib/active_record/encryption/properties.rb, line 68
def to_h
  data
end
validate_value_type(value) click to toggle source
# File lib/active_record/encryption/properties.rb, line 56
def validate_value_type(value)
  unless ALLOWED_VALUE_CLASSES.find { |klass| value.is_a?(klass) }
    raise ActiveRecord::Encryption::Errors::ForbiddenClass, "Can't store a #{value.class}, only properties of type #{ALLOWED_VALUE_CLASSES.inspect} are allowed"
  end
end