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

Version Path
build-tool-0.6.9 lib/mj/visitor.rb
build-tool-0.6.8 lib/mj/visitor.rb
build-tool-0.6.7 lib/mj/visitor.rb
build-tool-0.6.6 lib/mj/visitor.rb
build-tool-0.6.5 lib/mj/visitor.rb
build-tool-0.6.4 lib/mj/visitor.rb
build-tool-0.6.3 lib/mj/visitor.rb
build-tool-0.6.2 lib/mj/visitor.rb
build-tool-0.6.1 lib/mj/visitor.rb
build-tool-0.6.0 lib/mj/visitor.rb
build-tool-0.6.0.rc2 lib/mj/visitor.rb
build-tool-0.6.0.rc1 lib/mj/visitor.rb