module Sequel::Plugins::AttrEncrypted::ClassMethods
Public Instance Methods
attr_encrypted(*attrs, key:)
click to toggle source
Order.create(first_name: “Ivan”) # => INSERT INTO “orders” (“encrypted_first_name”)
VALUES ('/sTi9Q==$OTpuMRq5k8R3JayQ$WjSManQGP9UaZ3C40yDjKg==')
order = Order.create(first_name: “Ivan”, last_name: “Smith”,
secret_data: { "some_key" => "Some Value" })
order.first_name # => “Ivan” order.last_name # => “Smith” order.secret_data # => { “some_key” => “Some Value” }
# File lib/sequel/plugins/attr_encrypted.rb, line 38 def attr_encrypted(*attrs, key:) include_encrypted_module! attrs.each do |attr| define_encrypted_setter(attr, key) define_encrypted_getter(attr, key) @_encrypted_attributes << attr end end
Private Instance Methods
define_encrypted_getter(attr, key)
click to toggle source
# File lib/sequel/plugins/attr_encrypted.rb, line 59 def define_encrypted_getter(attr, key) @_attr_encrypted_module.module_eval do define_method(attr.to_s) do instance_variable_get("@#{attr}") || begin decrypted = SimpleCrypt.decrypt(send("encrypted_#{attr}"), key) result = decrypted.nil? ? decrypted : JSON.parse(decrypted) instance_variable_set("@#{attr}", result) end end end end
define_encrypted_setter(attr, key)
click to toggle source
# File lib/sequel/plugins/attr_encrypted.rb, line 49 def define_encrypted_setter(attr, key) @_attr_encrypted_module.module_eval do define_method("#{attr}=") do |value| instance_variable_set("@#{attr}", value) send("encrypted_#{attr}=", SimpleCrypt.encrypt(value.to_json, key)) end end end
include_encrypted_module!()
click to toggle source
# File lib/sequel/plugins/attr_encrypted.rb, line 72 def include_encrypted_module! return if defined?(@_attr_encrypted_module) @_encrypted_attributes ||= [] @_attr_encrypted_module = Module.new prepend @_attr_encrypted_module end