class Qless::LuaScript
Wraps a lua script. Knows how to reload it if necessary
Constants
- SCRIPT_ROOT
Attributes
name[R]
redis[R]
sha[R]
Public Class Methods
new(name, redis)
click to toggle source
# File lib/qless/lua_script.rb, line 12 def initialize(name, redis) @name = name @redis = redis @sha = Digest::SHA1.hexdigest(script_contents) end
Public Instance Methods
call(*argv)
click to toggle source
# File lib/qless/lua_script.rb, line 24 def call(*argv) handle_no_script_error do _call(*argv) end rescue Redis::CommandError => err if match = err.message.match('user_script:\d+:\s*(\w+.+$)') raise LuaScriptError.new(match[1]) else raise err end end
reload()
click to toggle source
# File lib/qless/lua_script.rb, line 20 def reload @sha = @redis.script(:load, script_contents) end
Private Instance Methods
_call(*argv)
click to toggle source
# File lib/qless/lua_script.rb, line 39 def _call(*argv) @redis.evalsha(@sha, 0, *argv) end
handle_no_script_error() { || ... }
click to toggle source
# File lib/qless/lua_script.rb, line 48 def handle_no_script_error yield rescue ScriptNotLoadedRedisCommandError reload yield end
script_contents()
click to toggle source
# File lib/qless/lua_script.rb, line 64 def script_contents @script_contents ||= File.read(File.join(SCRIPT_ROOT, "#{@name}.lua")) end