diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/psych/lib/psych/visitors/visitor.rb | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/ext/psych/lib/psych/visitors/visitor.rb b/ext/psych/lib/psych/visitors/visitor.rb index 3471c43dfa..0e33128f01 100644 --- a/ext/psych/lib/psych/visitors/visitor.rb +++ b/ext/psych/lib/psych/visitors/visitor.rb @@ -11,16 +11,17 @@ module Psych end def accept target - case target - when Psych::Nodes::Scalar then visit_Psych_Nodes_Scalar target - when Psych::Nodes::Mapping then visit_Psych_Nodes_Mapping target - when Psych::Nodes::Sequence then visit_Psych_Nodes_Sequence target - when Psych::Nodes::Alias then visit_Psych_Nodes_Alias target - when Psych::Nodes::Document then visit_Psych_Nodes_Document target - when Psych::Nodes::Stream then visit_Psych_Nodes_Stream target - else - raise "Can't handle #{target}" - end + visit target + end + + private + + DISPATCH = Hash.new do |hash, klass| + hash[klass] = "visit_#{klass.name.gsub('::', '_')}" + end + + def visit target + send DISPATCH[target.class], target end end end |