backgrounded 0.7.3 → 0.7.4
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/.rvmrc +5 -0
- data/backgrounded.gemspec +1 -1
- data/lib/backgrounded.rb +4 -0
- data/lib/backgrounded/class_methods.rb +1 -2
- data/lib/backgrounded/handler/resque_handler.rb +4 -3
- data/lib/backgrounded/handler/workling_handler.rb +3 -2
- data/lib/backgrounded/version.rb +1 -1
- data/test/backgrounded/handler/resque_handler_test.rb +25 -0
- metadata +100 -35
data/.rvmrc
ADDED
data/backgrounded.gemspec
CHANGED
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
|
22
22
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
|
23
23
|
s.add_development_dependency(%q<sqlite3-ruby>, [">= 1.3.2"])
|
|
24
24
|
s.add_development_dependency(%q<delayed_job>, [">= 2.1.4"])
|
|
25
|
-
|
|
25
|
+
s.add_development_dependency(%q<rake>, [">= 0.9.2.2"])
|
|
26
26
|
|
|
27
27
|
s.files = `git ls-files`.split("\n")
|
|
28
28
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/backgrounded.rb
CHANGED
|
@@ -8,6 +8,10 @@ Object.send(:include, Backgrounded::ClassMethods)
|
|
|
8
8
|
module Backgrounded
|
|
9
9
|
class << self
|
|
10
10
|
attr_accessor :logger, :handler
|
|
11
|
+
def method_name_for_backgrounded_options(method_name)
|
|
12
|
+
method_basename, punctuation = method_name.to_s.sub(/([?!=])$/, ''), $1
|
|
13
|
+
"#{method_basename}_backgrounded_options"
|
|
14
|
+
end
|
|
11
15
|
end
|
|
12
16
|
end
|
|
13
17
|
|
|
@@ -7,14 +7,13 @@ module Backgrounded
|
|
|
7
7
|
methods_with_options.each_pair do |method, options|
|
|
8
8
|
method_basename, punctuation = method.to_s.sub(/([?!=])$/, ''), $1
|
|
9
9
|
backgrounded_method = "#{method_basename}_backgrounded#{punctuation}"
|
|
10
|
-
backgrounded_options_method = "#{method_basename}_backgrounded_options"
|
|
11
10
|
class_eval do
|
|
12
11
|
define_method backgrounded_method do |*args|
|
|
13
12
|
Backgrounded.logger.debug("Requesting #{Backgrounded.handler} backgrounded method: #{method} for instance #{self}")
|
|
14
13
|
Backgrounded.handler.request(self, method, *args)
|
|
15
14
|
nil
|
|
16
15
|
end
|
|
17
|
-
define_method
|
|
16
|
+
define_method Backgrounded.method_name_for_backgrounded_options(method) do
|
|
18
17
|
options
|
|
19
18
|
end
|
|
20
19
|
end
|
|
@@ -5,10 +5,11 @@ module Backgrounded
|
|
|
5
5
|
#enque requests in resque
|
|
6
6
|
class ResqueHandler
|
|
7
7
|
DEFAULT_QUEUE = 'backgrounded'
|
|
8
|
+
INVALID_ID = -1
|
|
8
9
|
@@queue = DEFAULT_QUEUE
|
|
9
10
|
|
|
10
11
|
def request(object, method, *args)
|
|
11
|
-
options = object.send(
|
|
12
|
+
options = object.send Backgrounded.method_name_for_backgrounded_options(method)
|
|
12
13
|
@@queue = options[:queue] || DEFAULT_QUEUE
|
|
13
14
|
instance, id = instance_identifiers(object)
|
|
14
15
|
Resque.enqueue(ResqueHandler, instance, id, method, *args)
|
|
@@ -23,11 +24,11 @@ module Backgrounded
|
|
|
23
24
|
private
|
|
24
25
|
def self.find_instance(clazz, id, method)
|
|
25
26
|
clazz = clazz.constantize
|
|
26
|
-
|
|
27
|
+
id.to_i == INVALID_ID ? clazz : clazz.find(id)
|
|
27
28
|
end
|
|
28
29
|
def instance_identifiers(object)
|
|
29
30
|
instance, id = if object.is_a?(Class)
|
|
30
|
-
[object.name,
|
|
31
|
+
[object.name, INVALID_ID]
|
|
31
32
|
else
|
|
32
33
|
[object.class.name, object.id]
|
|
33
34
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
class Backgrounded::Handler::WorklingHandler
|
|
2
2
|
class BackgroundedWorker < Workling::Base
|
|
3
|
+
INVALID_ID = -1
|
|
3
4
|
def perform(options = {})
|
|
4
5
|
find_instance(options[:class], options[:id], options[:method]).send(options[:method], *options[:params])
|
|
5
6
|
end
|
|
@@ -7,7 +8,7 @@ class Backgrounded::Handler::WorklingHandler
|
|
|
7
8
|
private
|
|
8
9
|
def find_instance(clazz, id, method)
|
|
9
10
|
clazz = clazz.constantize
|
|
10
|
-
|
|
11
|
+
id.to_i == INVALID_ID ? clazz : clazz.find(id)
|
|
11
12
|
end
|
|
12
13
|
end
|
|
13
14
|
|
|
@@ -25,7 +26,7 @@ class Backgrounded::Handler::WorklingHandler
|
|
|
25
26
|
private
|
|
26
27
|
def instance_identifiers(object)
|
|
27
28
|
instance, id = if object.is_a?(Class)
|
|
28
|
-
[object.name,
|
|
29
|
+
[object.name, INVALID_ID]
|
|
29
30
|
else
|
|
30
31
|
[object.class.name, object.id]
|
|
31
32
|
end
|
data/lib/backgrounded/version.rb
CHANGED
|
@@ -3,6 +3,10 @@ require 'backgrounded/handler/resque_handler'
|
|
|
3
3
|
require 'resque_unit'
|
|
4
4
|
|
|
5
5
|
ActiveRecord::Schema.define(:version => 1) do
|
|
6
|
+
create_table :blogs, :force => true do |t|
|
|
7
|
+
t.column :name, :string
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
create_table :users, :force => true do |t|
|
|
7
11
|
t.column :name, :string
|
|
8
12
|
end
|
|
@@ -34,6 +38,9 @@ class ResqueHandlerTest < Test::Unit::TestCase
|
|
|
34
38
|
def do_stuff
|
|
35
39
|
end
|
|
36
40
|
end
|
|
41
|
+
backgrounded :do_stuff
|
|
42
|
+
def do_stuff
|
|
43
|
+
end
|
|
37
44
|
end
|
|
38
45
|
|
|
39
46
|
context 'when backgrounded is configured with resque' do
|
|
@@ -60,6 +67,24 @@ class ResqueHandlerTest < Test::Unit::TestCase
|
|
|
60
67
|
should "invoke method on class" do end #see expectations
|
|
61
68
|
end
|
|
62
69
|
end
|
|
70
|
+
context 'with an instance level backgrounded method of the same name' do
|
|
71
|
+
setup do
|
|
72
|
+
@blog = Blog.create
|
|
73
|
+
@blog.do_stuff_backgrounded
|
|
74
|
+
end
|
|
75
|
+
should "enqueue instance method job to resque" do
|
|
76
|
+
assert_queued Backgrounded::Handler::ResqueHandler, [Blog.to_s, @blog.id, 'do_stuff']
|
|
77
|
+
assert_equal Backgrounded::Handler::ResqueHandler::DEFAULT_QUEUE, Resque.queue_from_class(Backgrounded::Handler::ResqueHandler)
|
|
78
|
+
end
|
|
79
|
+
context "running background job" do
|
|
80
|
+
setup do
|
|
81
|
+
Blog.expects(:do_stuff).never
|
|
82
|
+
Blog.any_instance.expects(:do_stuff)
|
|
83
|
+
Resque.run!
|
|
84
|
+
end
|
|
85
|
+
should "invoke method on instance" do end #see expectations
|
|
86
|
+
end
|
|
87
|
+
end
|
|
63
88
|
end
|
|
64
89
|
|
|
65
90
|
context 'a persisted object with a single backgrounded method' do
|
metadata
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: backgrounded
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 11
|
|
4
5
|
prerelease:
|
|
5
|
-
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 7
|
|
9
|
+
- 4
|
|
10
|
+
version: 0.7.4
|
|
6
11
|
platform: ruby
|
|
7
12
|
authors:
|
|
8
13
|
- Ryan Sonnek
|
|
@@ -10,96 +15,149 @@ autorequire:
|
|
|
10
15
|
bindir: bin
|
|
11
16
|
cert_chain: []
|
|
12
17
|
|
|
13
|
-
date:
|
|
18
|
+
date: 2012-01-18 00:00:00 Z
|
|
14
19
|
dependencies:
|
|
15
20
|
- !ruby/object:Gem::Dependency
|
|
16
|
-
|
|
17
|
-
prerelease: false
|
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
19
22
|
none: false
|
|
20
23
|
requirements:
|
|
21
24
|
- - ">="
|
|
22
25
|
- !ruby/object:Gem::Version
|
|
26
|
+
hash: 23
|
|
27
|
+
segments:
|
|
28
|
+
- 2
|
|
29
|
+
- 3
|
|
30
|
+
- 10
|
|
23
31
|
version: 2.3.10
|
|
32
|
+
requirement: *id001
|
|
33
|
+
prerelease: false
|
|
34
|
+
name: activerecord
|
|
24
35
|
type: :runtime
|
|
25
|
-
version_requirements: *id001
|
|
26
36
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
|
|
28
|
-
prerelease: false
|
|
29
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
30
38
|
none: false
|
|
31
39
|
requirements:
|
|
32
40
|
- - ">="
|
|
33
41
|
- !ruby/object:Gem::Version
|
|
42
|
+
hash: 23
|
|
43
|
+
segments:
|
|
44
|
+
- 2
|
|
45
|
+
- 3
|
|
46
|
+
- 10
|
|
34
47
|
version: 2.3.10
|
|
48
|
+
requirement: *id002
|
|
49
|
+
prerelease: false
|
|
50
|
+
name: activesupport
|
|
35
51
|
type: :runtime
|
|
36
|
-
version_requirements: *id002
|
|
37
52
|
- !ruby/object:Gem::Dependency
|
|
38
|
-
|
|
39
|
-
prerelease: false
|
|
40
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
41
54
|
none: false
|
|
42
55
|
requirements:
|
|
43
56
|
- - ">="
|
|
44
57
|
- !ruby/object:Gem::Version
|
|
58
|
+
hash: 3
|
|
59
|
+
segments:
|
|
60
|
+
- 0
|
|
45
61
|
version: "0"
|
|
62
|
+
requirement: *id003
|
|
63
|
+
prerelease: false
|
|
64
|
+
name: shoulda
|
|
46
65
|
type: :development
|
|
47
|
-
version_requirements: *id003
|
|
48
66
|
- !ruby/object:Gem::Dependency
|
|
49
|
-
|
|
50
|
-
prerelease: false
|
|
51
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
52
68
|
none: false
|
|
53
69
|
requirements:
|
|
54
70
|
- - ">="
|
|
55
71
|
- !ruby/object:Gem::Version
|
|
72
|
+
hash: 89
|
|
73
|
+
segments:
|
|
74
|
+
- 0
|
|
75
|
+
- 17
|
|
76
|
+
- 1
|
|
56
77
|
version: 0.17.1
|
|
78
|
+
requirement: *id004
|
|
79
|
+
prerelease: false
|
|
80
|
+
name: resque
|
|
57
81
|
type: :development
|
|
58
|
-
version_requirements: *id004
|
|
59
82
|
- !ruby/object:Gem::Dependency
|
|
60
|
-
|
|
61
|
-
prerelease: false
|
|
62
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
|
83
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
63
84
|
none: false
|
|
64
85
|
requirements:
|
|
65
86
|
- - ">="
|
|
66
87
|
- !ruby/object:Gem::Version
|
|
88
|
+
hash: 29
|
|
89
|
+
segments:
|
|
90
|
+
- 0
|
|
91
|
+
- 3
|
|
92
|
+
- 7
|
|
67
93
|
version: 0.3.7
|
|
94
|
+
requirement: *id005
|
|
95
|
+
prerelease: false
|
|
96
|
+
name: resque_unit
|
|
68
97
|
type: :development
|
|
69
|
-
version_requirements: *id005
|
|
70
98
|
- !ruby/object:Gem::Dependency
|
|
71
|
-
|
|
72
|
-
prerelease: false
|
|
73
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
|
99
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
74
100
|
none: false
|
|
75
101
|
requirements:
|
|
76
102
|
- - ">="
|
|
77
103
|
- !ruby/object:Gem::Version
|
|
104
|
+
hash: 3
|
|
105
|
+
segments:
|
|
106
|
+
- 0
|
|
78
107
|
version: "0"
|
|
108
|
+
requirement: *id006
|
|
109
|
+
prerelease: false
|
|
110
|
+
name: mocha
|
|
79
111
|
type: :development
|
|
80
|
-
version_requirements: *id006
|
|
81
112
|
- !ruby/object:Gem::Dependency
|
|
82
|
-
|
|
83
|
-
prerelease: false
|
|
84
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
|
113
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
85
114
|
none: false
|
|
86
115
|
requirements:
|
|
87
116
|
- - ">="
|
|
88
117
|
- !ruby/object:Gem::Version
|
|
118
|
+
hash: 31
|
|
119
|
+
segments:
|
|
120
|
+
- 1
|
|
121
|
+
- 3
|
|
122
|
+
- 2
|
|
89
123
|
version: 1.3.2
|
|
124
|
+
requirement: *id007
|
|
125
|
+
prerelease: false
|
|
126
|
+
name: sqlite3-ruby
|
|
90
127
|
type: :development
|
|
91
|
-
version_requirements: *id007
|
|
92
128
|
- !ruby/object:Gem::Dependency
|
|
93
|
-
|
|
94
|
-
prerelease: false
|
|
95
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
|
129
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
|
96
130
|
none: false
|
|
97
131
|
requirements:
|
|
98
132
|
- - ">="
|
|
99
133
|
- !ruby/object:Gem::Version
|
|
134
|
+
hash: 3
|
|
135
|
+
segments:
|
|
136
|
+
- 2
|
|
137
|
+
- 1
|
|
138
|
+
- 4
|
|
100
139
|
version: 2.1.4
|
|
140
|
+
requirement: *id008
|
|
141
|
+
prerelease: false
|
|
142
|
+
name: delayed_job
|
|
143
|
+
type: :development
|
|
144
|
+
- !ruby/object:Gem::Dependency
|
|
145
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
|
146
|
+
none: false
|
|
147
|
+
requirements:
|
|
148
|
+
- - ">="
|
|
149
|
+
- !ruby/object:Gem::Version
|
|
150
|
+
hash: 11
|
|
151
|
+
segments:
|
|
152
|
+
- 0
|
|
153
|
+
- 9
|
|
154
|
+
- 2
|
|
155
|
+
- 2
|
|
156
|
+
version: 0.9.2.2
|
|
157
|
+
requirement: *id009
|
|
158
|
+
prerelease: false
|
|
159
|
+
name: rake
|
|
101
160
|
type: :development
|
|
102
|
-
version_requirements: *id008
|
|
103
161
|
description: Execute any ActiveRecord Model method in the background
|
|
104
162
|
email:
|
|
105
163
|
- ryan@codecrate.com
|
|
@@ -111,6 +169,7 @@ extra_rdoc_files: []
|
|
|
111
169
|
|
|
112
170
|
files:
|
|
113
171
|
- .gitignore
|
|
172
|
+
- .rvmrc
|
|
114
173
|
- Gemfile
|
|
115
174
|
- LICENSE
|
|
116
175
|
- README.rdoc
|
|
@@ -144,17 +203,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
144
203
|
requirements:
|
|
145
204
|
- - ">="
|
|
146
205
|
- !ruby/object:Gem::Version
|
|
206
|
+
hash: 3
|
|
207
|
+
segments:
|
|
208
|
+
- 0
|
|
147
209
|
version: "0"
|
|
148
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
211
|
none: false
|
|
150
212
|
requirements:
|
|
151
213
|
- - ">="
|
|
152
214
|
- !ruby/object:Gem::Version
|
|
215
|
+
hash: 3
|
|
216
|
+
segments:
|
|
217
|
+
- 0
|
|
153
218
|
version: "0"
|
|
154
219
|
requirements: []
|
|
155
220
|
|
|
156
221
|
rubyforge_project: backgrounded
|
|
157
|
-
rubygems_version: 1.8.
|
|
222
|
+
rubygems_version: 1.8.10
|
|
158
223
|
signing_key:
|
|
159
224
|
specification_version: 3
|
|
160
225
|
summary: Simple API to run Model methods in the background
|