Sha256: 32b57a557bce2a771725ae4cb4fe9d96c66a70caa8d683be8d8271e4ca68589a

Contents?: true

Size: 1.83 KB

Versions: 3

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

module GrpcKit
  module Interceptors
    module Client
      class RequestResponse
        attr_writer :interceptors

        def initialize
          # Cant' get interceptor at definition time...
          @interceptors = nil
        end

        def intercept(request, call, metadata, &block)
          if @interceptors && !@interceptors.empty?
            do_intercept(@interceptors.dup, request, call, metadata, &block)
          else
            yield(request, call, metadata)
          end
        end

        private

        def do_intercept(interceptors, request, call, metadata)
          if interceptors.empty?
            return yield(request, call, metadata)
          end

          interceptor = interceptors.pop
          interceptor.request_response(request: request, call: call, method: call.method, metadata: metadata) do
            do_intercept(interceptors, request, call, metadata) do |r, c, m|
              yield(r, c, m)
            end
          end
        end
      end
    end

    module Server
      class RequestResponse
        def initialize(interceptors)
          @interceptors = interceptors
        end

        def intercept(request, call, &block)
          if @interceptors && !@interceptors.empty?
            do_intercept(@interceptors.dup, request, call, &block)
          else
            yield(request, call)
          end
        end

        private

        def do_intercept(interceptors, request, call)
          if interceptors.empty?
            return yield(request, call)
          end

          interceptor = interceptors.pop
          interceptor.request_response(request: request, call: call, method: call.method) do
            do_intercept(interceptors, request, call) do |req, c|
              yield(req, c)
            end
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
grpc_kit-0.1.3 lib/grpc_kit/interceptors/request_response.rb
grpc_kit-0.1.2 lib/grpc_kit/interceptors/request_response.rb
grpc_kit-0.1.1 lib/grpc_kit/interceptors/request_response.rb