module HasSecureWhatever::HasSecure::ClassMethods

Public Instance Methods

has_secure(attribute, validations: true, digest_name: nil) click to toggle source
# File lib/has_secure_whatever/has_secure.rb, line 6
def has_secure(attribute, validations: true, digest_name: nil)
  digest_attribute = digest_name || "#{attribute}_digest"

  define_method("#{attribute}") do
    encrypted_value = self.send("#{digest_attribute}")
    if encrypted_value.nil?
      return nil
    else
      Encryptor.new.decrypt(encrypted_value)
    end
  end

  define_method("#{attribute}=") do |unencrypted_value|
    if unencrypted_value.nil?
      self.send("#{digest_attribute}=", nil)
    elsif !unencrypted_value.empty?
      encrypted_value = Encryptor.new.encrypt(unencrypted_value)
      self.send("#{digest_attribute}=", encrypted_value)
    end
  end

  if validations
    include ActiveModel::Validations
    validate do |record|
      record.errors.add(attribute, :blank) unless record.send(digest_attribute).present?
    end
  end
end