Fix up Rubinius specific library specs.
[rbx.git] / lib / sexp / composite_processor.rb
blob3b23eccc607dc998a695a33d68d6a9558e13cf10
1 ##
2 # Implements the Composite pattern on SexpProcessor. Need we say more?
4 # Yeah... probably. Implements a SexpProcessor of SexpProcessors so
5 # you can easily chain multiple to each other. At some stage we plan
6 # on having all of them run +process+ and but only ever output
7 # something when +generate+ is called, allowing for deferred final
8 # processing.
10 class CompositeSexpProcessor
12   ##
13   # The list o' processors to run.
15   attr_reader :processors
17   def initialize # :nodoc:
18     @processors = []
19   end
21   ##
22   # Add a +processor+ to the list of processors to run.
24   def <<(processor)
25     @processors << processor
26   end
28   ##
29   # Run +exp+ through all of the processors, returning the final
30   # result.
32   def process(exp)
33     @processors.each do |processor|
34       exp = processor.process(exp)
35     end
36     exp
37   end
39   def on_error_in(node_type, &block)
40     @processors.each do |processor|
41       processor.on_error_in(node_type, &block)
42     end
43   end
44 end