module AttrEncryption::InstanceMethods
Public Instance Methods
decrypt(attribute, encrypted_value)
click to toggle source
Decrypts a value for the attribute specified using options evaluated in the current object's scope
Example
class User attr_accessor :secret_key attr_encrypted :email, :key => :secret_key def initialize(secret_key) self.secret_key = secret_key end end @user = User.new('some-secret-key') @user.decrypt(:email, 'SOME_ENCRYPTED_EMAIL_STRING')
# File lib/attr_encryption.rb, line 298 def decrypt(attribute, encrypted_value) self.class.decrypt(attribute, encrypted_value, evaluated_attr_encrypted_options_for(attribute)) end
encrypt(attribute, value)
click to toggle source
Encrypts a value for the attribute specified using options evaluated in the current object's scope
Example
class User attr_accessor :secret_key attr_encrypted :email, :key => :secret_key def initialize(secret_key) self.secret_key = secret_key end end @user = User.new('some-secret-key') @user.encrypt(:email, 'test@example.com')
# File lib/attr_encryption.rb, line 317 def encrypt(attribute, value) self.class.encrypt(attribute, value, evaluated_attr_encrypted_options_for(attribute)) end
unencrypted_attributes()
click to toggle source
# File lib/attr_encryption.rb, line 321 def unencrypted_attributes attributes.each_with_object({}) do |a, new_hash| key = a.first value = a.last if key =~ /\A(.+)_enc\z/ key = $1 value = decrypt(key.to_sym, value) end new_hash[key] = value end end
Protected Instance Methods
evaluate_attr_encrypted_option(option)
click to toggle source
Evaluates symbol (method reference) or proc (responds to call) options
If the option is not a symbol or proc then the original option is returned
# File lib/attr_encryption.rb, line 343 def evaluate_attr_encrypted_option(option) if option.is_a?(Symbol) && respond_to?(option) send(option) elsif option.respond_to?(:call) option.call(self) else option end end
evaluated_attr_encrypted_options_for(attribute)
click to toggle source
Returns attr_encrypted options evaluated in the current object's scope for the attribute specified
# File lib/attr_encryption.rb, line 336 def evaluated_attr_encrypted_options_for(attribute) self.class.encrypted_attributes[attribute.to_sym].inject({}) { |hash, (option, value)| hash.merge!(option => (option == :preencrypt) ? value : evaluate_attr_encrypted_option(value)) } end