Sha256: 8cb7f1a8155af2a1045e1cc0db0aacc1a9638c948f8a8911743651f0f7664011

Contents?: true

Size: 771 Bytes

Versions: 51

Compression:

Stored size: 771 Bytes

Contents

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
    NotFound = [404, {}, []]

    attr_reader :apps

    def initialize(apps, catch=404)
      @apps = []; @has_app = {}
      apps.each { |app| add app }

      @catch = {}
      [*catch].each { |status| @catch[status] = true }
    end

    def call(env)
      result = NotFound

      @apps.each do |app|
        result = app.call(env)
        break unless @catch.include?(result[0].to_i)
      end

      result
    end

    def add app
      @has_app[app] = true
      @apps << app
    end

    def include? app
      @has_app.include? app
    end

    alias_method :<<, :add
  end
end

Version data entries

51 entries across 48 versions & 15 rubygems

Version Path
rack-1.3.3 lib/rack/cascade.rb
rack-1.3.2 lib/rack/cascade.rb
rack-1.3.1 lib/rack/cascade.rb
search_biomodel-1.0.0 search_biomodel/ruby/1.8/gems/rack-1.3.0/lib/rack/cascade.rb
rack-1.2.3 lib/rack/cascade.rb
rack-1.3.0 lib/rack/cascade.rb
rack-1.3.0.beta2 lib/rack/cascade.rb
rack-1.3.0.beta lib/rack/cascade.rb
rack-1.2.2 lib/rack/cascade.rb
rack-1.1.2 lib/rack/cascade.rb
rack-1.1.1 lib/rack/cascade.rb
rack-1.1.1.pre lib/rack/cascade.rb
edgar-rack-1.2.1 lib/rack/cascade.rb
eac-rack-1.1.1 lib/rack/cascade.rb
rack-1.2.1 lib/rack/cascade.rb
rack-1.2.0 lib/rack/cascade.rb
akamai_bookmarklet-0.1.2 vendor/gems/ruby/1.8/gems/rack-1.1.0/lib/rack/cascade.rb
middleman-0.13.1 lib/middleman/vendor/gems/ruby/1.9.1/gems/rack-1.1.0/lib/rack/cascade.rb
middleman-0.13.1 lib/middleman/vendor/gems/ruby/1.8/gems/rack-1.1.0/lib/rack/cascade.rb
akamai_bookmarklet-0.1.1 vendor/gems/ruby/1.8/gems/rack-1.1.0/lib/rack/cascade.rb