Class: Sqewer::MiddlewareStack
- Inherits:
-
Object
- Object
- Sqewer::MiddlewareStack
- Defined in:
- lib/sqewer/middleware_stack.rb
Overview
Allows arbitrary wrapping of the job deserialization and job execution procedures
Class Method Summary collapse
-
.default ⇒ MiddlewareStack
Returns the default middleware stack, which is empty (an instance of None).
Instance Method Summary collapse
-
#<<(handler) ⇒ void
Adds a handler.
- #around_deserialization(serializer, message_id, message_body, &inner_block) ⇒ Object
- #around_execution(job, context, &inner_block) ⇒ Object
-
#initialize ⇒ MiddlewareStack
constructor
Creates a new MiddlewareStack.
Constructor Details
#initialize ⇒ MiddlewareStack
Creates a new MiddlewareStack. Once created, handlers can be added using :<<
12 13 14 |
# File 'lib/sqewer/middleware_stack.rb', line 12 def initialize @handlers = [] end |
Class Method Details
.default ⇒ MiddlewareStack
Returns the default middleware stack, which is empty (an instance of None).
7 8 9 |
# File 'lib/sqewer/middleware_stack.rb', line 7 def self.default @instance ||= new end |
Instance Method Details
#<<(handler) ⇒ void
This method returns an undefined value.
Adds a handler. The handler should respond to :around_deserialization and #around_execution.
20 21 22 23 |
# File 'lib/sqewer/middleware_stack.rb', line 20 def <<(handler) @handlers << handler # TODO: cache the wrapping proc end |
#around_deserialization(serializer, message_id, message_body, &inner_block) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/sqewer/middleware_stack.rb', line 36 def around_deserialization(serializer, , , &inner_block) return yield if @handlers.empty? responders = @handlers.select{|e| e.respond_to?(:around_deserialization) } responders.reverse.inject(inner_block) {|outer_block, middleware_object| ->{ middleware_object.public_send(:around_deserialization, serializer, , , &outer_block) } }.call end |
#around_execution(job, context, &inner_block) ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/sqewer/middleware_stack.rb', line 25 def around_execution(job, context, &inner_block) return yield if @handlers.empty? responders = @handlers.select{|e| e.respond_to?(:around_execution) } responders.reverse.inject(inner_block) {|outer_block, middleware_object| ->{ middleware_object.public_send(:around_execution, job, context, &outer_block) } }.call end |