Hooks
Des macros spéciales existent qui sont invoquées dans certaines situations,
comme des hooks: inherited, included, extended et method_missing.
inheritedest invoquée à la compilation quand une sous-classe est définie.@typeest le type de l'héritage.includedest invoquée à la compilation quand un module est inclus.@typeest le type de l'inclusion.extendedest invoquée à la compilation quand un module est étendu.@typeest le type de l'extension.method_missingest invoquée à la ocmpilation quand une méthode n'est pas trouvée.
Exemple pour inherited:
class Parent
macro inherited
def lineage
"{{@type.name.id}} < Parent"
end
end
end
class Child < Parent
end
Child.new.lineage #=> "Child < Parent"
Exemple pour method_missing:
macro method_missing(call)
print "Got ", {{call.name.id.stringify}}, " with ", {{call.args.size}}, " arguments", '\n'
end
foo # Prints: Got foo with 0 arguments
bar 'a', 'b' # Prints: Got bar with 2 arguments