Class: Reqless::LuaScript

Inherits:
Object
  • Object
show all
Defined in:
lib/reqless/lua_script.rb

Overview

Wraps a lua script. Knows how to reload it if necessary

Direct Known Subclasses

LuaPlugin

Defined Under Namespace

Modules: ScriptNotLoadedRedisCommandError

Constant Summary collapse

DEFAULT_ON_RELOAD_CALLBACK =
proc {}
SCRIPT_ROOT =
File.expand_path('../lua', __FILE__)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, redis, options = {}) ⇒ LuaScript

Returns a new instance of LuaScript.



13
14
15
16
17
18
# File 'lib/reqless/lua_script.rb', line 13

def initialize(name, redis, options = {})
  @name  = name
  @on_reload_callback = options[:on_reload_callback] || DEFAULT_ON_RELOAD_CALLBACK
  @redis = redis
  @sha   = Digest::SHA1.hexdigest(script_contents)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



20
21
22
# File 'lib/reqless/lua_script.rb', line 20

def name
  @name
end

#redisObject (readonly)

Returns the value of attribute redis.



20
21
22
# File 'lib/reqless/lua_script.rb', line 20

def redis
  @redis
end

#shaObject (readonly)

Returns the value of attribute sha.



20
21
22
# File 'lib/reqless/lua_script.rb', line 20

def sha
  @sha
end

Instance Method Details

#call(*argv) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/reqless/lua_script.rb', line 28

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

#reloadObject



22
23
24
25
26
# File 'lib/reqless/lua_script.rb', line 22

def reload
  @sha = @redis.script(:load, script_contents)
  @on_reload_callback.call(@redis, @sha)
  @sha
end