Sha256: ef07547ad5bf9d9149a974b2de50ddeffc9c5a0872feaddd5d060b49bb4d3200
Contents?: true
Size: 1.32 KB
Versions: 1
Compression:
Stored size: 1.32 KB
Contents
require 'digest/sha1' module Wolverine class LuaError < StandardError ; end class LuaCompilationError < LuaError ; end class LuaRuntimeError < LuaError ; end class Script attr_reader :content, :digest, :file def initialize file @file = file @content = load_lua file @digest = Digest::SHA1.hexdigest @content end def call redis, *args begin run_evalsha redis, *args rescue => e e.message =~ /NOSCRIPT/ ? run_eval(redis, *args) : raise end rescue => e if e.message =~ /ERR Error (compiling|running) script \(.*?\): \[.*?\]:(\d+): (.*)/ stage, line_number, message = $1, $2, $3 klass = (stage == "compiling") ? LuaCompilationError : LuaRuntimeError begin raise klass.new(message) rescue => e raise correct_lua_backtrace(e, file, line_number) end else raise end end private def correct_lua_backtrace(error, file, line_number) 4.times { error.backtrace.shift } error.backtrace.unshift("#{file}:#{line_number}") error end def run_evalsha redis, *args redis.evalsha digest, args.size, *args end def run_eval redis, *args redis.eval content, args.size, *args end def load_lua file File.read file end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wolverine-0.2.1 | lib/wolverine/script.rb |