sunspot_index_queue 1.1.1 → 1.1.2

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.
@@ -1,3 +1,7 @@
1
+ 1.1.2
2
+
3
+ - Optimization for ActiveRecord to eager load includes declared in sunspot_options for indexing.
4
+
1
5
  1.1.1
2
6
 
3
7
  - Fix bug where entries were lost if they failed to be submitted individually after they failed to be submitted in a batch.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.2
@@ -99,13 +99,17 @@ module Sunspot
99
99
  end
100
100
 
101
101
  # Load all records in an array of entries. This can be faster than calling load on each DataAccessor
102
- # depending on them implementation
102
+ # depending on the implementation
103
103
  def load_all_records(entries)
104
104
  classes = entries.collect{|entry| entry.record_class_name}.uniq.collect{|name| Sunspot::Util.full_const_get(name) rescue nil}.compact
105
105
  map = entries.inject({}){|hash, entry| hash[entry.record_id.to_s] = entry; hash}
106
106
  classes.each do |klass|
107
107
  ids = entries.collect{|entry| entry.record_id}
108
- Sunspot::Adapters::DataAccessor.create(klass).load_all(ids).each do |record|
108
+ adapter = Sunspot::Adapters::DataAccessor.create(klass)
109
+ if klass.respond_to?(:sunspot_options) && klass.sunspot_options && klass.sunspot_options[:include] && adapter.respond_to?(:include=)
110
+ adapter.include = klass.sunspot_options[:include]
111
+ end
112
+ adapter.load_all(ids).each do |record|
109
113
  entry = map[Sunspot::Adapters::InstanceAdapter.adapt(record).id.to_s]
110
114
  entry.instance_variable_set(:@record, record) if entry
111
115
  end
@@ -30,6 +30,21 @@ describe Sunspot::IndexQueue::Batch do
30
30
  entry_2.processed?.should == true
31
31
  end
32
32
 
33
+ it "should submit all entries in a batch to Solr using include options if they are supported on the model and data adapters" do
34
+ record = Sunspot::IndexQueue::Test::Searchable::IncludeClass.new(1)
35
+ entry = Sunspot::IndexQueue::Entry::MockImpl.new(:record => record, :delete => false)
36
+ entry.stub!(:record).and_return(record)
37
+ session.should_receive(:batch).and_yield
38
+ session.should_receive(:index).with(record)
39
+ session.should_receive(:commit)
40
+ adapter = Sunspot::Adapters::DataAccessor.create(Sunspot::IndexQueue::Test::Searchable::IncludeClass)
41
+ Sunspot::Adapters::DataAccessor.should_receive(:create).with(Sunspot::IndexQueue::Test::Searchable::IncludeClass).and_return(adapter)
42
+ Sunspot::IndexQueue::Entry.implementation.should_receive(:delete_entries).with([entry])
43
+ batch = Sunspot::IndexQueue::Batch.new(queue, [entry])
44
+ batch.submit!
45
+ adapter.include.should == :test
46
+ end
47
+
33
48
  it "should submit all entries individually and commit them if the batch errors out" do
34
49
  entry_1.stub!(:record).and_return(record_1)
35
50
  session.should_receive(:batch).and_yield
@@ -81,10 +81,22 @@ module Sunspot
81
81
 
82
82
  class Subclass < Searchable
83
83
  end
84
+
85
+ # This class mocks out the behavior of ActiveRecord DataAccessor where an include can be attached for eager loading.
86
+ class IncludeClass < Searchable
87
+ def self.sunspot_options
88
+ {:include => :test}
89
+ end
90
+
91
+ class IncludeDataAccessor < DataAccessor
92
+ attr_accessor :include
93
+ end
94
+ end
84
95
  end
85
96
 
86
97
  Sunspot::Adapters::InstanceAdapter.register(Searchable::InstanceAdapter, Searchable)
87
98
  Sunspot::Adapters::DataAccessor.register(Searchable::DataAccessor, Searchable)
99
+ Sunspot::Adapters::DataAccessor.register(Searchable::IncludeClass::IncludeDataAccessor, Searchable::IncludeClass)
88
100
  Sunspot.setup(Searchable) do
89
101
  string :value
90
102
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sunspot_index_queue}
8
- s.version = "1.1.1"
8
+ s.version = "1.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Durand"]
12
- s.date = %q{2011-04-08}
12
+ s.date = %q{2011-06-23}
13
13
  s.description = %q{This gem provides asynchronous indexing to Solr for the sunspot gem. It uses a pluggable model for the backing queue and provides support for ActiveRecord and MongoDB out of the box.}
14
14
  s.email = %q{brian@embellishedvisions.com}
15
15
  s.extra_rdoc_files = [
@@ -46,18 +46,6 @@ Gem::Specification.new do |s|
46
46
  s.require_paths = ["lib"]
47
47
  s.rubygems_version = %q{1.5.2}
48
48
  s.summary = %q{Asynchronous Solr indexing support for the sunspot gem with an emphasis on reliablity and throughput.}
49
- s.test_files = [
50
- "spec/active_record_impl_spec.rb",
51
- "spec/batch_spec.rb",
52
- "spec/data_mapper_impl_spec.rb",
53
- "spec/entry_impl_examples.rb",
54
- "spec/entry_spec.rb",
55
- "spec/index_queue_spec.rb",
56
- "spec/integration_spec.rb",
57
- "spec/mongo_impl_spec.rb",
58
- "spec/session_proxy_spec.rb",
59
- "spec/spec_helper.rb"
60
- ]
61
49
 
62
50
  if s.respond_to? :specification_version then
63
51
  s.specification_version = 3
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunspot_index_queue
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 1
10
- version: 1.1.1
9
+ - 2
10
+ version: 1.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian Durand
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-08 00:00:00 -05:00
18
+ date: 2011-06-23 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -225,14 +225,5 @@ rubygems_version: 1.5.2
225
225
  signing_key:
226
226
  specification_version: 3
227
227
  summary: Asynchronous Solr indexing support for the sunspot gem with an emphasis on reliablity and throughput.
228
- test_files:
229
- - spec/active_record_impl_spec.rb
230
- - spec/batch_spec.rb
231
- - spec/data_mapper_impl_spec.rb
232
- - spec/entry_impl_examples.rb
233
- - spec/entry_spec.rb
234
- - spec/index_queue_spec.rb
235
- - spec/integration_spec.rb
236
- - spec/mongo_impl_spec.rb
237
- - spec/session_proxy_spec.rb
238
- - spec/spec_helper.rb
228
+ test_files: []
229
+