class Shapkeep
Constants
- InvalidScriptNameError
- VERSION
Attributes
lua_root[RW]
sha_file[R]
Public Class Methods
new(sha_file)
click to toggle source
# File lib/shapkeep.rb, line 10 def initialize(sha_file) @sha_file = sha_file @lua_root = script_store.delete(:lua_root) { Dir.pwd } end
Public Instance Methods
eval(redis, name, keys = [], args = [])
click to toggle source
# File lib/shapkeep.rb, line 15 def eval(redis, name, keys = [], args = []) begin invalid_script_name!(name) unless script_available?(name) redis.evalsha(sha_for_script_name(name), keys, args) rescue Redis::CommandError => boom raise boom unless boom.message.include?('NOSCRIPT') load_script(redis, name) retry end end
load_scripts!(redis)
click to toggle source
# File lib/shapkeep.rb, line 27 def load_scripts!(redis) script_store.keys.each { |name| load_script(redis, name) } end
script_available?(name)
click to toggle source
# File lib/shapkeep.rb, line 35 def script_available?(name) script_store.has_key?(name) end
script_store()
click to toggle source
# File lib/shapkeep.rb, line 31 def script_store @script_store ||= YAML.load_file(sha_file) end
Private Instance Methods
invalid_script_name!(name)
click to toggle source
# File lib/shapkeep.rb, line 66 def invalid_script_name!(name) raise InvalidScriptNameError.new("No script with name [ #{name} ].") end
load_script(redis, name)
click to toggle source
# File lib/shapkeep.rb, line 61 def load_script(redis, name) sha = redis.script(:load, script_for_name(name)) script_store[name][:sha] = sha end
lua_filename?(string)
click to toggle source
# File lib/shapkeep.rb, line 57 def lua_filename?(string) ['.lua', '.LUA'].include?(string[-4..-1]) end
script_for_name(name)
click to toggle source
# File lib/shapkeep.rb, line 49 def script_for_name(name) potential_script = script_store[name.to_sym][:script] return potential_script unless lua_filename?(potential_script) File.read(File.join(lua_root, potential_script)) end
script_sha(script)
click to toggle source
# File lib/shapkeep.rb, line 45 def script_sha(script) Digest::SHA1.hexdigest(script) end
sha_for_script_name(name)
click to toggle source
# File lib/shapkeep.rb, line 41 def sha_for_script_name(name) script_store[name.to_sym][:sha] ||= script_sha(script_for_name(name)) end