I have the following so far
class User < ApplicationRecord
def name=(s)
super s.encrypt
end
def name
(super || '').decrypt
end
I would like to replace it and do something like
@@encrypted_fields = [:name, :phone, :address1, ...]
def self.initialize
@@encrypted_fields.each do |s|
setter = (s.to_s+'=')(value) -> do
super value.encrypt
end
getter = (s.to_s) -> do
(super || '').decrypt
end
User.send(:include, setter)
User.send(:include, getter)
end
end
I can't do this for all the records, like email, of course (how will they log in?), and some fields aren't important enough to bother.
I tried
@@encrypted_fields = [:name, :phone, :address1]
@@encrypted_fields.each do |m|
setter = (m.to_s+'=').to_sym
getter = m
define_method(setter) do |v|
super v.encrypt
end
define_method(getter) do
(super || '').decrypt
end
end
based on Use def_method inside ActiveRecord model
but it gave
implicit argument passing of super from method defined by define_method() is not supported. Specify all arguments explicitly.
(super || '').decrypt