# require 'private_please' require 'lib/private_please' # use the latest version module ReportSample ########################################### class Simple # Internal calls : # # -> called methods are _GOOD CANDIDATES_ # def make_internal_calls ########################################### instance_m_1 # i -> i instance_m_3 # i -> i self.class.class_m_1 # i -> C self.class.class_m_2 # i -> C self.class.c_make_internal_method_calls # i -> C --> C end # +-> i def self.c_make_internal_method_calls # class_m_1 # C -> C new.instance_m_2 # C -> i end # end ####################################################### class AnotherClass # External calls (would fail if methods were private) # private_please # -> called methods are _BAD CANDIDATES_ # def make_external_calls ####################################################### Simple.new.instance_m_1 # i -> i Simple .class_m_1 # i -> C self.class.c_make_external_calls # i -> C -> i end # -> C def self.c_make_external_calls # Simple.new.instance_m_1 # C -> i Simple .class_m_1 # C -> C Simple .class_m_2 # C -> C end # def call_the_candidate_from_inside_and_outside make_external_calls Simple.new.make_internal_calls end def never_called; end def self.never_called_c; end end #----------------------------------------------------------------------------------------------------------------------- class Simple def self.not_a_candidate_c1; class_m_2 end private_please def instance_m_1; end def instance_m_2; end def instance_m_3; end def self.class_m_1; class_m_2 end def self.class_m_2; end def never_called_1; end def self.class_never_called_1; end end end unless defined?(ReportSample::Simple) #----------------------------------------------------------------------------------------------------------------------- ReportSample::Simple.new.make_internal_calls ReportSample::AnotherClass.new.make_external_calls ReportSample::AnotherClass.c_make_external_calls