Module: ActiveRecord::Encryption::EncryptableRecord

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
lib/active_record/encryption/encryptable_record.rb

Overview

This is the concern mixed in Active Record models to make them encryptable. It adds the encrypts attribute declaration, as well as the API to encrypt and decrypt records.

Instance Method Summary collapse

Instance Method Details

#ciphertext_for(attribute_name) ⇒ Object

Returns the ciphertext for attribute_name.



157
158
159
160
161
162
163
# File 'lib/active_record/encryption/encryptable_record.rb', line 157

def ciphertext_for(attribute_name)
  if encrypted_attribute?(attribute_name)
    read_attribute_before_type_cast(attribute_name)
  else
    read_attribute_for_database(attribute_name)
  end
end

#decryptObject

Decrypts all the encryptable attributes and saves the changes.



171
172
173
# File 'lib/active_record/encryption/encryptable_record.rb', line 171

def decrypt
  decrypt_attributes if has_encrypted_attributes?
end

#encryptObject

Encrypts all the encryptable attributes and saves the changes.



166
167
168
# File 'lib/active_record/encryption/encryptable_record.rb', line 166

def encrypt
  encrypt_attributes if has_encrypted_attributes?
end

#encrypted_attribute?(attribute_name) ⇒ Boolean

Returns whether a given attribute is encrypted or not.

Returns:

  • (Boolean)


146
147
148
149
150
151
152
153
154
# File 'lib/active_record/encryption/encryptable_record.rb', line 146

def encrypted_attribute?(attribute_name)
  name = attribute_name.to_s
  name = self.class.attribute_aliases[name] || name

  return false unless self.class.encrypted_attributes&.include? name.to_sym

  type = type_for_attribute(name)
  type.encrypted? read_attribute_before_type_cast(name)
end