wolverine 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,19 @@
1
1
  require 'digest/sha1'
2
2
 
3
3
  module Wolverine
4
- class InvalidScriptError < StandardError ; end
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
- raise InvalidScriptError, "#{e.message} (in #{@file.inspect})"
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
@@ -1,3 +1,3 @@
1
1
  module Wolverine
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -14,15 +14,35 @@ module Wolverine
14
14
  @script ||= Wolverine::Script.new('file1')
15
15
  end
16
16
 
17
- def test_errors_are_better
18
- assert_raises Wolverine::InvalidScriptError do
19
- script = Wolverine::Script.new('file1')
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.2
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-02 00:00:00.000000000 Z
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: &70212795870940 !ruby/object:Gem::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: *70212795870940
24
+ version_requirements: *70177107053640
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &70212795869140 !ruby/object:Gem::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: *70212795869140
35
+ version_requirements: *70177107053140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &70212795890120 !ruby/object:Gem::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: *70212795890120
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: