class WaterDrop::Middleware

Simple middleware layer for manipulating messages prior to their validation

Public Class Methods

new() click to toggle source
# File lib/waterdrop/middleware.rb, line 6
def initialize
  @mutex = Mutex.new
  @steps = []
end

Public Instance Methods

append(step) click to toggle source

Register given middleware as the last one in the chain @param step [#call] step that needs to return the message

# File lib/waterdrop/middleware.rb, line 44
def append(step)
  @mutex.synchronize do
    @steps.append step
  end
end
prepend(step) click to toggle source

Register given middleware as the first one in the chain @param step [#call] step that needs to return the message

# File lib/waterdrop/middleware.rb, line 36
def prepend(step)
  @mutex.synchronize do
    @steps.prepend step
  end
end
run(message) click to toggle source

Runs middleware on a single message prior to validation

@param message [Hash] message hash @return [Hash] message hash. Either the same if transformed in place, or a copy if modified

into a new object.

@note You need to decide yourself whether you don’t use the message hash data anywhere else

and you want to save on memory by modifying it in place or do you want to do a deep copy
# File lib/waterdrop/middleware.rb, line 18
def run(message)
  @steps.each do |step|
    message = step.call(message)
  end

  message
end
run_many(messages) click to toggle source

@param messages [Array<Hash>] messages on which we want to run middlewares @return [Array<Hash>] transformed messages

# File lib/waterdrop/middleware.rb, line 28
def run_many(messages)
  messages.map do |message|
    run(message)
  end
end