module Confidentiality class GenerateReadMethodsError < StandardError end class DuplicateError < StandardError end # The string returned for confidential fields mattr_accessor :string self.string = "(confidential)" mattr_accessor :_ignore self._ignore = false # All confidentiality will be ignored while the block is executed class << self def ignore original_value = self._ignore self._ignore = true result = yield self._ignore = original_value result end alias_method :ignore?, :_ignore def included(base) return if base.included_modules.include?(Confidentiality::InstanceMethods) base.class_eval do extend Confidentiality::ClassMethods include Confidentiality::InstanceMethods class << self alias_method_chain :reset_column_information, :confidential_methods end alias_method_chain :valid?, :confidentiality end end end end class ActiveRecord::Base include Confidentiality end class ActionView::Base include Confidentiality::FormHelper end