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
36
37
38
39
40
41
42
43
44
# File 'lib/attr_encrypted/adapters/active_record.rb', line 5

def self.extended(base) # :nodoc:
  base.class_eval do

    # https://github.com/attr-encrypted/attr_encrypted/issues/68
    def reload_with_attr_encrypted(*args, &block)
      result = reload_without_attr_encrypted(*args, &block)
      self.class.encrypted_attributes.keys.each do |attribute_name|
        instance_variable_set("@#{attribute_name}", nil)
      end
      result
    end
    alias_method_chain :reload, :attr_encrypted

    attr_encrypted_options[:encode] = true

    class << self
      alias_method_chain :method_missing, :attr_encrypted
    end

    def perform_attribute_assignment(method, new_attributes, *args)
      return if new_attributes.blank?

      send method, new_attributes.reject { |k, _|  self.class.encrypted_attributes.key?(k.to_sym) }, *args
      send method, new_attributes.reject { |k, _| !self.class.encrypted_attributes.key?(k.to_sym) }, *args
    end
    private :perform_attribute_assignment

    if ::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
    end

    def attributes_with_attr_encrypted=(*args)
      perform_attribute_assignment :attributes_without_attr_encrypted=, *args
    end
    alias_method_chain :attributes=, :attr_encrypted
  end
end