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