Sha256: 70d981e3b32806a611798ce978bac592a2a377c25d24e20d0cf0f2caf279180a

Contents?: true

Size: 1.11 KB

Versions: 6

Compression:

Stored size: 1.11 KB

Contents

module Thrift
  module Middleware
    class NopMiddleware
      def handle_binary(_mth, args = {}, &block)
        block.call(args)
      end

      def handle_unary(_mth, args = {},  &block)
        block.call(args)
      end
    end

    class MultiMiddleware
      def initialize(middlewares)
        @middlewares = middlewares
      end

      def handle_unary(mth, args = {}, &block)
        @middlewares.reverse.reduce(block) do |acc, m|
          Proc.new do |args|
            m.handle_unary(mth, args) { |args| acc.call(args) }
          end
        end.call(args)
      end

      def handle_binary(mth, args = {}, &block)
        @middlewares.reverse.reduce(block) do |acc, m|
          Proc.new do |args|
            m.handle_binary(mth, args) { |args| acc.call(args) }
          end
        end.call(args)
      end
    end

    NOP_MIDDLEWARE = NopMiddleware.new

    class << self
      def wrap(middlewares)
        case middlewares.length
        when 0
          NOP_MIDDLEWARE
        when 1
          middlewares.first
        else
          MultiMiddleware.new(middlewares)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
upfluence-thrift-2.6.8 lib/thrift/middleware.rb
upfluence-thrift-2.6.1 lib/thrift/middleware.rb
upfluence-thrift-2.4.4 lib/thrift/middleware.rb
upfluence-thrift-2.3.1 lib/thrift/middleware.rb
upfluence-thrift-2.3.0 lib/thrift/middleware.rb
upfluence-thrift-2.2.0 lib/thrift/middleware.rb