def pipe_through_extensions(stage, message, env, &callback)
debug('Passing through ? extensions: ?', stage, message)
return callback.call(message) unless @extensions
extensions = @extensions.dup
pipe = lambda do |message|
next callback.call(message) unless message
extension = extensions.shift
next callback.call(message) unless extension
next pipe.call(message) unless extension.respond_to?(stage)
arity = extension.method(stage).arity
if arity >= 3
extension.__send__(stage, message, env, pipe)
else
extension.__send__(stage, message, pipe)
end
end
pipe.call(message)
end