Sha256: 6f40bd9fc71c98efafb0b9d135094e085b757aff58e89b13b9be894ca53f062c
Contents?: true
Size: 1.48 KB
Versions: 11
Compression:
Stored size: 1.48 KB
Contents
# Allows arbitrary wrapping of the job deserialization and job execution procedures class Sqewer::MiddlewareStack # Returns the default middleware stack, which is empty (an instance of None). # # @return [MiddlewareStack] the default empty stack def self.default @instance ||= new end # Creates a new MiddlewareStack. Once created, handlers can be added using `:<<` def initialize @handlers = [] end # Adds a handler. The handler should respond to :around_deserialization and #around_execution. # # @param handler[#around_deserializarion, #around_execution] The middleware item to insert # @return [void] def <<(handler) @handlers << handler # TODO: cache the wrapping proc end 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 def around_deserialization(serializer, message_id, message_body, &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, message_id, message_body, &outer_block) } }.call end end
Version data entries
11 entries across 11 versions & 1 rubygems