free_mutant/lib/mutant/subject/method.rb

101 lines
1.8 KiB
Ruby
Raw Normal View History

2013-01-13 16:25:49 -05:00
module Mutant
class Subject
# Abstract base class for method subjects
class Method < self
# Test if method is public
#
# @return [true]
# if method is public
#
# @return [false]
# otherwise
#
# @api private
#
abstract_method :public?
# Return method name
#
# @return [Symbol]
#
# @api private
#
def name
node.children[self.class::NAME_INDEX]
end
2013-06-14 14:23:46 -04:00
private
# Return scope
#
# @return [Class, Module]
#
# @api private
#
def scope
context.scope
end
# Return subtype identifier
#
# @return [String]
#
# @api private
#
def subtype
"#{context.identification}#{self.class::SYMBOL}#{name}"
end
2013-01-13 16:25:49 -05:00
# Instance method subjects
class Instance < self
NAME_INDEX = 0
SYMBOL = '#'.freeze
2013-01-13 16:25:49 -05:00
# Test if method is public
#
# @return [true]
# if method is public
#
# @return [false]
# otherwise
#
# @api private
#
def public?
scope.public_method_defined?(name)
2013-01-13 16:25:49 -05:00
end
memoize :public?
private
2013-06-14 14:23:46 -04:00
end # Instance
2013-01-13 16:25:49 -05:00
# Singleton method subjects
2013-04-17 23:31:21 -04:00
class Singleton < self
2013-01-13 16:25:49 -05:00
NAME_INDEX = 1
SYMBOL = '.'.freeze
2013-01-13 16:25:49 -05:00
# Test if method is public
#
# @return [true]
# if method is public
#
# @return [false]
# otherwise
#
# @api private
#
def public?
scope.singleton_class.public_method_defined?(name)
2013-01-13 16:25:49 -05:00
end
memoize :public?
2013-06-14 14:23:46 -04:00
end # Singleton
end # Method
end # Subject
end # Mutant