Module: ActsAsEncryptable

Defined in:
lib/acts_as_encryptable.rb,
lib/acts_as_encryptable/version.rb

Constant Summary collapse

VERSION =
"0.1.1"

Instance Method Summary collapse

Instance Method Details

#acts_as_encryptable(column_name, key, salt) ⇒ Object



4
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
# File 'lib/acts_as_encryptable.rb', line 4

def acts_as_encryptable column_name, key, salt
  send :define_method, column_name do
    encryptor = "@encryptor_#{key}_#{salt}"

    instance_variable_set(
      encryptor,
      ActiveSupport::MessageEncryptor.new(
        ActiveSupport::KeyGenerator.new(send key).generate_key(send(salt), 32)
      )
    ) unless instance_variable_defined? encryptor

    encryptor = instance_variable_get(encryptor)
    encryptor.decrypt_and_verify(read_attribute column_name)
  end

  send :define_method, "#{column_name}=".to_sym do |value|
    encryptor = "@encryptor_#{key}_#{salt}"

    instance_variable_set(
      encryptor,
      ActiveSupport::MessageEncryptor.new(
        ActiveSupport::KeyGenerator.new(send key).generate_key(send(salt), 32)
      )
    ) unless instance_variable_defined? encryptor

    encryptor = instance_variable_get(encryptor)
    write_attribute column_name, encryptor.encrypt_and_sign(value)
  end
end