tracks/vendor/gems/rack-1.0.1/lib/rack/cascade.rb
Eric Allen 156862200b Vendoring Rack
Joyent hasn't upgraded their gem yet, and for many users this could be a
major installation pitfall. Rails is vendored, so why can't it boot?
Rack? What's that?
2009-12-14 11:40:57 -05:00

36 lines
741 B
Ruby

module Rack
# Rack::Cascade tries an request on several apps, and returns the
# first response that is not 404 (or in a list of configurable
# status codes).
class Cascade
attr_reader :apps
def initialize(apps, catch=404)
@apps = apps
@catch = [*catch]
end
def call(env)
status = headers = body = nil
raise ArgumentError, "empty cascade" if @apps.empty?
@apps.each { |app|
begin
status, headers, body = app.call(env)
break unless @catch.include?(status.to_i)
end
}
[status, headers, body]
end
def add app
@apps << app
end
def include? app
@apps.include? app
end
alias_method :<<, :add
end
end