Module: SecureAttribute::ClassMethods

Defined in:
lib/secure_attribute.rb

Instance Method Summary collapse

Instance Method Details

#attr_secure(name, options = {}) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/secure_attribute.rb', line 47

def attr_secure(name, options = {})
  ensure_attribute_accessors_are_defined(name)
  alias_method(attr_reader = "#{name}_without_secure_attribute", "#{name}")
  alias_method(attr_writer = "#{name}_without_secure_attribute=", "#{name}=")

  define_method("#{name}=") do |data|
    if data && !data.empty?
      send(attr_writer, SecureAttribute.encipher(options[:algorithm], data, options[:key]))
    else
      send(attr_writer, data)
    end
  end

  define_method(name) do
    if (data = send(attr_reader)) && !data.empty?
      SecureAttribute.decipher(data, options[:key])
    else
      data
    end
  end
end

#ensure_attribute_accessors_are_defined(name) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/secure_attribute.rb', line 69

def ensure_attribute_accessors_are_defined(name)
  if defined?(ActiveRecord::Base) && self < ActiveRecord::Base
    define_attribute_method(name)
  else
    attr_writer(name) unless respond_to?("#{name}=")
    attr_reader(name) unless respond_to?(name)
  end
end