Implements the Composite pattern on SexpProcessor. Need we say more?
Yeah... probably. Implements a SexpProcessor of SexpProcessors so you can
easily chain multiple to each other. At some stage we plan on having all of
them run process
and but only ever output something when
generate
is called, allowing for deferred final processing.
The list o' processors to run.
Add a processor
to the list of processors to run.
# File lib/composite_sexp_processor.rb, line 27 def <<(processor) raise ArgumentError, "Can only add sexp processors" unless SexpProcessor === processor || processor.respond_to?(:process) @processors << processor end
# File lib/composite_sexp_processor.rb, line 44 def on_error_in(node_type, &block) @processors.each do |processor| processor.on_error_in(node_type, &block) end end
Run exp
through all of the processors, returning the final
result.
# File lib/composite_sexp_processor.rb, line 37 def process(exp) @processors.each do |processor| exp = processor.process(exp) end exp end