sunspot_rails 2.1.1 → 2.2.0
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 +23 -0
- data/generators/sunspot/templates/sunspot.yml +6 -1
- data/lib/sunspot/rails/configuration.rb +21 -0
- data/lib/sunspot/rails/searchable.rb +10 -5
- data/lib/sunspot/rails/stub_session_proxy.rb +20 -12
- data/lib/sunspot/rails/tasks.rb +1 -0
- data/spec/configuration_spec.rb +23 -0
- data/spec/rails_template/config/sunspot.yml +5 -0
- data/spec/stub_session_proxy_spec.rb +14 -0
- metadata +19 -7
- checksums.yaml +0 -7
data/README.rdoc
CHANGED
@@ -188,6 +188,29 @@ remove those documents from the index, use +clean_index_orphans+. Note that
|
|
188
188
|
neither of these operations should be needed if Sunspot and Sunspot::Rails are
|
189
189
|
used as intended.
|
190
190
|
|
191
|
+
=== Configuration
|
192
|
+
|
193
|
+
==== ActiveRecord index hooks
|
194
|
+
|
195
|
+
By default, `sunspot_rails` uses `after_save` and `after_destroy` hooks to
|
196
|
+
automatically index or remove ActiveRecord models. When you're using any sort
|
197
|
+
of asynchronous indexing like
|
198
|
+
[sunspot_index_queue](https://github.com/bdurand/sunspot_index_queue) or
|
199
|
+
[sunspot-queue](https://github.com/gaffneyc/sunspot-queue) you may want
|
200
|
+
these to be after_commit hooks or you may have timing issues.
|
201
|
+
|
202
|
+
To do this, add the following to your `sunspot.yml` for each environment:
|
203
|
+
|
204
|
+
production:
|
205
|
+
# ...
|
206
|
+
auto_index_callback: after_commit
|
207
|
+
auto_remove_callback: after_commit
|
208
|
+
|
209
|
+
Note that if you set these to `after_commit` in the `test` environment you may
|
210
|
+
need https://github.com/grosser/test_after_commit if you use
|
211
|
+
`transactionnal_fixtures = true`.
|
212
|
+
|
213
|
+
|
191
214
|
== Testing Solr integration using RSpec
|
192
215
|
|
193
216
|
To disable the sunspot-solr integration for your active record models, require
|
@@ -6,6 +6,8 @@ production:
|
|
6
6
|
path: /solr/production
|
7
7
|
read_timeout: 20
|
8
8
|
open_timeout: 1
|
9
|
+
auto_index_callback: after_commit
|
10
|
+
auto_remove_callback: after_commit
|
9
11
|
|
10
12
|
development:
|
11
13
|
solr:
|
@@ -13,6 +15,8 @@ development:
|
|
13
15
|
port: 8983
|
14
16
|
log_level: INFO
|
15
17
|
path: /solr/development
|
18
|
+
auto_index_callback: after_commit
|
19
|
+
auto_remove_callback: after_commit
|
16
20
|
|
17
21
|
test:
|
18
22
|
solr:
|
@@ -20,4 +24,5 @@ test:
|
|
20
24
|
port: 8983
|
21
25
|
log_level: WARNING
|
22
26
|
path: /solr/test
|
23
|
-
|
27
|
+
auto_index_callback: after_commit
|
28
|
+
auto_remove_callback: after_commit
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'erb'
|
2
|
+
require 'yaml'
|
2
3
|
|
3
4
|
module Sunspot #:nodoc:
|
4
5
|
module Rails #:nodoc:
|
@@ -39,6 +40,8 @@ module Sunspot #:nodoc:
|
|
39
40
|
# hostname: localhost
|
40
41
|
# port: 8982
|
41
42
|
# path: /solr
|
43
|
+
# auto_index_callback: after_commit
|
44
|
+
# auto_remove_callback: after_commit
|
42
45
|
# auto_commit_after_request: true
|
43
46
|
#
|
44
47
|
# Sunspot::Rails uses the configuration to set up the Solr connection, as
|
@@ -315,6 +318,24 @@ module Sunspot #:nodoc:
|
|
315
318
|
@disabled ||= (user_configuration_from_key('disabled') || false)
|
316
319
|
end
|
317
320
|
|
321
|
+
#
|
322
|
+
# The callback to use when automatically indexing records.
|
323
|
+
# Defaults to after_save.
|
324
|
+
#
|
325
|
+
def auto_index_callback
|
326
|
+
@auto_index_callback ||=
|
327
|
+
(user_configuration_from_key('auto_index_callback') || 'after_save')
|
328
|
+
end
|
329
|
+
|
330
|
+
#
|
331
|
+
# The callback to use when automatically removing records after deletation.
|
332
|
+
# Defaults to after_destroy.
|
333
|
+
#
|
334
|
+
def auto_remove_callback
|
335
|
+
@auto_remove_callback ||=
|
336
|
+
(user_configuration_from_key('auto_remove_callback') || 'after_destroy')
|
337
|
+
end
|
338
|
+
|
318
339
|
private
|
319
340
|
|
320
341
|
#
|
@@ -90,16 +90,21 @@ module Sunspot #:nodoc:
|
|
90
90
|
|
91
91
|
unless options[:auto_index] == false
|
92
92
|
before_save :mark_for_auto_indexing_or_removal
|
93
|
-
|
93
|
+
|
94
|
+
# after_commit :perform_index_tasks, :if => :persisted?
|
95
|
+
__send__ Sunspot::Rails.configuration.auto_index_callback,
|
96
|
+
:perform_index_tasks,
|
97
|
+
:if => :persisted?
|
94
98
|
end
|
95
99
|
|
96
100
|
unless options[:auto_remove] == false
|
97
|
-
|
98
|
-
|
99
|
-
|
101
|
+
# after_commit { |searchable| searchable.remove_from_index }, :on => :destroy
|
102
|
+
__send__ Sunspot::Rails.configuration.auto_remove_callback,
|
103
|
+
proc { |searchable| searchable.remove_from_index },
|
104
|
+
:on => :destroy
|
100
105
|
end
|
101
106
|
options[:include] = Util::Array(options[:include])
|
102
|
-
|
107
|
+
|
103
108
|
self.sunspot_options = options
|
104
109
|
end
|
105
110
|
end
|
@@ -46,13 +46,13 @@ module Sunspot
|
|
46
46
|
false
|
47
47
|
end
|
48
48
|
|
49
|
-
def commit_if_dirty
|
49
|
+
def commit_if_dirty(soft_commit = false)
|
50
50
|
end
|
51
51
|
|
52
|
-
def commit_if_delete_dirty
|
52
|
+
def commit_if_delete_dirty(soft_commit = false)
|
53
53
|
end
|
54
54
|
|
55
|
-
def commit
|
55
|
+
def commit(soft_commit = false)
|
56
56
|
end
|
57
57
|
|
58
58
|
def search(*types)
|
@@ -71,8 +71,12 @@ module Sunspot
|
|
71
71
|
Search.new
|
72
72
|
end
|
73
73
|
|
74
|
+
class DataAccessorStub
|
75
|
+
attr_accessor :include, :select
|
76
|
+
end
|
77
|
+
|
74
78
|
class Search
|
75
|
-
|
79
|
+
|
76
80
|
def build
|
77
81
|
self
|
78
82
|
end
|
@@ -102,28 +106,32 @@ module Sunspot
|
|
102
106
|
FacetStub.new
|
103
107
|
end
|
104
108
|
|
109
|
+
def data_accessor_for(klass)
|
110
|
+
DataAccessorStub.new
|
111
|
+
end
|
112
|
+
|
105
113
|
def execute
|
106
114
|
self
|
107
115
|
end
|
108
116
|
end
|
109
|
-
|
110
|
-
|
117
|
+
|
118
|
+
|
111
119
|
class PaginatedCollection < Array
|
112
|
-
|
120
|
+
|
113
121
|
def total_count
|
114
122
|
0
|
115
123
|
end
|
116
124
|
alias :total_entries :total_count
|
117
|
-
|
125
|
+
|
118
126
|
def current_page
|
119
127
|
1
|
120
128
|
end
|
121
|
-
|
129
|
+
|
122
130
|
def per_page
|
123
131
|
30
|
124
132
|
end
|
125
133
|
alias :limit_value :per_page
|
126
|
-
|
134
|
+
|
127
135
|
def total_pages
|
128
136
|
1
|
129
137
|
end
|
@@ -152,7 +160,7 @@ module Sunspot
|
|
152
160
|
def offset
|
153
161
|
0
|
154
162
|
end
|
155
|
-
|
163
|
+
|
156
164
|
end
|
157
165
|
|
158
166
|
class FacetStub
|
@@ -162,7 +170,7 @@ module Sunspot
|
|
162
170
|
end
|
163
171
|
|
164
172
|
end
|
165
|
-
|
173
|
+
|
166
174
|
end
|
167
175
|
end
|
168
176
|
end
|
data/lib/sunspot/rails/tasks.rb
CHANGED
@@ -31,6 +31,7 @@ namespace :sunspot do
|
|
31
31
|
# Load all the application's models. Models which invoke 'searchable' will register themselves
|
32
32
|
# in Sunspot.searchable.
|
33
33
|
Rails.application.eager_load!
|
34
|
+
Rails::Engine.subclasses.each{|engine| engine.instance.eager_load!}
|
34
35
|
|
35
36
|
if args[:models].present?
|
36
37
|
# Choose a specific subset of models, if requested
|
data/spec/configuration_spec.rb
CHANGED
@@ -92,6 +92,14 @@ describe Sunspot::Rails::Configuration, "default values without a sunspot.yml" d
|
|
92
92
|
it "should handle the 'disabled' property when not set" do
|
93
93
|
@config.disabled?.should be_false
|
94
94
|
end
|
95
|
+
|
96
|
+
it "should handle the 'auto_index_callback' property when not set" do
|
97
|
+
@config.auto_index_callback.should == "after_save"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should handle the 'auto_remove_callback' property when not set" do
|
101
|
+
@config.auto_remove_callback.should == "after_destroy"
|
102
|
+
end
|
95
103
|
end
|
96
104
|
|
97
105
|
describe Sunspot::Rails::Configuration, "user provided sunspot.yml" do
|
@@ -161,6 +169,21 @@ describe Sunspot::Rails::Configuration, "user provided sunspot.yml" do
|
|
161
169
|
end
|
162
170
|
end
|
163
171
|
|
172
|
+
describe Sunspot::Rails::Configuration, "with auto_index_callback and auto_remove_callback set" do
|
173
|
+
before do
|
174
|
+
::Rails.stub!(:env => 'config_commit_test')
|
175
|
+
@config = Sunspot::Rails::Configuration.new
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should handle the 'auto_index_callback' property when set" do
|
179
|
+
@config.auto_index_callback.should == "after_commit"
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should handle the 'auto_remove_callback' property when set" do
|
183
|
+
@config.auto_remove_callback.should == "after_commit"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
164
187
|
describe Sunspot::Rails::Configuration, "with disabled: true in sunspot.yml" do
|
165
188
|
before(:each) do
|
166
189
|
::Rails.stub(:env => 'config_disabled_test')
|
@@ -2,6 +2,8 @@ test:
|
|
2
2
|
solr:
|
3
3
|
hostname: localhost
|
4
4
|
port: 8983
|
5
|
+
auto_index_callback: after_save
|
6
|
+
auto_remove_callback: after_destroy
|
5
7
|
development:
|
6
8
|
solr:
|
7
9
|
hostname: localhost
|
@@ -25,3 +27,6 @@ config_test:
|
|
25
27
|
auto_commit_after_delete_request: true
|
26
28
|
config_disabled_test:
|
27
29
|
disabled: true
|
30
|
+
config_commit_test:
|
31
|
+
auto_index_callback: after_commit
|
32
|
+
auto_remove_callback: after_commit
|
@@ -140,5 +140,19 @@ describe 'specs with Sunspot stubbed' do
|
|
140
140
|
it 'should return empty array if listing facets' do
|
141
141
|
@search.facets.should == []
|
142
142
|
end
|
143
|
+
|
144
|
+
describe '#data_accessor_for' do
|
145
|
+
before do
|
146
|
+
@accessor = @search.data_accessor_for(Post)
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should provide accessor for select' do
|
150
|
+
@accessor.should respond_to(:select, :select=)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'should provide accessor for include' do
|
154
|
+
@accessor.should respond_to(:include, :include=)
|
155
|
+
end
|
156
|
+
end
|
143
157
|
end
|
144
158
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunspot_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Mat Brown
|
@@ -26,11 +27,12 @@ authors:
|
|
26
27
|
autorequire:
|
27
28
|
bindir: bin
|
28
29
|
cert_chain: []
|
29
|
-
date:
|
30
|
+
date: 2015-04-09 00:00:00.000000000 Z
|
30
31
|
dependencies:
|
31
32
|
- !ruby/object:Gem::Dependency
|
32
33
|
name: rails
|
33
34
|
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
34
36
|
requirements:
|
35
37
|
- - ">="
|
36
38
|
- !ruby/object:Gem::Version
|
@@ -38,6 +40,7 @@ dependencies:
|
|
38
40
|
type: :runtime
|
39
41
|
prerelease: false
|
40
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
41
44
|
requirements:
|
42
45
|
- - ">="
|
43
46
|
- !ruby/object:Gem::Version
|
@@ -45,20 +48,23 @@ dependencies:
|
|
45
48
|
- !ruby/object:Gem::Dependency
|
46
49
|
name: sunspot
|
47
50
|
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
48
52
|
requirements:
|
49
53
|
- - '='
|
50
54
|
- !ruby/object:Gem::Version
|
51
|
-
version: 2.
|
55
|
+
version: 2.2.0
|
52
56
|
type: :runtime
|
53
57
|
prerelease: false
|
54
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
55
60
|
requirements:
|
56
61
|
- - '='
|
57
62
|
- !ruby/object:Gem::Version
|
58
|
-
version: 2.
|
63
|
+
version: 2.2.0
|
59
64
|
- !ruby/object:Gem::Dependency
|
60
65
|
name: nokogiri
|
61
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
62
68
|
requirements:
|
63
69
|
- - ">="
|
64
70
|
- !ruby/object:Gem::Version
|
@@ -66,6 +72,7 @@ dependencies:
|
|
66
72
|
type: :runtime
|
67
73
|
prerelease: false
|
68
74
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
69
76
|
requirements:
|
70
77
|
- - ">="
|
71
78
|
- !ruby/object:Gem::Version
|
@@ -73,6 +80,7 @@ dependencies:
|
|
73
80
|
- !ruby/object:Gem::Dependency
|
74
81
|
name: rspec
|
75
82
|
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
76
84
|
requirements:
|
77
85
|
- - "~>"
|
78
86
|
- !ruby/object:Gem::Version
|
@@ -80,6 +88,7 @@ dependencies:
|
|
80
88
|
type: :development
|
81
89
|
prerelease: false
|
82
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
83
92
|
requirements:
|
84
93
|
- - "~>"
|
85
94
|
- !ruby/object:Gem::Version
|
@@ -87,6 +96,7 @@ dependencies:
|
|
87
96
|
- !ruby/object:Gem::Dependency
|
88
97
|
name: rspec-rails
|
89
98
|
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
90
100
|
requirements:
|
91
101
|
- - "~>"
|
92
102
|
- !ruby/object:Gem::Version
|
@@ -94,6 +104,7 @@ dependencies:
|
|
94
104
|
type: :development
|
95
105
|
prerelease: false
|
96
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
97
108
|
requirements:
|
98
109
|
- - "~>"
|
99
110
|
- !ruby/object:Gem::Version
|
@@ -182,7 +193,6 @@ files:
|
|
182
193
|
homepage: http://github.com/outoftime/sunspot/tree/master/sunspot_rails
|
183
194
|
licenses:
|
184
195
|
- MIT
|
185
|
-
metadata: {}
|
186
196
|
post_install_message:
|
187
197
|
rdoc_options:
|
188
198
|
- "--webcvs=http://github.com/outoftime/sunspot/tree/master/%s"
|
@@ -193,20 +203,22 @@ rdoc_options:
|
|
193
203
|
require_paths:
|
194
204
|
- lib
|
195
205
|
required_ruby_version: !ruby/object:Gem::Requirement
|
206
|
+
none: false
|
196
207
|
requirements:
|
197
208
|
- - ">="
|
198
209
|
- !ruby/object:Gem::Version
|
199
210
|
version: '0'
|
200
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
212
|
+
none: false
|
201
213
|
requirements:
|
202
214
|
- - ">="
|
203
215
|
- !ruby/object:Gem::Version
|
204
216
|
version: '0'
|
205
217
|
requirements: []
|
206
218
|
rubyforge_project: sunspot
|
207
|
-
rubygems_version:
|
219
|
+
rubygems_version: 1.8.25
|
208
220
|
signing_key:
|
209
|
-
specification_version:
|
221
|
+
specification_version: 3
|
210
222
|
summary: Rails integration for the Sunspot Solr search library
|
211
223
|
test_files:
|
212
224
|
- spec/configuration_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: e4265b8bc7f396dcf434243ff31d073722ce37e4
|
4
|
-
data.tar.gz: 6a31e3de9ff96687f791fbca0ff71b29644a3b7e
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 476e1c959c213af1972a51abbd779a535d6b698544dc3a93348c4825433819b441cc082736ccbc73f44043ddfe5493f90cb0e963b0669e35b03d050322930516
|
7
|
-
data.tar.gz: e0afd66ab79b43f53df67f4434dface8feaed30185b2f3b21e4d150c6ffdb60ef63ba44f52c0ba6e3f35cdfb7aec927775c23ef19bd3c42494eb87e727ed954c
|