1module Psych
2  module Visitors
3    class Visitor
4      def accept target
5        visit target
6      end
7
8      private
9
10      DISPATCH = Hash.new do |hash, klass|
11        hash[klass] = "visit_#{klass.name.gsub('::', '_')}"
12      end
13
14      def visit target
15        send DISPATCH[target.class], target
16      end
17    end
18  end
19end
20