Skip to Content Skip to Search

An ActiveModel::Type::Value that encrypts/decrypts strings of text.

This is the central piece that connects the encryption system with encrypts declarations in the model classes. Whenever you declare an attribute as encrypted, it configures an EncryptedAttributeType for that attribute.

Methods
C
D
E
F
N
S
Included Modules

Attributes

[R] cast_type
[R] scheme

Class Public methods

new(scheme:, cast_type: ActiveModel::Type::String.new, previous_type: false, default: nil)

Options

  • :scheme - A Scheme with the encryption properties for this attribute.

  • :cast_type - A type that will be used to serialize (before encrypting) and deserialize (after decrypting). ActiveModel::Type::String by default.

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 23
def initialize(scheme:, cast_type: ActiveModel::Type::String.new, previous_type: false, default: nil)
  super()
  @scheme = scheme
  @cast_type = cast_type
  @previous_type = previous_type
  @default = default
end

Instance Public methods

cast(value)

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 31
def cast(value)
  cast_type.cast(value)
end

changed_in_place?(raw_old_value, new_value)

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 51
def changed_in_place?(raw_old_value, new_value)
  old_value = raw_old_value.nil? ? nil : deserialize(raw_old_value)
  old_value != new_value
end

deserialize(value)

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 35
def deserialize(value)
  cast_type.deserialize decrypt(value)
end

encrypted?(value)

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 47
def encrypted?(value)
  with_context { encryptor.encrypted? value }
end

freeze()

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 68
def freeze
  serialize_with_oldest?
  previous_types_without_clean_text
  previous_types
  clean_text_scheme

  super
end

serialize(value)

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 39
def serialize(value)
  if serialize_with_oldest?
    serialize_with_oldest(value)
  else
    serialize_with_current(value)
  end
end

support_unencrypted_data?()

# File activerecord/lib/active_record/encryption/encrypted_attribute_type.rb, line 64
def support_unencrypted_data?
  scheme.support_unencrypted_data? && !previous_type?
end