Sha256: cc1534a39b7fd4224d3282a20910a72fdd4b6c62bf64661385b3a3129bbb38ae

Contents?: true

Size: 1.43 KB

Versions: 27

Compression:

Stored size: 1.43 KB

Contents

require 'spec_helper'

RSpec.describe Shoryuken::Middleware::Chain do
  class CustomMiddleware
    def initialize(name, recorder)
      @name     = name
      @recorder = recorder
    end

    def call(*_args)
      @recorder << [@name, 'before']
      yield
      @recorder << [@name, 'after']
    end
  end

  class CustomMiddlewareB < CustomMiddleware; end

  it 'supports custom middleware' do
    subject.add CustomMiddleware, 1, []

    expect(CustomMiddleware).to eq subject.entries.last.klass
  end

  it 'can add middleware to the front of chain' do
    subject.prepend CustomMiddleware, 1, []

    expect([CustomMiddleware]).to eq subject.entries.map(&:klass)

    subject.prepend CustomMiddlewareB, 1, []

    expect([CustomMiddlewareB, CustomMiddleware]).to eq subject.entries.map(&:klass)
  end

  it 'invokes a middleware' do
    recorder = []
    subject.add CustomMiddleware, 'custom', recorder

    final_action = nil
    subject.invoke { final_action = true }
    expect(final_action).to eq true
    expect(recorder).to eq [%w[custom before], %w[custom after]]
  end

  class NonYieldingMiddleware
    def call(*args); end
  end

  it 'allows middleware to abruptly stop processing rest of chain' do
    recorder = []
    subject.add NonYieldingMiddleware
    subject.add CustomMiddleware, 'custom', recorder

    final_action = nil
    subject.invoke { final_action = true }
    expect(final_action).to eq nil
    expect(recorder).to eq []
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
shoryuken-6.2.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-6.2.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-6.1.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-6.1.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-6.0.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.3.2 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.3.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.3.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.2.3 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.2.2 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.2.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.2.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.1.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.1.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.6 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.5 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.4 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.3 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.2 spec/shoryuken/middleware/chain_spec.rb
shoryuken-5.0.1 spec/shoryuken/middleware/chain_spec.rb