1module Psych
2  module Visitors
3    class DepthFirst < Psych::Visitors::Visitor
4      def initialize block
5        @block = block
6      end
7
8      private
9
10      def nary o
11        o.children.each { |x| visit x }
12        @block.call o
13      end
14      alias :visit_Psych_Nodes_Stream   :nary
15      alias :visit_Psych_Nodes_Document :nary
16      alias :visit_Psych_Nodes_Sequence :nary
17      alias :visit_Psych_Nodes_Mapping  :nary
18
19      def terminal o
20        @block.call o
21      end
22      alias :visit_Psych_Nodes_Scalar :terminal
23      alias :visit_Psych_Nodes_Alias  :terminal
24    end
25  end
26end
27