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