lib/rack/cascade.rb in rack-1.4.1 vs lib/rack/cascade.rb in rack-1.4.2
- old
+ new
@@ -17,11 +17,22 @@
end
def call(env)
result = NotFound
+ last_body = nil
+
@apps.each do |app|
+ # The SPEC says that the body must be closed after it has been iterated
+ # by the server, or if it is replaced by a middleware action. Cascade
+ # replaces the body each time a cascade happens. It is assumed that nil
+ # does not respond to close, otherwise the previous application body
+ # will be closed. The final application body will not be closed, as it
+ # will be passed to the server as a result.
+ last_body.close if last_body.respond_to? :close
+
result = app.call(env)
+ last_body = result[2]
break unless @catch.include?(result[0].to_i)
end
result
end