module AttrCipher::ClassMethods

Public Instance Methods

attr_cipher(*args, secret: AttrCipher.secret, cipher: AttrCipher.cipher, serialize: false) click to toggle source
# File lib/attr_cipher/attr_cipher.rb, line 20
def attr_cipher(*args, secret: AttrCipher.secret, cipher: AttrCipher.cipher, serialize: false)
  args.each do |attribute|
    define_cipher_attribute(attribute, secret, cipher, serialize)
  end
end

Private Instance Methods

define_cipher_attribute(attribute, secret, cipher, serialize) click to toggle source
# File lib/attr_cipher/attr_cipher.rb, line 28
def define_cipher_attribute(attribute, secret, cipher, serialize)
  define_method attribute do
    value = instance_variable_get("@#{attribute}")
    cipher_value = send("#{attribute}_cipher") unless value
    value = cipher.decrypt(secret, cipher_value, serialize) if cipher_value
    instance_variable_set("@#{attribute}", value)
  end

  define_method "#{attribute}=" do |value|
    instance_variable_set("@#{attribute}", value)
    send("#{attribute}_cipher=", nil)
    send("#{attribute}_cipher=", cipher.encrypt(secret, value, serialize)) if value && value != ""
  end
end