Sha256: 39b8b5c59911ffe460624ff982b09c90b92ff31600900cf7e75e407b0f8828ab
Contents?: true
Size: 886 Bytes
Versions: 5
Compression:
Stored size: 886 Bytes
Contents
# lib/ai_client/middleware.rb # TODO: As concurrently designed the middleware must # be set before an instance of AiClient is created. # Any `use` commands for middleware made after # the instance is created will not be available # to that instance. # Change this so that middleware can be added # and removed from an existing client. class AiClient def call_with_middlewares(method, *args, **kwargs, &block) stack = self.class.middlewares.reverse.reduce(-> { send(method, *args, **kwargs, &block) }) do |next_middleware, middleware| -> { middleware.call(self, next_middleware, *args, **kwargs) } end stack.call end class << self def middlewares @middlewares ||= [] end def use(middleware) middlewares << middleware end def clear_middlewares @middlewares = [] end end end
Version data entries
5 entries across 5 versions & 1 rubygems