класс ActiveRecord::Encryption::Properties
Это обёртка для хэша свойств шифрования. Используется Key (публичные теги) и Message (заголовки).
Поскольку свойства сериализуются в сообщениях, для повышения эффективности хранения важно, чтобы их ключи были как можно короче. Он определяет аксессоры для общих свойств, которые будут поддерживать очень короткие ключи, одновременно предоставляя удобочитаемое имя.
message.headers.encrypted_data_key # instead of message.headers[:k]
Константы
- ALLOWED_VALUE_CLASSES
- DEFAULT_PROPERTIES
-
Для каждой записи генерируется аксессор, отображающий полное имя
Публичные методы класса
# File activerecord/lib/active_record/encryption/properties.rb, line 42
def initialize(initial_properties = {})
@data = {}
add(initial_properties)
end Публичные методы экземпляра
# File activerecord/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 Установить значение для заданного ключа
Вызовет EncryptedContentIntegrity если значение уже существует
# File activerecord/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 # File activerecord/lib/active_record/encryption/properties.rb, line 68 def to_h data end
# File activerecord/lib/active_record/encryption/properties.rb, line 56
def validate_value_type(value)
unless ALLOWED_VALUE_CLASSES.include?(value.class) || ALLOWED_VALUE_CLASSES.any? { |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
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.