класс 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.