module Risitor::Base

The Visitor module can extend a module or include a class to make it a dynamic visitor (see the OOP visitor pattern).

Public Class Methods

extended(visitor) click to toggle source
# File lib/risitor/visitor.rb, line 25
def extended(visitor)
  visitor.extend(ClassMethods)
  visitor.extend(ClassMethodsWhenExtended)
end
included(visitor) click to toggle source
# File lib/risitor/visitor.rb, line 20
def included(visitor)
  visitor.extend(ClassMethods)
  visitor.extend(ClassMethodsWhenIncluded)
end

Public Instance Methods

visit(object, *args, as: object.class) click to toggle source

Calling visit execute the method associated with the type of object.

# File lib/risitor/visitor.rb, line 10
def visit(object, *args, as: object.class)
  as.ancestors.each do |type|
    visit_method = VisitMethodHelper.gen_name(type)
    next unless respond_to?(visit_method)
    return send(visit_method, object, *args)
  end
  raise NoVisitMethodError.new(self, object, as)
end