wolverine 0.1.2 → 0.1.3
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/script.rb +17 -4
- data/lib/wolverine/version.rb +1 -1
- data/test/wolverine/script_test.rb +23 -3
- metadata +8 -8
data/lib/wolverine/script.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
require 'digest/sha1'
|
2
2
|
|
3
3
|
module Wolverine
|
4
|
-
class
|
4
|
+
class LuaError < StandardError ; end
|
5
|
+
class LuaCompilationError < LuaError ; end
|
6
|
+
class LuaRuntimeError < LuaError ; end
|
7
|
+
|
5
8
|
class Script
|
6
|
-
attr_reader :content, :digest
|
9
|
+
attr_reader :content, :digest, :file
|
7
10
|
def initialize file
|
8
11
|
@file = file
|
9
12
|
@content = load_lua file
|
10
13
|
@digest = Digest::SHA1.hexdigest @content
|
11
14
|
end
|
12
15
|
|
16
|
+
# Wolverine::InvalidScriptError: ERR Error running script (call to f_f5fbb1da9ad036109842747becb4e2abb5e95966): [string "func definition"]:27: attempt to compare nil with number (in #<Pathname:/Users/burke/src/s/shopify/app/wolverine/reservations/reserve.lua>)
|
13
17
|
def call redis, *args
|
14
18
|
begin
|
15
19
|
run_evalsha redis, *args
|
@@ -17,8 +21,10 @@ module Wolverine
|
|
17
21
|
e.message =~ /NOSCRIPT/ ? run_eval(redis, *args) : raise
|
18
22
|
end
|
19
23
|
rescue => e
|
20
|
-
if e.message =~ /ERR Error (compiling|running) script/
|
21
|
-
|
24
|
+
if e.message =~ /ERR Error (compiling|running) script \(.*?\): \[.*?\]:(\d+): (.*)/
|
25
|
+
stage, line_number, message = $1, $2, $3
|
26
|
+
klass = (stage == "compiling") ? LuaCompilationError : LuaRuntimeError
|
27
|
+
raise klass, "[#{relative_path}:#{line_number}] #{message}"
|
22
28
|
else
|
23
29
|
raise
|
24
30
|
end
|
@@ -26,6 +32,13 @@ module Wolverine
|
|
26
32
|
|
27
33
|
private
|
28
34
|
|
35
|
+
def relative_path
|
36
|
+
file.relative_path_from(Wolverine.config.script_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
def format_error_message(error)
|
40
|
+
end
|
41
|
+
|
29
42
|
def run_evalsha redis, *args
|
30
43
|
redis.evalsha digest, args.size, *args
|
31
44
|
end
|
data/lib/wolverine/version.rb
CHANGED
@@ -14,15 +14,35 @@ module Wolverine
|
|
14
14
|
@script ||= Wolverine::Script.new('file1')
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
17
|
+
def test_compilation_error
|
18
|
+
base = Pathname.new('/a/b/c/d')
|
19
|
+
file = Pathname.new('/a/b/c/d/e/file1.lua')
|
20
|
+
Wolverine.config.script_path = base
|
21
|
+
begin
|
22
|
+
script = Wolverine::Script.new(file)
|
20
23
|
script.instance_variable_set("@content", "asdfasdfasdf+31f")
|
21
24
|
script.instance_variable_set("@digest", "79437f5edda13f9c1669b978dd7a9066dd2059f1")
|
22
25
|
script.call(Redis.new)
|
26
|
+
rescue Wolverine::LuaCompilationError => e
|
27
|
+
assert_equal "[e/file1.lua:1] '=' expected near '+'", e.message
|
23
28
|
end
|
24
29
|
end
|
25
30
|
|
31
|
+
def test_runtime_error
|
32
|
+
base = Pathname.new('/a/b/c/d')
|
33
|
+
file = Pathname.new('/a/b/c/d/e/file1.lua')
|
34
|
+
Wolverine.config.script_path = base
|
35
|
+
begin
|
36
|
+
script = Wolverine::Script.new(file)
|
37
|
+
script.instance_variable_set("@content", "return nil > 3")
|
38
|
+
script.instance_variable_set("@digest", "39437f5edda13f9c1669b978dd7a9066dd2059f1")
|
39
|
+
script.call(Redis.new)
|
40
|
+
rescue Wolverine::LuaRuntimeError => e
|
41
|
+
assert_equal "[e/file1.lua:1] attempt to compare number with nil", e.message
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
26
46
|
def test_digest_and_content
|
27
47
|
content = "return 1"
|
28
48
|
assert_equal CONTENT, script.content
|
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.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
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: &70177107053640 !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: *70177107053640
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mocha
|
27
|
-
requirement: &
|
27
|
+
requirement: &70177107053140 !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: *70177107053140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &70177107051360 !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: *70177107051360
|
47
47
|
description: Wolverine provides a simple way to run server-side redis scripts from
|
48
48
|
a rails app
|
49
49
|
email:
|