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 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