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]
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