wolverine 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/wolverine.rb CHANGED
@@ -5,6 +5,7 @@ require 'wolverine/version'
5
5
  require 'wolverine/configuration'
6
6
  require 'wolverine/script'
7
7
  require 'wolverine/path_component'
8
+ require 'wolverine/lua_error'
8
9
 
9
10
  module Wolverine
10
11
  def self.config
@@ -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
@@ -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 e.message =~ /ERR Error (compiling|running) script \(.*?\): \[.*?\]:(\d+): (.*)/
24
- stage, line_number, message = $1, $2, $3
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
@@ -1,3 +1,3 @@
1
1
  module Wolverine
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -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::LuaCompilationError => e
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::LuaRuntimeError => e
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.1
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: &70117913236100 !ruby/object:Gem::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: *70117913236100
24
+ version_requirements: *70197029666560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &70117913249000 !ruby/object:Gem::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: *70117913249000
35
+ version_requirements: *70197029690560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &70117913244780 !ruby/object:Gem::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: *70117913244780
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