Sha256: 5447a90f9070fbb0f958b95d04d92c29081437be8615c6169d0f43fdde4e93a7

Contents?: true

Size: 1.08 KB

Versions: 18

Compression:

Stored size: 1.08 KB

Contents

module Praxis
  class MiddlewareApp

    attr_reader :target

    # Initialize the application instance with the desired args, and return the wrapping class.
    def self.for( **args )
      Class.new(self) do
        @args = args
        @setup_done = false
        def self.name
          'MiddlewareApp'
        end
        def self.args
          @args
        end
        def self.setup_done
          @setup_done
        end
        def self.setup
          @setup_done = true
          Praxis::Application.instance.setup(**@args)
        end
      end
     end

    def initialize( inner )
      @target = inner
      @setup_done = false
    end

    def call(env)
      self.class.setup unless self.class.setup_done
      
      result = Praxis::Application.instance.call(env)

      unless ( [404,405].include?(result[0].to_i) && result[1]['X-Cascade'] == 'pass' )
        # Respect X-Cascade header if it doesn't specify 'pass'
        result
      else
        last_body = result[2]
        last_body.close if last_body.respond_to? :close
        target.call(env)
      end
    end

  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
praxis-2.0.pre.18 lib/praxis/middleware_app.rb
praxis-2.0.pre.17 lib/praxis/middleware_app.rb
praxis-2.0.pre.16 lib/praxis/middleware_app.rb
praxis-2.0.pre.15 lib/praxis/middleware_app.rb
praxis-2.0.pre.14 lib/praxis/middleware_app.rb
praxis-2.0.pre.13 lib/praxis/middleware_app.rb
praxis-2.0.pre.12 lib/praxis/middleware_app.rb
praxis-2.0.pre.11 lib/praxis/middleware_app.rb
praxis-2.0.pre.10 lib/praxis/middleware_app.rb
praxis-2.0.pre.9 lib/praxis/middleware_app.rb
praxis-2.0.pre.8 lib/praxis/middleware_app.rb
praxis-2.0.pre.7 lib/praxis/middleware_app.rb
praxis-2.0.pre.6 lib/praxis/middleware_app.rb
praxis-2.0.pre.5 lib/praxis/middleware_app.rb
praxis-2.0.pre.4 lib/praxis/middleware_app.rb
praxis-2.0.pre.3 lib/praxis/middleware_app.rb
praxis-2.0.pre.2 lib/praxis/middleware_app.rb
praxis-2.0.pre.1 lib/praxis/middleware_app.rb