Sha256: 47e9e20bb3fbe2df1be795d4e6118965803408599255909a587f00157250fb6c

Contents?: true

Size: 1.11 KB

Versions: 10

Compression:

Stored size: 1.11 KB

Contents

shared_context :middleware_test do
  include_context :rack_test

  let(:inner_app) do
    proc { [200, {}, []] }
  end

  subject(:app) do
    described_class.new(inner_app)
  end

  def collect_middleware(rack_app)
    [].tap do |middleware|
      while (rack_app = rack_app.instance_variable_get(:@app))
        middleware << rack_app
      end
    end
  end

  def find_middleware(rack_app, clazz)
    return rack_app if rack_app.is_a?(clazz)
    collect_middleware(rack_app).find { |middleware| middleware.is_a?(clazz) }
  end

  RSpec::Matchers.define :be_using do |expected, *_args|
    match do |actual|
      !find_middleware(actual, expected).nil?
    end
  end

  RSpec::Matchers.define :be_using_rack_stack do |*expected|
    match do |actual|
      collect_middleware(actual).collect(&:class) == expected
    end
  end

  def create_middleware
    Class.new do
      attr_reader :app, :arg
      def initialize(app, arg = nil)
        @app = app
        @arg = arg
        yield if block_given?
      end

      def call(env)
        @app.call env
      end
    end
  end

  let(:middleware) do
    create_middleware
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
sitehub-0.5.0.alpha12 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha11 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha10 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha8 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha7 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha6 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha5 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha4 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha3 spec/support/shared_contexts/middleware_context.rb
sitehub-0.5.0.alpha2 spec/support/shared_contexts/middleware_context.rb