Class: ActiveEncryption::Encryptable::InstanceMethodsOnActivation
- Inherits:
-
Module
- Object
- Module
- ActiveEncryption::Encryptable::InstanceMethodsOnActivation
- Defined in:
- lib/active_encryption/encryptable/instance_methods_on_activation.rb
Overview
InstanceMethodsOnActivation adds instance methods for the attribute “attribute_name” to the including class.
Instance Method Summary collapse
- #define_attribute_accessors(attribute_name, options = {}) ⇒ Object
- #define_attribute_encryption_setting(attribute_name, options = {}) ⇒ Object
- #define_attribute_encryptor(attribute_name) ⇒ Object
- #define_attribute_getter(attribute_name) ⇒ Object
- #define_attribute_setter(attribute_name) ⇒ Object
- #define_decrypt ⇒ Object
- #define_encrypt ⇒ Object
- #define_generic_methods ⇒ Object
-
#initialize(attribute_name, options) ⇒ InstanceMethodsOnActivation
constructor
A new instance of InstanceMethodsOnActivation.
Constructor Details
#initialize(attribute_name, options) ⇒ InstanceMethodsOnActivation
Returns a new instance of InstanceMethodsOnActivation.
10 11 12 13 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 10 def initialize(attribute_name, ) define_generic_methods define_attribute_accessors(attribute_name, ) end |
Instance Method Details
#define_attribute_accessors(attribute_name, options = {}) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 43 def define_attribute_accessors(attribute_name, = {}) define_attribute_encryption_setting(attribute_name, ) define_attribute_encryptor(attribute_name) define_attribute_setter(attribute_name) define_attribute_getter(attribute_name) end |
#define_attribute_encryption_setting(attribute_name, options = {}) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 50 def define_attribute_encryption_setting(attribute_name, = {}) define_method("#{attribute_name}_encryption_setting") do instance_variable_name = "@#{attribute_name}_encryption_setting" instance_variable = instance_variable_get(instance_variable_name) return instance_variable if instance_variable instance_variable_set( instance_variable_name, EncryptionSetting::Record.merge(self.class.encryption_setting, ) ) end end |
#define_attribute_encryptor(attribute_name) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 64 def define_attribute_encryptor(attribute_name) define_method("#{attribute_name}_encryptor") do instance_variable_name = "@#{attribute_name}_encryptor" instance_variable_get(instance_variable_name) || instance_variable_set( instance_variable_name, Encryptor.new( send("#{attribute_name}_encryption_setting") ) ) end end |
#define_attribute_getter(attribute_name) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 91 def define_attribute_getter(attribute_name) define_method(attribute_name) do # Check if an instance variable with the decrypted value already # exist to save decryption time. Otherwise, call the generic # #decrypt method. instance_variable = instance_variable_get("@#{attribute_name}") return instance_variable if instance_variable decrypted_value = decrypt(attribute_name) # Save the result to not have to decrypt it again. instance_variable_set("@#{attribute_name}", decrypted_value) end end |
#define_attribute_setter(attribute_name) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 77 def define_attribute_setter(attribute_name) define_method("#{attribute_name}=") do |unencrypted_value| # Save unencrypted value in instance variable to not have to # decrypt a freshly encrypted value. instance_variable_set("@#{attribute_name}", unencrypted_value) unless unencrypted_value return send("#{attribute_name}_encrypted=", nil) end encrypt(attribute_name, unencrypted_value) unencrypted_value end end |
#define_decrypt ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 32 def define_decrypt define_method('decrypt') do |attribute_name| encrypted_value = send("#{attribute_name}_encrypted") return nil unless encrypted_value setting = send("#{attribute_name}_encryption_setting") send("#{attribute_name}_encryptor") .decrypt(encrypted_value, purpose: setting.purpose) end end |
#define_encrypt ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 20 def define_encrypt define_method('encrypt') do |attribute_name, unencrypted_value| setting = send("#{attribute_name}_encryption_setting") encryptor = send("#{attribute_name}_encryptor") encrypted_value = encryptor.encrypt( unencrypted_value, purpose: setting.purpose ) send("#{attribute_name}_encrypted=", encrypted_value) end end |
#define_generic_methods ⇒ Object
15 16 17 18 |
# File 'lib/active_encryption/encryptable/instance_methods_on_activation.rb', line 15 def define_generic_methods define_encrypt define_decrypt end |