Sha256: ea1b4c666add78122fbb8064dc3318582e4f62a1e288dd79dc346aeaed3cf7dc

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

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

module Oxblood
  # Implements usual Request/Response protocol.
  # Error responses will be raised.
  #
  # @note {Session} don't maintain threadsafety! In multithreaded environment
  #   please use {Pool}
  #
  # @example
  #   conn = Oxblood::Connection.new
  #   session = Oxblood::Session.new(conn)
  #   session.ping # => 'PONG'
  class Session
    include Commands

    attr_reader :connection

    def initialize(connection)
      @connection = connection
    end

    # Send queries using pipelining.
    # Sync operation will be executed automatically at the end of a block.
    #
    # @see https://redis.io/topics/pipelining
    #
    # @yield [pipeline] provide {Pipeline} to a block
    # @yieldreturn [Array] responses from all executed operations
    #
    # @example
    #  session = Oxblood::Session.new(Oxblood::Connection.new)
    #  session.pipelined do |pipeline|
    #    pipeline.set('hello', 'world')
    #    pipeline.get('hello')
    #  end # => ['OK', 'world']
    def pipelined
      pipeline = Pipeline.new(connection)
      yield pipeline
      pipeline.sync
    end

    private

    def run(*command)
      response = @connection.run_command(*command)
      error?(response) ? (raise response) : response
    end

    def error?(response)
      Protocol::RError === response
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
oxblood-0.1.0.dev11 lib/oxblood/session.rb