Module: ActiveRecord::Acts::Decryptable::ClassMethods

Defined in:
lib/active_record/acts/decryptable.rb

Overview

class SomeModel < ActiveRecord::Base

acts_as_decryptable :encrypt => [:name, :email], :key => "SOME_KEY"

end

some_model_object.name = “name” some_model_object.save some_model_object.name # => “encrypted name” some_model_object.decrypted_name # => “name”

Instance Method Summary collapse

Instance Method Details

#acts_as_decryptable(options) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/active_record/acts/decryptable.rb', line 17

def acts_as_decryptable(options)
  cattr_accessor :encrypted_columns
  configuration = { :encrypt => [] }
  configuration.update(options) if options.is_a?(Hash)
  raise "Valid key must be specified" unless configuration[:key]

  configuration[:encrypt].each do |field_name|
    class_eval <<-EOV
      def #{field_name}=(value)
        self[:#{field_name}] = SymmetricCrypto.encrypt(value, #{configuration[:key].to_json})
      end

      def decrypt_#{field_name}
        SymmetricCrypto.decrypt(self[:#{field_name}], #{configuration[:key].to_json})
      end

    EOV
  end

  class_eval <<-EOV
    include ActiveRecord::Acts::Decryptable::InstanceMethods
  EOV
end