wolverine 0.2.3 → 0.2.5

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
@@ -7,7 +7,7 @@ require 'wolverine/script'
7
7
  require 'wolverine/path_component'
8
8
  require 'wolverine/lua_error'
9
9
 
10
- module Wolverine
10
+ class Wolverine
11
11
  # Returns the configuration object for reading and writing
12
12
  # configuration values.
13
13
  #
@@ -44,10 +44,36 @@ module Wolverine
44
44
  super
45
45
  end
46
46
 
47
+ def initialize(config = nil)
48
+ @config = config
49
+ end
50
+
51
+ def config
52
+ @config || self.class.config
53
+ end
54
+
55
+ def redis
56
+ config.redis
57
+ end
58
+
59
+ def reset!
60
+ @root_directory = nil
61
+ end
62
+
63
+ def method_missing sym, *args
64
+ root_directory.send(sym, *args)
65
+ rescue PathComponent::MissingTemplate
66
+ super
67
+ end
68
+
47
69
  private
48
70
 
49
71
  def self.root_directory
50
72
  @root_directory ||= PathComponent.new(config.script_path)
51
73
  end
52
74
 
75
+ def root_directory
76
+ @root_directory ||= PathComponent.new(config.script_path, {:config => config, :redis => redis})
77
+ end
78
+
53
79
  end
@@ -1,4 +1,4 @@
1
- module Wolverine
1
+ class Wolverine
2
2
  class Configuration < Struct.new(:redis, :script_path, :instrumentation)
3
3
 
4
4
  # @return [Redis] the redis connection actively in use by Wolverine
@@ -1,11 +1,11 @@
1
- module Wolverine
1
+ class Wolverine
2
2
  # Reformats errors raised by redis representing failures while executing
3
3
  # a lua script. The default errors have confusing messages and backtraces,
4
4
  # and a type of +RuntimeError+. This class improves the message and
5
5
  # modifies the backtrace to include the lua script itself in a reasonable
6
6
  # way.
7
7
  class LuaError < StandardError
8
- PATTERN = /ERR Error (compiling|running) script \(.*?\): \[.*?\]:(\d+): (.*)/
8
+ PATTERN = /ERR Error (compiling|running) script \(.*?\): .*?:(\d+): (.*)/
9
9
  WOLVERINE_LIB_PATH = File.expand_path('../../', __FILE__)
10
10
 
11
11
  # Is this error one that should be reformatted?
@@ -1,4 +1,4 @@
1
- module Wolverine
1
+ class Wolverine
2
2
  # A {PathComponent} represents either the +Wolverine.config.script_path+
3
3
  # directory, or a subdirectory of it. Calling (nearly) any method on it will
4
4
  # cause it to look in the filesystem at the location it refers to for a file
@@ -14,8 +14,12 @@ module Wolverine
14
14
  class MissingTemplate < StandardError ; end
15
15
 
16
16
  # @param path [Pathname] full path to the current file or directory
17
- def initialize path
17
+ # @param redis [Redis]
18
+ def initialize path, options = {}
18
19
  @path = path
20
+ @options = options
21
+ @redis = options[:redis] || Wolverine.redis
22
+ @config = options[:config] || Wolverine.config
19
23
  end
20
24
 
21
25
  # @param sym [Symbol] the file or directory to look up and execute
@@ -49,14 +53,14 @@ module Wolverine
49
53
  end
50
54
 
51
55
  def define_directory_method path, sym
52
- dir = PathComponent.new(path)
56
+ dir = PathComponent.new(path, @options)
53
57
  define_metaclass_method(sym) { dir }
54
58
  end
55
59
 
56
60
  def define_script_method path, sym, *args
57
- script = Wolverine::Script.new(path)
61
+ script = Wolverine::Script.new(path, @options)
58
62
  define_metaclass_method(sym) { |*args|
59
- script.call(Wolverine.redis, *args)
63
+ script.call(@redis, *args)
60
64
  }
61
65
  end
62
66
 
@@ -2,7 +2,7 @@ require 'pathname'
2
2
  require 'benchmark'
3
3
  require 'digest/sha1'
4
4
 
5
- module Wolverine
5
+ class Wolverine
6
6
  # {Script} represents a lua script in the filesystem. It loads the script
7
7
  # from disk and handles talking to redis to execute it. Error handling
8
8
  # is handled by {LuaError}.
@@ -11,10 +11,11 @@ module Wolverine
11
11
  # Loads the script file from disk and calculates its +SHA1+ sum.
12
12
  #
13
13
  # @param file [Pathname] the full path to the indicated file
14
- def initialize file
14
+ def initialize file, options = {}
15
15
  @file = Pathname.new(file)
16
16
  @content = load_lua file
17
17
  @digest = Digest::SHA1.hexdigest @content
18
+ @config = options[:config] || Wolverine.config
18
19
  end
19
20
 
20
21
  # Passes the script and supplied arguments to redis for evaulation.
@@ -59,12 +60,12 @@ module Wolverine
59
60
  def instrument eval_type
60
61
  ret = nil
