Module: WorkerRoulette::Lua
- Defined in:
- lib/worker_roulette/lua.rb
Class Method Summary collapse
- .cache ⇒ Object
- .call(lua_script, keys_accessed = [], args = [], &callback) ⇒ Object
- .clear_cache! ⇒ Object
- .eval(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
- .evalsha(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
- .sha(lua_script) ⇒ Object
Class Method Details
.cache ⇒ Object
15 16 17 |
# File 'lib/worker_roulette/lua.rb', line 15 def self.cache @cache.dup end |
.call(lua_script, keys_accessed = [], args = [], &callback) ⇒ Object
5 6 7 8 9 |
# 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 = evalsha(redis, lua_script, keys_accessed, args, &callback) end end |
.clear_cache! ⇒ Object
19 20 21 |
# File 'lib/worker_roulette/lua.rb', line 19 def self.clear_cache! @cache = {} end |
.eval(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
23 24 25 26 27 |
# File 'lib/worker_roulette/lua.rb', line 23 def self.eval(redis, lua_script, keys_accessed, args, &callback) results = redis.eval(lua_script, keys_accessed.size, *keys_accessed, *args) results.callback &callback if callback results.errback {|err_msg| raise EM::Hiredis::RedisError.new(err_msg)} end |
.evalsha(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/worker_roulette/lua.rb', line 29 def self.evalsha(redis, lua_script, keys_accessed, args, &callback) if redis.class == EM::Hiredis::Client results = redis.evalsha(sha(lua_script), keys_accessed.length, *keys_accessed, *args) results.callback &callback if callback results.errback {self.eval(redis, lua_script, keys_accessed, args, &callback)} else begin results = redis.evalsha(sha(lua_script), keys_accessed, args) rescue Redis::CommandError results = redis.eval(lua_script, keys_accessed, args) ensure return callback.call results if callback end end results end |
.sha(lua_script) ⇒ Object
11 12 13 |
# File 'lib/worker_roulette/lua.rb', line 11 def self.sha(lua_script) @cache[lua_script] ||= Digest::SHA1.hexdigest(lua_script) end |