class Hanami::Events::CloudPubsub::Middleware::Stack

Middleware which is invoked when a message is received

Attributes

entries[R]

Public Class Methods

new(*entries) { |self| ... } click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 21
def initialize(*entries)
  entries.each(&method(:ensure_callable))
  @entries = entries
  yield self if block_given?
end

Public Instance Methods

<<(middleware) click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 27
def <<(middleware)
  ensure_callable(middleware)
  entries << middleware
  self
end
invoke(*args, **kwargs) { |*args, **kwargs, **opts| ... } click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 43
def invoke(*args, **kwargs)
  stack = entries.dup

  traverse_stack = proc do |**opts|
    if stack.empty?
      yield(*args, **kwargs, **opts)
    else
      stack.shift.call(*args, **kwargs, **opts, &traverse_stack)
    end
  end

  traverse_stack.call
end
prepend(middleware) click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 33
def prepend(middleware)
  ensure_callable(middleware)
  entries.insert 0, middleware
  self
end
shift() click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 39
def shift
  @entries.shift
end

Private Instance Methods

ensure_callable(middleware) click to toggle source
# File lib/hanami/events/cloud_pubsub/middleware/stack.rb, line 59
def ensure_callable(middleware)
  raise InvalidMiddlewareError, middleware unless middleware.respond_to?(:call)
end