1require 'psych/handler'
2
3module Psych
4  module Handlers
5    ###
6    # This handler will capture an event and record the event.  Recorder events
7    # are available vial Psych::Handlers::Recorder#events.
8    #
9    # For example:
10    #
11    #   recorder = Psych::Handlers::Recorder.new
12    #   parser = Psych::Parser.new recorder
13    #   parser.parse '--- foo'
14    #
15    #   recorder.events # => [list of events]
16    #
17    #   # Replay the events
18    #
19    #   emitter = Psych::Emitter.new $stdout
20    #   recorder.events.each do |m, args|
21    #     emitter.send m, *args
22    #   end
23
24    class Recorder < Psych::Handler
25      attr_reader :events
26
27      def initialize
28        @events = []
29        super
30      end
31
32      EVENTS.each do |event|
33        define_method event do |*args|
34          @events << [event, args]
35        end
36      end
37    end
38  end
39end
40