Module: Lapine::Consumer::Middleware

Defined in:
lib/lapine/consumer/middleware.rb,
lib/lapine/consumer/middleware/json_decoder.rb,
lib/lapine/consumer/middleware/error_handler.rb,
lib/lapine/consumer/middleware/message_ack_handler.rb

Overview

Consumer middleware can be registered as follows:

Lapine::Consumer::Middleware.add MyClass
Lapine::Consumer::Middleware.add MyClass, argument
Lapine::Consumer::Middleware.add_before MyClass, MyOtherClass, argument
Lapine::Consumer::Middleware.add_after MyClass, MyOtherClass, argument

Middleware should follow the pattern:

class MyMiddleware
  attr_reader :app

  def initialize(app, *arguments)
    @app = app
  end

  def call(message)
    # do stuff
    app.call(message)
  end
end

Defined Under Namespace

Classes: App, ErrorHandler, JsonDecoder, MessageAckHandler, Register, Registry

Constant Summary collapse

DEFAULT_MIDDLEWARE =
[
  Register.new(MessageAckHandler),
  Register.new(ErrorHandler),
  Register.new(JsonDecoder)
].freeze

Class Method Summary collapse

Class Method Details

.add(klass, *args) ⇒ Object



46
47
48
# File 'lib/lapine/consumer/middleware.rb', line 46

def add(klass, *args)
  registry << [klass, args]
end

.add_after(after_klass, klass, *args) ⇒ Object

Raises:



56
57
58
59
60
# File 'lib/lapine/consumer/middleware.rb', line 56

def add_after(after_klass, klass, *args)
  idx = registry.index_of(after_klass)
  raise MiddlewareNotFound.new("#{after_klass} not registered in Lapine middleware") unless idx
  registry.insert(idx + 1, klass, args)
end

.add_before(before_klass, klass, *args) ⇒ Object

Raises:



50
51
52
53
54
# File 'lib/lapine/consumer/middleware.rb', line 50

def add_before(before_klass, klass, *args)
  idx = registry.index_of(before_klass)
  raise MiddlewareNotFound.new("#{before_klass} not registered in Lapine middleware") unless idx
  registry.insert(idx, klass, args)
end

.appObject



74
75
76
77
78
# File 'lib/lapine/consumer/middleware.rb', line 74

def app
  App.new.tap do |app|
    app.chain = create_chain(app)
  end
end

.create_chain(app) ⇒ Object



70
71
72
# File 'lib/lapine/consumer/middleware.rb', line 70

def create_chain(app)
  registry.map { |r| r.create_new(app) }
end

.delete(klass) ⇒ Object



62
63
64
# File 'lib/lapine/consumer/middleware.rb', line 62

def delete(klass)
  registry.delete(klass)
end

.registryObject



66
67
68
# File 'lib/lapine/consumer/middleware.rb', line 66

def registry
  @registry ||= Registry.new(DEFAULT_MIDDLEWARE.dup)
end