Sha256: 55069f037f9fde40f33b1d9a4880db91458dcc647f85dbe457295b749fcb2072
Contents?: true
Size: 1.05 KB
Versions: 12
Compression:
Stored size: 1.05 KB
Contents
# -*- coding: UTF-8 -*- module MJ; class Visitable def accept( visitor ) raise "#{visitor.class} is not a visitable class" if visitor.instance_of? VisitorBase method_name = nil klass = self.class.ancestors.find do |ancestor| method_name = "visit_#{ancestor.name.split('::')[-1]}" visitor.respond_to?( method_name ) end if klass return visitor.send( method_name, self ) else raise "#{visitor.class}: Should not happen!" end end end # Base class for all Visitors. class VisitorBase # The configuration object to fill with our parse results. attr_reader :configuration class ArgumentsError < StandardError end def initialize( configuration ) @configuration = configuration end def visit_Object( object ) raise "#{self.class}: Not a visitor for #{object.class}!" end end # class VisitorBase end
Version data entries
12 entries across 12 versions & 1 rubygems