Module: AttrEncrypted::Adapters::ActiveRecord

Defined in:
lib/attr_encrypted/adapters/active_record.rb

Class Method Summary collapse

Class Method Details

.extended(base) ⇒ Object

:nodoc:



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/attr_encrypted/adapters/active_record.rb', line 5

def self.extended(base) # :nodoc:
  base.class_eval do
    attr_encrypted_options[:encode] = true
    class << self
      alias_method :attr_encryptor, :attr_encrypted
      alias_method_chain :method_missing, :attr_encrypted
      alias_method :undefine_attribute_methods, :reset_column_information if ::ActiveRecord::VERSION::STRING < "3"
    end

    def perform_attribute_assignment(method, new_attributes, *args)
      return if new_attributes.blank?
      attributes = new_attributes.respond_to?(:with_indifferent_access) ? new_attributes.with_indifferent_access : new_attributes.symbolize_keys
      encrypted_attributes = self.class.encrypted_attributes.keys
      self.send method, attributes.except(*encrypted_attributes), *args
      self.send method, attributes.slice(*encrypted_attributes), *args
    end
    private :perform_attribute_assignment

    if ::ActiveRecord::VERSION::STRING < "3.0" || ::ActiveRecord::VERSION::STRING > "3.1"
      def assign_attributes_with_attr_encrypted(*args)
        perform_attribute_assignment :assign_attributes_without_attr_encrypted, *args
      end
      alias_method_chain :assign_attributes, :attr_encrypted
    else
      def attributes_with_attr_encrypted=(*args)
        perform_attribute_assignment :attributes_without_attr_encrypted=, *args
      end
      alias_method_chain :attributes=, :attr_encrypted
    end
  end
end