From 853c229bbdb32c27231df8ad0d446bb35e588586 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Fri, 1 May 2009 20:24:14 +0100 Subject: Rename vendor/rack to vendor/rack-1.1.pre --- .../vendor/rack-1.1.pre/rack/cascade.rb | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/cascade.rb (limited to 'actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/cascade.rb') diff --git a/actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/cascade.rb b/actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/cascade.rb new file mode 100644 index 0000000000..a038aa1105 --- /dev/null +++ b/actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/cascade.rb @@ -0,0 +1,36 @@ +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 -- cgit v1.2.3