Sha256: 53a6dfde7a0332f675f991298ec7695d78606f4b9a4022e5ad39cef7e5591e66

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

require 'oxblood/protocol'
require 'oxblood/commands'

module Oxblood
  # Redis pipeling class. Commands won't be send until {#sync} is called.
  # Error responses won't be raised and should be checked manually in the
  # responses array.
  # @see http://redis.io/topics/pipelining#redis-pipelining
  #
  # @example Basic workflow
  #   pipeline = Pipeline.new(connection)
  #   pipeline.echo('ping')
  #   pipeline.ping
  #   pipeline.echo('!')
  #   pipeline.sync # => ["ping", "PONG", "!"]
  class Pipeline
    include Commands

    attr_reader :connection

    def initialize(connection)
      @connection = connection
      @commands = Array.new
    end

    # Sends all commands at once and reads responses
    # @return [Array] of responses
    def sync
      serialized_commands = @commands.map { |c| Protocol.build_command(*c) }
      connection.socket.write(serialized_commands.join)
      Array.new(@commands.size) { connection.read_response }
    ensure
      @commands.clear
    end

    private

    def run(*command)
      @commands << command
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
oxblood-0.3.0 lib/oxblood/pipeline.rb