module Confidentiality module InstanceMethods def read_method_with_confidentiality(method, confidentiality_method, *args) real_value = send("#{method}_without_confidentiality", *args) if !Confidentiality.ignore? and send(confidentiality_method) confidential_return_value(real_value) else real_value end end def valid_with_confidentiality? Confidentiality.ignore do valid_without_confidentiality? end end private def confidential_return_value(real_value) case real_value when String Confidentiality.string when Array [Confidentiality.string] else nil end end end end