1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
module Morpher
# Mixin for to provide a node registry
module Registry
# Hook called when module is included
#
# @param [Module, Class] descendant
#
# @return [undefined]
#
# @api private
#
def self.included(descendant)
descendant.const_set(:REGISTRY, {})
descendant.class_eval do
extend ClassMethods
end
end
# Return node type
#
# @return [Symbol]
#
# @api private
#
def type
self.class::TYPE
end
# Methods to get mixed in at singleton level
module ClassMethods
# Register evaluator under name
#
# TODO: Disallow duplicate registration under same name
#
# @param [Symbol] name
#
# @return [undefined]
#
# @api private
#
def register(name)
const_set(:TYPE, name)
self::REGISTRY[name] = self
end
end # ClassMethods
end # Registry
end # Morpher
|