free_mutant/lib/mutant/singleton_methods.rb
2013-01-04 00:18:48 +01:00

28 lines
580 B
Ruby

# Singleton methods are defined here so zombie can pick them up
module Mutant
# Define instance of subclassed superclass as constant
#
# @param [Class] superclass
# @param [Symbol] name
#
# @return [self]
#
# @api private
#
def self.define_singleton_subclass(name, superclass, &block)
klass = Class.new(superclass) do
def inspect; self.class.name; end
define_singleton_method(:name) do
"#{superclass.name}::#{name}".freeze
end
end
klass.class_eval(&block)
superclass.const_set(name, klass.new)
self
end
end