Sha256: b224805de56d402022257c1120db6a99a991e895857e8f7bc91325e5a252f0dd

Contents?: true

Size: 1.12 KB

Versions: 3

Compression:

Stored size: 1.12 KB

Contents

require_relative "redic/client"

class Redic
  attr :url
  attr :client

  def initialize(url = "redis://127.0.0.1:6379", timeout = 10_000_000)
    @url = url
    @client = Redic::Client.new(url, timeout)
    @buffer = Hash.new { |h, k| h[k] = [] }
  end

  def buffer
    @buffer[Thread.current.object_id]
  end

  def reset
    @buffer.delete(Thread.current.object_id)
  end

  def clear
    @buffer.clear
  end

  def configure(url, timeout = 10_000_000)
    if @url != url
      @url = url
      @client.configure(url, timeout)
    end
  end

  def call(*args)
    @client.connect do
      @client.write(args)
      @client.read
    end
  end

  def call!(*args)
    reply = call(*args)

    if RuntimeError === reply
      raise reply
    end

    return reply
  end

  def queue(*args)
    buffer << args
  end

  def commit
    @client.connect do
      buffer.each do |args|
        @client.write(args)
      end

      buffer.map do
        @client.read
      end
    end
  ensure
    reset
  end

  def timeout
    @client.timeout
  end

  def timeout=(timeout)
    @client.timeout = timeout
  end

  def quit
    @client.quit
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
redic-1.5.3 lib/redic.rb
redic-1.5.2 lib/redic.rb
redic-1.5.1 lib/redic.rb