wresque_wrapper 0.1.0 → 0.1.1
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/README.rdoc +13 -1
- data/Rakefile +1 -7
- data/VERSION +1 -1
- data/init.rb +0 -2
- data/lib/wrapper/wrapper.rb +66 -0
- data/lib/wresque_wrapper.rb +2 -65
- data/spec/wresque_wrapper_spec.rb +1 -1
- data/wresque_wrapper.gemspec +3 -8
- metadata +4 -25
data/README.rdoc
CHANGED
@@ -2,10 +2,22 @@
|
|
2
2
|
|
3
3
|
A simple wrapper to allow inline queueing of arbitrary methods to Resque, e.g.:
|
4
4
|
|
5
|
-
MyClass.delay(:queue => :
|
5
|
+
MyClass.delay(:queue => :big_jobs).some_class_method
|
6
6
|
|
7
7
|
my_instance.delay(:queue => :jobsworth).some_instance_method
|
8
8
|
|
9
|
+
It shares the limitations of Resque with respect to queueable tasks; only methods whose arguments can be serialized as JSON objects can be queued.
|
10
|
+
|
11
|
+
== Usage
|
12
|
+
|
13
|
+
Any class derived from ActiveRecord::Base can use the delay method, optionally specifying a queue. Models can also specify a default queue using the #default_worker_queue class method:
|
14
|
+
|
15
|
+
class MyModel < ActiveRecord::Base
|
16
|
+
default_worker_queue :big_jobs
|
17
|
+
end
|
18
|
+
|
19
|
+
If a default queue is not specified for a class, then the queue must be given in any delay call made with that class or instances thereof.
|
20
|
+
|
9
21
|
== Contributing to wresque_wrapper
|
10
22
|
|
11
23
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/Rakefile
CHANGED
@@ -16,15 +16,9 @@ Jeweler::Tasks.new do |gem|
|
|
16
16
|
gem.homepage = "http://github.com/simon@urbanautomaton.com/wresque_wrapper"
|
17
17
|
gem.license = "MIT"
|
18
18
|
gem.summary = %Q{Async-style queueing of class methods using Resque}
|
19
|
-
gem.description = %Q{Allows queueing of model methods, e.g. MyModel.delay.some_method}
|
19
|
+
gem.description = %Q{Allows inline queueing of model methods to Resque, e.g. MyModel.delay.some_method, or some_instance.delay(:queue => :bigjobs).another_method}
|
20
20
|
gem.email = "simon@tribesports.com"
|
21
21
|
gem.authors = ["Simon Coffey"]
|
22
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
|
-
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
25
|
-
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
26
|
-
gem.add_runtime_dependency 'resque', '~> 1.10.0'
|
27
|
-
gem.add_runtime_dependency 'rails', '>= 2.1.0'
|
28
22
|
end
|
29
23
|
Jeweler::RubygemsDotOrgTasks.new
|
30
24
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/init.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
module WresqueWrapper
|
2
|
+
def self.extended(base)
|
3
|
+
base.extend(ClassMethods)
|
4
|
+
base.send(:include, InstanceMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def queue; @queue; end
|
9
|
+
def queue=(queue); @queue = queue; end
|
10
|
+
|
11
|
+
def default_queue; @default_queue; end
|
12
|
+
def default_queue=(queue); @default_queue = queue; end
|
13
|
+
|
14
|
+
def default_worker_queue(queue)
|
15
|
+
@default_queue = queue
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform(id, method, *args)
|
19
|
+
ActiveRecord::Base.verify_active_connections!
|
20
|
+
if id
|
21
|
+
self.find(id).send(method, *args)
|
22
|
+
else
|
23
|
+
self.send(method, *args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def delay(opts={})
|
28
|
+
WresqueWrapper::WrapperProxies::Proxy.new(self,self,nil,opts[:queue])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module InstanceMethods
|
33
|
+
def delay(opts={})
|
34
|
+
WresqueWrapper::WrapperProxies::Proxy.new(self,self.class,self.id,opts[:queue])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module WrapperProxies
|
39
|
+
class Proxy
|
40
|
+
attr_reader :target
|
41
|
+
|
42
|
+
def initialize(target,klass,target_id,queue)
|
43
|
+
queue ||= klass.default_queue
|
44
|
+
unless queue
|
45
|
+
raise RuntimeError, "No queue specified, and target class has no default queue", caller
|
46
|
+
end
|
47
|
+
@target = target
|
48
|
+
@klass = klass
|
49
|
+
@target_id = target_id
|
50
|
+
@klass.queue = queue
|
51
|
+
end
|
52
|
+
|
53
|
+
def method_missing(method,*args)
|
54
|
+
if @target.respond_to?(method)
|
55
|
+
Resque.enqueue(@target,@target_id,method,*args)
|
56
|
+
else
|
57
|
+
@target.send(method,*args)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def respond_to?(method)
|
62
|
+
super || @target.respond_to?(method)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/wresque_wrapper.rb
CHANGED
@@ -1,66 +1,3 @@
|
|
1
|
-
|
2
|
-
def self.extended(base)
|
3
|
-
base.extend(ClassMethods)
|
4
|
-
base.send(:include, InstanceMethods)
|
5
|
-
end
|
1
|
+
require File.dirname(__FILE__) + '/wrapper/wrapper'
|
6
2
|
|
7
|
-
|
8
|
-
def queue; @queue; end
|
9
|
-
def queue=(queue); @queue = queue; end
|
10
|
-
|
11
|
-
def default_queue; @default_queue; end
|
12
|
-
def default_queue=(queue); @default_queue = queue; end
|
13
|
-
|
14
|
-
def default_worker_queue(queue)
|
15
|
-
@default_queue = queue
|
16
|
-
end
|
17
|
-
|
18
|
-
def perform(id, method, *args)
|
19
|
-
ActiveRecord::Base.verify_active_connections!
|
20
|
-
if id
|
21
|
-
self.find(id).send(method, *args)
|
22
|
-
else
|
23
|
-
self.send(method, *args)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def delay(opts={})
|
28
|
-
WresqueWrapper::WrapperProxies::Proxy.new(self,self,nil,opts[:queue])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
module InstanceMethods
|
33
|
-
def delay(opts={})
|
34
|
-
WresqueWrapper::WrapperProxies::Proxy.new(self,self.class,self.id,opts[:queue])
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
module WrapperProxies
|
39
|
-
class Proxy
|
40
|
-
attr_reader :target
|
41
|
-
|
42
|
-
def initialize(target,klass,target_id,queue)
|
43
|
-
queue ||= klass.default_queue
|
44
|
-
unless queue
|
45
|
-
raise RuntimeError, "No queue specified, and target class has no default queue", caller
|
46
|
-
end
|
47
|
-
@target = target
|
48
|
-
@klass = klass
|
49
|
-
@target_id = target_id
|
50
|
-
@klass.queue = queue
|
51
|
-
end
|
52
|
-
|
53
|
-
def method_missing(method,*args)
|
54
|
-
if @target.respond_to?(method)
|
55
|
-
Resque.enqueue(@target,@target_id,method,*args)
|
56
|
-
else
|
57
|
-
@target.send(method,*args)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def respond_to?(method)
|
62
|
-
super || @target.respond_to?(method)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
3
|
+
ActiveRecord::Base.extend(WresqueWrapper)
|
data/wresque_wrapper.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{wresque_wrapper}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Simon Coffey"]
|
12
12
|
s.date = %q{2011-02-02}
|
13
|
-
s.description = %q{Allows queueing of model methods, e.g. MyModel.delay.some_method}
|
13
|
+
s.description = %q{Allows inline queueing of model methods to Resque, e.g. MyModel.delay.some_method, or some_instance.delay(:queue => :bigjobs).another_method}
|
14
14
|
s.email = %q{simon@tribesports.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"init.rb",
|
28
|
+
"lib/wrapper/wrapper.rb",
|
28
29
|
"lib/wresque_wrapper.rb",
|
29
30
|
"spec/spec_helper.rb",
|
30
31
|
"spec/wresque_wrapper_spec.rb",
|
@@ -51,8 +52,6 @@ Gem::Specification.new do |s|
|
|
51
52
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
52
53
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
53
54
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
54
|
-
s.add_runtime_dependency(%q<resque>, ["~> 1.10.0"])
|
55
|
-
s.add_runtime_dependency(%q<rails>, [">= 2.1.0"])
|
56
55
|
else
|
57
56
|
s.add_dependency(%q<resque>, ["~> 1.10.0"])
|
58
57
|
s.add_dependency(%q<rails>, [">= 2.1.0"])
|
@@ -61,8 +60,6 @@ Gem::Specification.new do |s|
|
|
61
60
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
62
61
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
63
62
|
s.add_dependency(%q<rcov>, [">= 0"])
|
64
|
-
s.add_dependency(%q<resque>, ["~> 1.10.0"])
|
65
|
-
s.add_dependency(%q<rails>, [">= 2.1.0"])
|
66
63
|
end
|
67
64
|
else
|
68
65
|
s.add_dependency(%q<resque>, ["~> 1.10.0"])
|
@@ -72,8 +69,6 @@ Gem::Specification.new do |s|
|
|
72
69
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
73
70
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
74
71
|
s.add_dependency(%q<rcov>, [">= 0"])
|
75
|
-
s.add_dependency(%q<resque>, ["~> 1.10.0"])
|
76
|
-
s.add_dependency(%q<rails>, [">= 2.1.0"])
|
77
72
|
end
|
78
73
|
end
|
79
74
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: wresque_wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Simon Coffey
|
@@ -90,29 +90,7 @@ dependencies:
|
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: *id007
|
93
|
-
|
94
|
-
name: resque
|
95
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
|
-
requirements:
|
98
|
-
- - ~>
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: 1.10.0
|
101
|
-
type: :runtime
|
102
|
-
prerelease: false
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: rails
|
106
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 2.1.0
|
112
|
-
type: :runtime
|
113
|
-
prerelease: false
|
114
|
-
version_requirements: *id009
|
115
|
-
description: Allows queueing of model methods, e.g. MyModel.delay.some_method
|
93
|
+
description: Allows inline queueing of model methods to Resque, e.g. MyModel.delay.some_method, or some_instance.delay(:queue => :bigjobs).another_method
|
116
94
|
email: simon@tribesports.com
|
117
95
|
executables: []
|
118
96
|
|
@@ -130,6 +108,7 @@ files:
|
|
130
108
|
- Rakefile
|
131
109
|
- VERSION
|
132
110
|
- init.rb
|
111
|
+
- lib/wrapper/wrapper.rb
|
133
112
|
- lib/wresque_wrapper.rb
|
134
113
|
- spec/spec_helper.rb
|
135
114
|
- spec/wresque_wrapper_spec.rb
|
@@ -148,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
127
|
requirements:
|
149
128
|
- - ">="
|
150
129
|
- !ruby/object:Gem::Version
|
151
|
-
hash:
|
130
|
+
hash: 2893642383965527989
|
152
131
|
segments:
|
153
132
|
- 0
|
154
133
|
version: "0"
|