lib/chronicles/methods.rb
# encoding: utf-8
module Chronicles
# Array of object methods selected by options
#
# @private
class Methods < Array
def initialize(object, **options)
@object = object
@options = options
super(whitelist.empty? ? list : list & whitelist)
end
private
attr_reader :object, :options
def list
[public_list, protected_list, private_list].flatten.compact - blacklist
end
def whitelist
Array(options[:only]).map(&:to_sym)
end
def blacklist
Array(options[:except]).map(&:to_sym)
end
def public_list
return if options[:public].equal?(false)
object.public_methods - Object.public_instance_methods - own_list
end
def own_list
%i(chronicles start_chronicles stop_chronicles)
end
def protected_list
return if options[:protected].equal?(false)
object.protected_methods
end
def private_list
return if options[:private].equal?(false)
object.private_methods - Object.private_instance_methods
end
end # class Methods
end # module Chronicles