61
62
  runtime = Benchmark.realtime { ret = yield }
62
- Wolverine.config.instrumentation.call relative_path.to_s, runtime, eval_type
63
+ @config.instrumentation.call relative_path.to_s, runtime, eval_type
63
64
  ret
64
65
  end
65
66
 
66
67
  def relative_path
67
- path = @file.relative_path_from(Wolverine.config.script_path)
68
+ @path ||= @file.relative_path_from(@config.script_path)
68
69
  end
69
70
 
70
71
  def load_lua file
@@ -1,3 +1,3 @@
1
- module Wolverine
2
- VERSION = "0.2.3"
1
+ class Wolverine
2
+ VERSION = "0.2.5"
3
3
  end
@@ -8,10 +8,10 @@ class WolverineIntegrationTest < MiniTest::Unit::TestCase
8
8
  stub.tap do |redis|
9
9
  redis.expects(:evalsha).
10
10
  with('fe24f4dd4ba7881608cca4b846f009195e06d79a', 2, :a, :b).
11
- raises("NOSCRIPT")
11
+ raises("NOSCRIPT").once
12
12
  redis.expects(:eval).
13
13
  with(CONTENT, 2, :a, :b).
14
- returns([1, 0])
14
+ returns([1, 0]).once
15
15
  end
16
16
  end
17
17
 
@@ -22,4 +22,12 @@ class WolverineIntegrationTest < MiniTest::Unit::TestCase
22
22
  assert_equal [1, 0], Wolverine.util.mexists(:a, :b)
23
23
  end
24
24
 
25
+ def test_everything_instantiated
26
+ script_path = Pathname.new(File.expand_path('../lua', __FILE__))
27
+ config = Wolverine::Configuration.new(mock_redis, script_path)
28
+
29
+ wolverine = Wolverine.new(config)
30
+ assert_equal [1, 0], wolverine.util.mexists(:a, :b)
31
+ end
32
+
25
33
  end
@@ -7,7 +7,7 @@ module Rails
7
7
  end
8
8
  end
9
9
 
10
- module Wolverine
10
+ class Wolverine
11
11
  class ConfigurationTest < MiniTest::Unit::TestCase
12
12
 
13
13
  def test_default_redis
@@ -1,6 +1,6 @@
1
1
  require File.join(File.expand_path('../../test_helper', __FILE__))
2
2
 
3
- module Wolverine
3
+ class Wolverine
4
4
  class PathComponentTest < MiniTest::Unit::TestCase
5
5
 
6
6
  def root
@@ -1,7 +1,7 @@
1
1
  require File.join(File.expand_path('../../test_helper', __FILE__))
2
2
  require 'digest/sha1'
3
3
 
4
- module Wolverine
4
+ class Wolverine
5
5
  class ScriptTest < MiniTest::Unit::TestCase
6
6
  CONTENT = "return 1"
7
7
  DIGEST = Digest::SHA1.hexdigest(CONTENT)
@@ -14,4 +14,14 @@ class WolverineTest < MiniTest::Unit::TestCase
14
14
  refute_equal Wolverine.root_directory, dir
15
15
  end
16
16
 
17
+ def test_instantiate_wolverine_with_config
18
+ r = Struct.new(:Redis)
19
+ config = Wolverine::Configuration.new(r, 'path')
20
+ wolverine = Wolverine.new(config)
21
+
22
+ assert_equal r, wolverine.config.redis
23
+ assert_equal r, wolverine.redis
24
+ assert_equal 'path', wolverine.config.script_path
25
+ end
26
+
17
27
  end
data/wolverine.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency 'redis', '~> 2.2.2'
21
+ s.add_runtime_dependency 'redis', '>= 2.2.2'
22
22
  s.add_development_dependency 'mocha', '~> 0.10.5'
23
23
  s.add_development_dependency 'minitest', '~> 2.11.3'
24
24
  s.add_development_dependency 'rake'
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.3
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-05 00:00:00.000000000 Z
12
+ date: 2012-12-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &70155163744540 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 2.2.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70155163744540
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.2.2
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: mocha
27
- requirement: &70155163743720 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.10.5
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70155163743720
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.10.5
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: minitest
38
- requirement: &70155163743080 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 2.11.3
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70155163743080
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.11.3
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rake
49
- requirement: &70155163742680 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70155163742680
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: yard
60
- requirement: &70155163742180 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,7 +85,12 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70155163742180
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  description: Wolverine provides a simple way to run server-side redis scripts from
70
95
  a rails app
71
96
  email:
@@ -119,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
144
  version: '0'
120
145
  requirements: []
121
146
  rubyforge_project: wolverine
122
- rubygems_version: 1.8.11
147
+ rubygems_version: 1.8.23
123
148
  signing_key:
124
149
  specification_version: 3
125
150
  summary: Wolverine provides a simple way to run server-side redis scripts from a rails
@@ -132,4 +157,3 @@ test_files:
132
157
  - test/wolverine/path_component_test.rb
133
158
  - test/wolverine/script_test.rb
134
159
  - test/wolverine_test.rb
135
- has_rdoc: