sunspot-queue 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -6,6 +6,21 @@ Background search indexing using existing worker systems.
6
6
 
7
7
  $ gem install sunspot-queue
8
8
 
9
+ ## Usage with Rails (or without)
10
+
11
+ In your Gemfile
12
+
13
+ gem "sunspot-queue"
14
+ gem "resque"
15
+
16
+ In config/initializers/sunspot.rb
17
+
18
+ Sunspot.session = Sunspot::Queue::SessionProxy.new(Sunspot.session)
19
+
20
+ Start Resque
21
+
22
+ $ QUEUE=sunspot rake resque:work
23
+
9
24
  ## Note on Patches/Pull Requests
10
25
 
11
26
  * Fork the project.
@@ -13,7 +28,7 @@ Background search indexing using existing worker systems.
13
28
  * Make your feature addition or bug fix.
14
29
  * Send me a pull request. Bonus points for topic branches.
15
30
 
16
- Please don't make changes to the Rakefile, version, or history.
31
+ Please don't make changes to the Rakefile, version, or history.
17
32
 
18
33
  ## Development
19
34
 
data/lib/sunspot/queue.rb CHANGED
@@ -2,11 +2,10 @@ module Sunspot
2
2
  module Queue
3
3
  class Error < StandardError; end
4
4
  class NotPersistedError < Error; end
5
-
6
- VERSION = "0.9.0"
7
5
  end
8
6
  end
9
7
 
8
+ require "sunspot/queue/version"
10
9
  require "sunspot/queue/session_proxy"
11
10
  require "sunspot/queue/index_job"
12
11
  require "sunspot/queue/removal_job"
@@ -3,21 +3,18 @@ require "sunspot/queue/session_proxy"
3
3
  module Sunspot::Queue
4
4
  module Helpers
5
5
  def without_proxy
6
+ proxy = nil
7
+
6
8
  # Pop off the queueing proxy for the block if it's in place so we don't
7
9
  # requeue the same job multiple times.
8
10
  if Sunspot.session.instance_of?(SessionProxy)
9
11
  proxy = Sunspot.session
10
12
  Sunspot.session = proxy.session
11
-
12
- begin
13
- yield
14
- ensure
15
- Sunspot.commit rescue nil
16
- Sunspot.session = proxy
17
- end
18
- else
19
- yield
20
13
  end
14
+
15
+ yield
16
+ ensure
17
+ Sunspot.session = proxy if proxy
21
18
  end
22
19
  end
23
20
  end
@@ -10,9 +10,7 @@ module Sunspot::Queue
10
10
 
11
11
  def self.perform(klass, id)
12
12
  without_proxy do
13
- record = ::Resque.constantize(klass).find(id)
14
-
15
- Sunspot.index!(record)
13
+ ::Resque.constantize(klass).find(id).solr_index
16
14
  end
17
15
  end
18
16
  end
@@ -0,0 +1,5 @@
1
+ module Sunspot
2
+ module Queue
3
+ VERSION = "0.9.1"
4
+ end
5
+ end
@@ -8,6 +8,7 @@ describe Sunspot::Queue::IndexJob do
8
8
 
9
9
  expect do
10
10
  Sunspot::Queue::IndexJob.perform(Person, person.id)
11
+ commit
11
12
  end.to change { Person.search.hits.size }.by(1)
12
13
 
13
14
  results = Person.search { fulltext "grandson" }.results
@@ -25,5 +26,17 @@ describe Sunspot::Queue::IndexJob do
25
26
  Sunspot::Queue::IndexJob.perform(Person, 404) rescue nil
26
27
  end.to_not change { Sunspot.session }
27
28
  end
29
+
30
+ it "does not commit changes to the index" do
31
+ person = Person.create(:name => "The Grandson")
32
+
33
+ expect do
34
+ Sunspot::Queue::IndexJob.perform(Person, person.id)
35
+ end.to_not change { Person.search.hits.size }
36
+
37
+ expect do
38
+ commit
39
+ end.to change { Person.search.hits.size }
40
+ end
28
41
  end
29
42
  end
@@ -1,21 +1,23 @@
1
1
  require "spec_helper"
2
- require "sunspot/queue/helpers"
3
2
 
4
3
  describe "Queued Indexing" do
5
- include Sunspot::Queue::Helpers
6
-
7
4
  # Given an active record model
8
5
  # When I save the model
9
6
  # Then the record should not be in solr
7
+ # And a job should be enqueued in resque
10
8
  #
11
9
  # When resque jobs are run
10
+ # And the sunspot queue has been committed
12
11
  # Then the record should be in solr
13
12
  it "queues indexing of ActiveRecord models using resque" do
14
13
  person = Person.create(:name => "Inigo Montoya")
15
14
  Person.search.results.should be_empty
16
15
 
16
+ ResqueSpec.queue_by_name(:sunspot).size.should == 1
17
+
17
18
  expect do
18
19
  ResqueSpec.perform_all(:sunspot)
20
+ commit
19
21
  end.to change { Person.search.hits.size }.by(1)
20
22
 
21
23
  results = Person.search { fulltext "Montoya" }.results
@@ -29,8 +31,13 @@ describe "Queued Indexing" do
29
31
  # When resque jobs are run
30
32
  # Then the record should not be in solr
31
33
  it "queues removal of ActiveRecord models using Resque" do
32
- person = Person.create(:name => "Fezzik")
33
- ResqueSpec.perform_all(:sunspot)
34
+ person =
35
+ without_proxy do
36
+ Person.create(:name => "Fezzik").tap do
37
+ commit
38
+ end
39
+ end
40
+
34
41
  Person.search.hits.size.should == 1
35
42
 
36
43
  expect do
@@ -39,6 +46,7 @@ describe "Queued Indexing" do
39
46
 
40
47
  expect do
41
48
  ResqueSpec.perform_all(:sunspot)
49
+ commit
42
50
  end.to change { Person.search.hits.size }.by(-1)
43
51
  end
44
52
  end
@@ -2,18 +2,19 @@ require "spec_helper"
2
2
  require "sunspot/queue/helpers"
3
3
 
4
4
  describe Sunspot::Queue::IndexJob do
5
- include Sunspot::Queue::Helpers
6
-
7
5
  it "removes a job from the search index" do
8
6
  person =
9
7
  without_proxy do
10
- Person.create(:name => "The Albino")
8
+ Person.create(:name => "The Albino").tap do
9
+ commit
10
+ end
11
11
  end
12
12
 
13
13
  Person.search.hits.size.should == 1
14
14
 
15
15
  expect do
16
16
  Sunspot::Queue::RemovalJob.perform(Person, person.id)
17
+ commit
17
18
  end.to change { Person.search.hits.size }.by(-1)
18
19
  end
19
20
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "sunspot/queue"
2
+ require "sunspot/queue/helpers"
2
3
 
3
4
  require "socket"
4
5
  require "active_record"
@@ -36,6 +37,15 @@ RSpec.configure do |config|
36
37
  config.run_all_when_everything_filtered = true
37
38
  config.filter_run :focus
38
39
 
40
+ config.include(Sunspot::Queue::Helpers)
41
+ config.include(
42
+ Module.new do
43
+ def commit
44
+ without_proxy { Sunspot.commit }
45
+ end
46
+ end
47
+ )
48
+
39
49
  # Original sunspot session not wrapped in our proxy object
40
50
  session = Sunspot.session
41
51
 
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.9.0
4
+ version: 0.9.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: 2012-05-31 00:00:00.000000000 Z
12
+ date: 2012-06-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: resque
@@ -43,22 +43,6 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.3.0
46
- - !ruby/object:Gem::Dependency
47
- name: rake
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
46
  - !ruby/object:Gem::Dependency
63
47
  name: rspec
64
48
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +182,7 @@ files:
198
182
  - lib/sunspot/queue/index_job.rb
199
183
  - lib/sunspot/queue/removal_job.rb
200
184
  - lib/sunspot/queue/session_proxy.rb
185
+ - lib/sunspot/queue/version.rb
201
186
  - lib/sunspot/queue.rb
202
187
  - lib/sunspot-queue.rb
203
188
  - spec/index_job_spec.rb
@@ -219,18 +204,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
204
  - - ! '>='
220
205
  - !ruby/object:Gem::Version
221
206
  version: '0'
222
- segments:
223
- - 0
224
- hash: -3459963560005130599
225
207
  required_rubygems_version: !ruby/object:Gem::Requirement
226
208
  none: false
227
209
  requirements:
228
210
  - - ! '>='
229
211
  - !ruby/object:Gem::Version
230
212
  version: '0'
231
- segments:
232
- - 0
233
- hash: -3459963560005130599
234
213
  requirements: []
235
214
  rubyforge_project:
236
215
  rubygems_version: 1.8.24