Sha256: 9c7692ba5ee31897b778896bb827752d65221164eae67470905e7b9fe501addb

Contents?: true

Size: 1.42 KB

Versions: 13

Compression:

Stored size: 1.42 KB

Contents

class MockRedis
  class PipelinedWrapper
    include UndefRedisMethods

    def respond_to?(method, include_private = false)
      super || @db.respond_to?(method)
    end

    def initialize(db)
      @db = db
      @pipelined_futures = []
      @nesting_level = 0
    end

    def initialize_copy(source)
      super
      @db = @db.clone
      @pipelined_futures = @pipelined_futures.clone
    end

    ruby2_keywords def method_missing(method, *args, &block)
      if in_pipeline?
        future = MockRedis::Future.new([method, *args], block)
        @pipelined_futures << future
        future
      else
        @db.send(method, *args, &block)
      end
    end

    def pipelined(_options = {})
      begin
        @nesting_level += 1
        yield self
      ensure
        @nesting_level -= 1
      end

      if in_pipeline?
        return
      end

      responses = @pipelined_futures.flat_map do |future|
        begin
          result = if future.block
                     send(*future.command, &future.block)
                   else
                     send(*future.command)
                   end
          future.store_result(result)

          if future.block
            result
          else
            [result]
          end
        rescue StandardError => e
          e
        end
      end
      @pipelined_futures = []
      responses
    end

    private

    def in_pipeline?
      @nesting_level > 0
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
mock_redis-0.36.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.35.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.34.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.33.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.32.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.31.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.30.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.29.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.28.0 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.27.3 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.27.2 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.27.1 lib/mock_redis/pipelined_wrapper.rb
mock_redis-0.27.0 lib/mock_redis/pipelined_wrapper.rb