wolverine 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/wolverine.rb +1 -0
- data/lib/wolverine/lua_error.rb +41 -0
- data/lib/wolverine/script.rb +2 -17
- data/lib/wolverine/version.rb +1 -1
- data/test/wolverine/script_test.rb +6 -4
- metadata +8 -7
data/lib/wolverine.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Wolverine
|
2
|
+
class LuaError < StandardError
|
3
|
+
PATTERN = /ERR Error (compiling|running) script \(.*?\): \[.*?\]:(\d+): (.*)/
|
4
|
+
WOLVERINE_LIB_PATH = File.expand_path('../../', __FILE__)
|
5
|
+
|
6
|
+
def self.intercepts?(e)
|
7
|
+
e.message =~ PATTERN
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :error, :file
|
11
|
+
def initialize(error, file)
|
12
|
+
@error = error
|
13
|
+
@file = file
|
14
|
+
|
15
|
+
error.message =~ PATTERN
|
16
|
+
stage, line_number, message = $1, $2, $3
|
17
|
+
|
18
|
+
|
19
|
+
super(message)
|
20
|
+
set_backtrace generate_backtrace(file, line_number)
|
21
|
+
end
|
22
|
+
|
23
|
+
def generate_backtrace(file, line_number)
|
24
|
+
pre_wolverine = backtrace_before_entering_wolverine(error.backtrace)
|
25
|
+
index_of_first_wolverine_line = (error.backtrace.size - pre_wolverine.size - 1)
|
26
|
+
pre_wolverine.unshift(error.backtrace[index_of_first_wolverine_line])
|
27
|
+
pre_wolverine.unshift("#{file}:#{line_number}")
|
28
|
+
pre_wolverine
|
29
|
+
end
|
30
|
+
|
31
|
+
def backtrace_before_entering_wolverine(backtrace)
|
32
|
+
backtrace.reverse.take_while { |line| ! line_from_wolverine(line) }.reverse
|
33
|
+
end
|
34
|
+
|
35
|
+
def line_from_wolverine(line)
|
36
|
+
line.split(':').first.include?(WOLVERINE_LIB_PATH)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/lib/wolverine/script.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'digest/sha1'
|
2
2
|
|
3
3
|
module Wolverine
|
4
|
-
class LuaError < StandardError ; end
|
5
|
-
class LuaCompilationError < LuaError ; end
|
6
|
-
class LuaRuntimeError < LuaError ; end
|
7
4
|
|
8
5
|
class Script
|
9
6
|
attr_reader :content, :digest, :file
|
@@ -20,14 +17,8 @@ module Wolverine
|
|
20
17
|
e.message =~ /NOSCRIPT/ ? run_eval(redis, *args) : raise
|
21
18
|
end
|
22
19
|
rescue => e
|
23
|
-
if
|
24
|
-
|
25
|
-
klass = (stage == "compiling") ? LuaCompilationError : LuaRuntimeError
|
26
|
-
begin
|
27
|
-
raise klass.new(message)
|
28
|
-
rescue => e
|
29
|
-
raise correct_lua_backtrace(e, file, line_number)
|
30
|
-
end
|
20
|
+
if LuaError.intercepts?(e)
|
21
|
+
raise LuaError.new(e, file)
|
31
22
|
else
|
32
23
|
raise
|
33
24
|
end
|
@@ -35,12 +26,6 @@ module Wolverine
|
|
35
26
|
|
36
27
|
private
|
37
28
|
|
38
|
-
def correct_lua_backtrace(error, file, line_number)
|
39
|
-
4.times { error.backtrace.shift }
|
40
|
-
error.backtrace.unshift("#{file}:#{line_number}")
|
41
|
-
error
|
42
|
-
end
|
43
|
-
|
44
29
|
def run_evalsha redis, *args
|
45
30
|
redis.evalsha digest, args.size, *args
|
46
31
|
end
|
data/lib/wolverine/version.rb
CHANGED
@@ -23,9 +23,10 @@ module Wolverine
|
|
23
23
|
script.instance_variable_set("@content", "asdfasdfasdf+31f")
|
24
24
|
script.instance_variable_set("@digest", "79437f5edda13f9c1669b978dd7a9066dd2059f1")
|
25
25
|
script.call(Redis.new)
|
26
|
-
rescue Wolverine::
|
26
|
+
rescue Wolverine::LuaError => e
|
27
27
|
assert_equal "'=' expected near '+'", e.message
|
28
|
-
assert_equal "e/file1.lua:1", e.backtrace.first
|
28
|
+
assert_equal "/a/b/c/d/e/file1.lua:1", e.backtrace.first
|
29
|
+
assert_match /script.rb/, e.backtrace[1]
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
@@ -38,9 +39,10 @@ module Wolverine
|
|
38
39
|
script.instance_variable_set("@content", "return nil > 3")
|
39
40
|
script.instance_variable_set("@digest", "39437f5edda13f9c1669b978dd7a9066dd2059f1")
|
40
41
|
script.call(Redis.new)
|
41
|
-
rescue Wolverine::
|
42
|
+
rescue Wolverine::LuaError => e
|
42
43
|
assert_equal "attempt to compare number with nil", e.message
|
43
|
-
assert_equal "e/file1.lua:1", e.backtrace.first
|
44
|
+
assert_equal "/a/b/c/d/e/file1.lua:1", e.backtrace.first
|
45
|
+
assert_match /script.rb/, e.backtrace[1]
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wolverine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-03 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &70197029666560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70197029666560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mocha
|
27
|
-
requirement: &
|
27
|
+
requirement: &70197029690560 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70197029690560
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &70197029689640 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70197029689640
|
47
47
|
description: Wolverine provides a simple way to run server-side redis scripts from
|
48
48
|
a rails app
|
49
49
|
email:
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- examples/mhmsetnx.lua
|
65
65
|
- lib/wolverine.rb
|
66
66
|
- lib/wolverine/configuration.rb
|
67
|
+
- lib/wolverine/lua_error.rb
|
67
68
|
- lib/wolverine/path_component.rb
|
68
69
|
- lib/wolverine/script.rb
|
69
70
|
- lib/wolverine/version.rb
|