Module: WorkerRoulette::Lua

Defined in:
lib/worker_roulette/lua.rb

Class Method Summary collapse

Class Method Details

.cacheObject



17
18
19
# File 'lib/worker_roulette/lua.rb', line 17

def self.cache
  @cache.dup
end

.call(lua_script, keys_accessed = [], args = [], &callback) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/worker_roulette/lua.rb', line 5

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

.clear_cache!Object



21
22
23
# File 'lib/worker_roulette/lua.rb', line 21

def self.clear_cache!
  @cache = {}
end

.eval(redis, lua_script, keys_accessed, args, &callback) ⇒ Object



25
26
27
28
29
# File 'lib/worker_roulette/lua.rb', line 25

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

.sha(lua_script) ⇒ Object



13
14
15
# File 'lib/worker_roulette/lua.rb', line 13

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