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