Sha256: 8173f0a8cbb6d913dc24bc43f3fcfcbfe1db0f164605a032423dbd121b23fc13

Contents?: true

Size: 908 Bytes

Versions: 3

Compression:

Stored size: 908 Bytes

Contents

module WorkerRoulette
  module Lua
    @cache = Hash.new

    def self.call(lua_script, keys_accessed = [], args = [], &callback)
      WorkerRoulette.tradesman_connection_pool.with do |redis|
        results = redis.evalsha(sha(lua_script), keys_accessed.length, *keys_accessed, *args)
        results.callback &callback
        results.errback {self.eval(redis, lua_script, keys_accessed, args, &callback)}
      end
    end

    def self.sha(lua_script)
      @cache[lua_script] ||= Digest::SHA1.hexdigest(lua_script)
    end

    def self.cache
      @cache.dup
    end

    def self.clear_cache!
      @cache = {}
    end

    def self.eval(redis, lua_script, keys_accessed, args, &callback)
      results = redis.eval(lua_script, keys_accessed.size, *keys_accessed, *args)
      results.callback &callback
      results.errback  {|err_msg| raise EM::Hiredis::RedisError.new(err_msg)}
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
worker_roulette-0.1.0 lib/worker_roulette/lua.rb
worker_roulette-0.0.12 lib/worker_roulette/lua.rb
worker_roulette-0.0.11 lib/worker_roulette/lua.rb