lib/mj/visitor.rb in build-tool-0.5.7 vs lib/mj/visitor.rb in build-tool-0.6.0.rc1

- old
+ new

@@ -1,10 +1,13 @@ +# -*- 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 @@ -16,6 +19,25 @@ 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