module Sprockets::ProcessorUtils
def call_processors(processors, input)
input - Hash of input data to pass to each processor
processors - Array of processor callables
bundle.call(uglify.call(coffee.call(input)))
Think about:
The right to left order processing mirrors standard function composition.
Public: Invoke list of processors in right to left order.
def call_processors(processors, input) data = input[:data] || "" metadata = input[:metadata] || {} processors.reverse_each do |processor| result = processor.call(input.merge(data: data, metadata: metadata)) case result when NilClass when Hash data = result.delete(:data) if result.key?(:data) metadata.merge!(result) when String data = result else raise TypeError, "invalid processor return type: #{result.class}" end end metadata.merge(data: data) end