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

Version Path
ai_client-0.2.4 lib/ai_client/middleware.rb
ai_client-0.2.3 lib/ai_client/middleware.rb
ai_client-0.2.2 lib/ai_client/middleware.rb
ai_client-0.2.1 lib/ai_client/middleware.rb
ai_client-0.2.0 lib/ai_client/middleware.rb