Class: WaterDrop::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/waterdrop/middleware.rb

Overview

Simple middleware layer for manipulating messages prior to their validation

Instance Method Summary collapse

Constructor Details

#initializeMiddleware

Returns a new instance of Middleware.



6
7
8
9
# File 'lib/waterdrop/middleware.rb', line 6

def initialize
  @mutex = Mutex.new
  @steps = []
end

Instance Method Details

#append(step) ⇒ Object

Register given middleware as the last one in the chain

Parameters:

  • step (#call)

    step that needs to return the message



44
45
46
47
48
# File 'lib/waterdrop/middleware.rb', line 44

def append(step)
  @mutex.synchronize do
    @steps.append step
  end
end

#prepend(step) ⇒ Object

Register given middleware as the first one in the chain

Parameters:

  • step (#call)

    step that needs to return the message



36
37
38
39
40
# File 'lib/waterdrop/middleware.rb', line 36

def prepend(step)
  @mutex.synchronize do
    @steps.prepend step
  end
end

#run(message) ⇒ Hash

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

Runs middleware on a single message prior to validation

Parameters:

  • message (Hash)

    message hash

Returns:

  • (Hash)

    message hash. Either the same if transformed in place, or a copy if modified into a new object.



18
19
20
21
22
23
24
# File 'lib/waterdrop/middleware.rb', line 18

def run(message)
  @steps.each do |step|
    message = step.call(message)
  end

  message
end

#run_many(messages) ⇒ Array<Hash>

Returns transformed messages.

Parameters:

  • messages (Array<Hash>)

    messages on which we want to run middlewares

Returns:

  • (Array<Hash>)

    transformed messages



28
29
30
31
32
# File 'lib/waterdrop/middleware.rb', line 28

def run_many(messages)
  messages.map do |message|
    run(message)
  end
end