Sha256: f0914b6bd1028f3741d336dba54d5d006327c6d6f902e2fc37902bfe717720ef

Contents?: true

Size: 1.06 KB

Versions: 1

Compression:

Stored size: 1.06 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 quit
    @client.quit
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redic-1.5.0 lib/redic.rb