Module: Eavi::Visitor
- Defined in:
- lib/eavi/visitor.rb
Overview
Extend a module/class or include a class with Visitor to make it a dynamic visitor (see the OOP visitor pattern).
Defined Under Namespace
Modules: ModuleDSL, ModuleMethods, ModuleMethodsWhenExtended, ModuleMethodsWhenIncluded
Class Method Summary collapse
Instance Method Summary collapse
-
#visit(object, *args, as: object.class) ⇒ Object
Call the visit method associated with the type of
object.
Class Method Details
.extended(visitor) ⇒ Object
25 26 27 28 29 |
# File 'lib/eavi/visitor.rb', line 25 def extended(visitor) visitor.extend(ModuleDSL) visitor.extend(ModuleMethods) visitor.extend(ModuleMethodsWhenExtended) end |
.included(visitor) ⇒ Object
19 20 21 22 23 |
# File 'lib/eavi/visitor.rb', line 19 def included(visitor) visitor.extend(ModuleDSL) visitor.extend(ModuleMethods) visitor.extend(ModuleMethodsWhenIncluded) end |
Instance Method Details
#visit(object, *args, as: object.class) ⇒ Object
Call the visit method associated with the type of object.
9 10 11 12 13 14 15 16 |
# File 'lib/eavi/visitor.rb', line 9 def visit(object, *args, as: object.class) as.ancestors.each do |type| visit_method_name = VisitMethodHelper.gen_name(type) next unless respond_to?(visit_method_name) return send(visit_method_name, object, *args) end raise NoVisitMethodError.new(self, object, as) end |