sunspot-queue 0.10.0 → 0.10.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/History.md +7 -0
- data/README.md +24 -0
- data/lib/sunspot/queue/delayed_job.rb +9 -0
- data/lib/sunspot/queue/delayed_job/backend.rb +35 -0
- data/lib/sunspot/queue/delayed_job/index_job.rb +13 -0
- data/lib/sunspot/queue/delayed_job/removal_job.rb +13 -0
- data/lib/sunspot/queue/helpers.rb +1 -1
- data/lib/sunspot/queue/sidekiq/index_job.rb +1 -0
- data/lib/sunspot/queue/sidekiq/removal_job.rb +1 -0
- data/lib/sunspot/queue/version.rb +1 -1
- data/spec/delayed_job/backend_spec.rb +54 -0
- data/spec/delayed_job/index_job_spec.rb +49 -0
- data/spec/delayed_job/removal_job_spec.rb +21 -0
- data/spec/spec_helper.rb +11 -2
- data/spec/support/delayed_job.rb +2 -0
- metadata +29 -5
data/History.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Sunspot Queue Changelog
|
2
2
|
|
3
|
+
## 0.11.1
|
4
|
+
* Allow without_proxy to work with SessionProxy subclasses
|
5
|
+
* Added missing requires in sidekiq jobs
|
6
|
+
|
7
|
+
## 0.11.0
|
8
|
+
* Delayed Job support
|
9
|
+
|
3
10
|
## 0.10.0
|
4
11
|
* Sidekiq support
|
5
12
|
* SessionProxy now takes a backend as a second required option
|
data/README.md
CHANGED
@@ -54,6 +54,30 @@ Start Sidekiq
|
|
54
54
|
$ sidekiq -q sunspot
|
55
55
|
```
|
56
56
|
|
57
|
+
## Usage with Rails and Delayed::Job
|
58
|
+
|
59
|
+
In your Gemfile
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
gem "sunspot-queue"
|
63
|
+
gem "delayed_job"
|
64
|
+
gem "delayed_job_active_record" # or choose another backend
|
65
|
+
```
|
66
|
+
|
67
|
+
In config/initializers/sunspot.rb
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
require "sunspot/queue/delayed_job"
|
71
|
+
backend = Sunspot::Queue::DelayedJob::Backend.new
|
72
|
+
Sunspot.session = Sunspot::Queue::SessionProxy.new(Sunspot.session, backend)
|
73
|
+
```
|
74
|
+
|
75
|
+
Start Delayed::Job
|
76
|
+
|
77
|
+
```console
|
78
|
+
$ rake jobs:work
|
79
|
+
```
|
80
|
+
|
57
81
|
## Configuring Sunspot Queue
|
58
82
|
|
59
83
|
In config/initializers/sunspot.rb
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "delayed_job"
|
2
|
+
require "sunspot/queue/delayed_job/index_job"
|
3
|
+
require "sunspot/queue/delayed_job/removal_job"
|
4
|
+
|
5
|
+
module Sunspot::Queue::DelayedJob
|
6
|
+
class Backend
|
7
|
+
attr_reader :configuration
|
8
|
+
|
9
|
+
def initialize(configuration = Sunspot::Queue.configuration)
|
10
|
+
@configuration = configuration
|
11
|
+
end
|
12
|
+
|
13
|
+
def enqueue(job)
|
14
|
+
Delayed::Job.enqueue(job)
|
15
|
+
end
|
16
|
+
|
17
|
+
def index(klass, id)
|
18
|
+
enqueue(index_job.new(klass, id))
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove(klass, id)
|
22
|
+
enqueue(removal_job.new(klass, id))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def index_job
|
28
|
+
configuration.index_job || ::Sunspot::Queue::DelayedJob::IndexJob
|
29
|
+
end
|
30
|
+
|
31
|
+
def removal_job
|
32
|
+
configuration.removal_job || ::Sunspot::Queue::DelayedJob::RemovalJob
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -7,7 +7,7 @@ module Sunspot::Queue
|
|
7
7
|
|
8
8
|
# Pop off the queueing proxy for the block if it's in place so we don't
|
9
9
|
# requeue the same job multiple times.
|
10
|
-
if Sunspot.session.
|
10
|
+
if Sunspot.session.is_a?(SessionProxy)
|
11
11
|
proxy = Sunspot.session
|
12
12
|
Sunspot.session = proxy.session
|
13
13
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Sunspot::Queue::DelayedJob::Backend do
|
4
|
+
|
5
|
+
# Mock DelayedJobJob
|
6
|
+
class CustomDelayedJobJob < Struct.new(:klass, :id)
|
7
|
+
def perform
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
subject(:backend) { described_class.new(configuration) }
|
12
|
+
|
13
|
+
let(:configuration) { ::Sunspot::Queue::Configuration.new }
|
14
|
+
|
15
|
+
describe "#index" do
|
16
|
+
it "uses the index job set in the global configuration" do
|
17
|
+
configuration.index_job = CustomDelayedJobJob
|
18
|
+
|
19
|
+
Delayed::Job.should_receive(:enqueue) do |args|
|
20
|
+
args.first.is_a? CustomDelayedJobJob
|
21
|
+
end
|
22
|
+
|
23
|
+
backend.index(Person, 3)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "uses the default index job if one is not configured" do
|
27
|
+
Delayed::Job.should_receive(:enqueue) do |args|
|
28
|
+
args.first.is_a? Sunspot::Queue::DelayedJob::IndexJob
|
29
|
+
end
|
30
|
+
|
31
|
+
backend.index(Person, 12)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#remove" do
|
36
|
+
it "uses the removal job set in the global configuration" do
|
37
|
+
configuration.removal_job = CustomDelayedJobJob
|
38
|
+
|
39
|
+
Delayed::Job.should_receive(:enqueue) do |args|
|
40
|
+
args.first.is_a? CustomDelayedJobJob
|
41
|
+
end
|
42
|
+
|
43
|
+
backend.remove(Person, 3)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "uses the default index job if one is not configured" do
|
47
|
+
Delayed::Job.should_receive(:enqueue) do |args|
|
48
|
+
args.first.is_a? Sunspot::Queue::DelayedJob::RemovalJob
|
49
|
+
end
|
50
|
+
|
51
|
+
backend.remove(Person, 12)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Sunspot::Queue::DelayedJob::IndexJob do
|
4
|
+
context "ActiveRecord" do
|
5
|
+
|
6
|
+
it "indexes an ActiveRecord model" do
|
7
|
+
person = Person.create(:name => "The Grandson")
|
8
|
+
job = Sunspot::Queue::DelayedJob::IndexJob.new(Person, person.id)
|
9
|
+
|
10
|
+
# This will queue a job but we'll just ignore it to isolate the job
|
11
|
+
expect do
|
12
|
+
job.perform
|
13
|
+
commit
|
14
|
+
end.to change { Person.search.hits.size }.by(1)
|
15
|
+
|
16
|
+
results = Person.search { fulltext "grandson" }.results
|
17
|
+
results.first.should == person
|
18
|
+
end
|
19
|
+
|
20
|
+
it "raises an error if the record could not be found" do
|
21
|
+
job = Sunspot::Queue::DelayedJob::IndexJob.new(Person, 404)
|
22
|
+
|
23
|
+
expect do
|
24
|
+
job.perform
|
25
|
+
end.to raise_error(ActiveRecord::RecordNotFound)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "maintains the existing proxy if there was an error" do
|
29
|
+
job = Sunspot::Queue::DelayedJob::IndexJob.new(Person, 404)
|
30
|
+
|
31
|
+
expect do
|
32
|
+
job.perform rescue nil
|
33
|
+
end.to_not change { Sunspot.session }
|
34
|
+
end
|
35
|
+
|
36
|
+
it "does not commit changes to the index" do
|
37
|
+
person = Person.create(:name => "The Grandson")
|
38
|
+
job = Sunspot::Queue::DelayedJob::IndexJob.new(Person, person.id)
|
39
|
+
|
40
|
+
expect do
|
41
|
+
job.perform
|
42
|
+
end.to_not change { Person.search.hits.size }
|
43
|
+
|
44
|
+
expect do
|
45
|
+
commit
|
46
|
+
end.to change { Person.search.hits.size }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "sunspot/queue/delayed_job"
|
3
|
+
require "sunspot/queue/helpers"
|
4
|
+
|
5
|
+
describe Sunspot::Queue::DelayedJob::RemovalJob do
|
6
|
+
it "removes a job from the search index" do
|
7
|
+
person =
|
8
|
+
without_proxy do
|
9
|
+
Person.create(:name => "The Albino")
|
10
|
+
end
|
11
|
+
commit
|
12
|
+
|
13
|
+
Person.search.hits.size.should == 1
|
14
|
+
|
15
|
+
job = Sunspot::Queue::DelayedJob::RemovalJob.new(Person, person.id)
|
16
|
+
expect do
|
17
|
+
job.perform
|
18
|
+
commit
|
19
|
+
end.to change { Person.search.hits.size }.by(-1)
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,6 +11,7 @@ require "resque_spec"
|
|
11
11
|
# Neither is required when loading sunspot/queue
|
12
12
|
require "sunspot/queue/resque"
|
13
13
|
require "sunspot/queue/sidekiq"
|
14
|
+
require "sunspot/queue/delayed_job"
|
14
15
|
|
15
16
|
# Sidekiq
|
16
17
|
require "sidekiq"
|
@@ -82,6 +83,14 @@ RSpec.configure do |config|
|
|
82
83
|
Sunspot.session = Sunspot::Queue::SessionProxy.new(session, backend)
|
83
84
|
end
|
84
85
|
|
86
|
+
config.before(:each, :backend => :delayed_job) do
|
87
|
+
Delayed::Worker.delay_jobs = false
|
88
|
+
|
89
|
+
require "sunspot/queue/delayed_job"
|
90
|
+
backend = Sunspot::Queue::DelayedJob::Backend.new
|
91
|
+
Sunspot.session = Sunspot::Queue::SessionProxy.new(session, backend)
|
92
|
+
end
|
93
|
+
|
85
94
|
config.before(:each, :backend => :inline) do
|
86
95
|
backend = Sunspot::Queue::Inline::Backend.new
|
87
96
|
Sunspot.session = Sunspot::Queue::SessionProxy.new(session, backend)
|
@@ -100,8 +109,8 @@ RSpec.configure do |config|
|
|
100
109
|
|
101
110
|
at_exit { Process.kill("TERM", solr_pid) }
|
102
111
|
|
103
|
-
# Wait
|
104
|
-
|
112
|
+
# Wait up to 30 seconds for Solr to boot
|
113
|
+
60.times do
|
105
114
|
begin
|
106
115
|
TCPSocket.new("localhost", 8983)
|
107
116
|
break
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunspot-queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sunspot_rails
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: delayed_job
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: rake
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,6 +227,10 @@ extensions: []
|
|
211
227
|
extra_rdoc_files: []
|
212
228
|
files:
|
213
229
|
- lib/sunspot/queue/configuration.rb
|
230
|
+
- lib/sunspot/queue/delayed_job/backend.rb
|
231
|
+
- lib/sunspot/queue/delayed_job/index_job.rb
|
232
|
+
- lib/sunspot/queue/delayed_job/removal_job.rb
|
233
|
+
- lib/sunspot/queue/delayed_job.rb
|
214
234
|
- lib/sunspot/queue/helpers.rb
|
215
235
|
- lib/sunspot/queue/inline/backend.rb
|
216
236
|
- lib/sunspot/queue/inline.rb
|
@@ -227,6 +247,9 @@ files:
|
|
227
247
|
- lib/sunspot/queue.rb
|
228
248
|
- lib/sunspot-queue.rb
|
229
249
|
- spec/configuration_spec.rb
|
250
|
+
- spec/delayed_job/backend_spec.rb
|
251
|
+
- spec/delayed_job/index_job_spec.rb
|
252
|
+
- spec/delayed_job/removal_job_spec.rb
|
230
253
|
- spec/inline/backend_spec.rb
|
231
254
|
- spec/integration/indexing_spec.rb
|
232
255
|
- spec/integration/sidekiq_spec.rb
|
@@ -239,6 +262,7 @@ files:
|
|
239
262
|
- spec/sidekiq/index_job_spec.rb
|
240
263
|
- spec/sidekiq/removal_job.rb
|
241
264
|
- spec/spec_helper.rb
|
265
|
+
- spec/support/delayed_job.rb
|
242
266
|
- spec/support/sidekiq.rb
|
243
267
|
- LICENSE
|
244
268
|
- README.md
|
@@ -257,7 +281,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
257
281
|
version: '0'
|
258
282
|
segments:
|
259
283
|
- 0
|
260
|
-
hash: -
|
284
|
+
hash: -2562861309914958961
|
261
285
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
262
286
|
none: false
|
263
287
|
requirements:
|
@@ -266,10 +290,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
290
|
version: '0'
|
267
291
|
segments:
|
268
292
|
- 0
|
269
|
-
hash: -
|
293
|
+
hash: -2562861309914958961
|
270
294
|
requirements: []
|
271
295
|
rubyforge_project:
|
272
|
-
rubygems_version: 1.8.
|
296
|
+
rubygems_version: 1.8.25
|
273
297
|
signing_key:
|
274
298
|
specification_version: 3
|
275
299
|
summary: Background search indexing using existing worker systems.
|