thinking-sphinx 5.2.0 → 5.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +117 -51
- data/Appraisals +6 -0
- data/CHANGELOG.markdown +39 -0
- data/README.textile +8 -6
- data/bin/loadsphinx +5 -0
- data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +5 -1
- data/lib/thinking_sphinx/active_record.rb +2 -0
- data/lib/thinking_sphinx/callbacks/appender.rb +7 -3
- data/lib/thinking_sphinx/railtie.rb +19 -11
- data/lib/thinking_sphinx/search/stale_ids_exception.rb +2 -1
- data/lib/thinking_sphinx/search.rb +1 -1
- data/lib/thinking_sphinx/sinatra.rb +1 -1
- data/lib/thinking_sphinx/test.rb +1 -1
- data/lib/thinking_sphinx.rb +1 -5
- data/spec/acceptance/attribute_access_spec.rb +10 -2
- data/spec/acceptance/paginating_search_results_spec.rb +18 -2
- data/spec/acceptance/searching_with_filters_spec.rb +3 -3
- data/spec/acceptance/sql_deltas_spec.rb +1 -1
- data/spec/acceptance/support/sphinx_controller.rb +6 -4
- data/spec/thinking_sphinx/active_record/index_spec.rb +3 -1
- data/thinking-sphinx.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4829363e45789cd8824b01645737455277dff8ce8d3ab4dd7ea9cd6bd748179b
|
4
|
+
data.tar.gz: c605d34504bef55fcb03d92d42e86348296689697df8fc0cd0fc2fb36ac7f097
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e768c63a2df5057432a0e28ab5fdb335cd28cf47fe3f2ac115e34eb7c10b4abe62721543c36ffe29aeaca013434fb069262b9fda5d752b2396f2df43d0d1c17
|
7
|
+
data.tar.gz: 5ab46830963db408b4789b5c3a694cd13b6c0cece4be23b23e68e589d4e54561c1c597ffa2b579324fa3e825a335cc611ecde17cc9d4e13f0117f6cd31a6b4fc
|
data/.circleci/config.yml
CHANGED
@@ -7,77 +7,128 @@ workflows:
|
|
7
7
|
test:
|
8
8
|
jobs:
|
9
9
|
- test:
|
10
|
-
name: "Sphinx 2.2
|
11
|
-
database: mysql2
|
10
|
+
name: "Sphinx 2.2"
|
12
11
|
sphinx_version: 2.2.11
|
13
12
|
sphinx_engine: sphinx
|
14
13
|
debian: jessie
|
15
14
|
ruby: '2.4.6'
|
16
|
-
- test:
|
17
|
-
name: "Sphinx 2.2.11 with PostgreSQL"
|
18
|
-
database: postgresql
|
19
|
-
sphinx_version: 2.2.11
|
20
|
-
sphinx_engine: sphinx
|
21
|
-
debian: jessie
|
22
|
-
ruby: '2.4.6'
|
23
|
-
- test:
|
24
|
-
name: "Sphinx 3.3.1 with MySQL"
|
25
|
-
database: mysql2
|
26
|
-
sphinx_version: 3.3.1
|
27
|
-
sphinx_engine: sphinx
|
28
|
-
debian: buster
|
29
|
-
matrix:
|
30
|
-
parameters:
|
31
|
-
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2', '3.0.0' ]
|
32
|
-
# - test:
|
33
|
-
# database: postgresql
|
34
|
-
# sphinx_version: 3.3.1
|
35
|
-
# sphinx_engine: sphinx
|
36
|
-
# matrix:
|
37
|
-
# parameters:
|
38
|
-
# ruby: [ '2.4', '2.5', '2.6', '2.7' ]
|
39
|
-
- test:
|
40
|
-
name: "Manticore 2.8.2 with MySQL"
|
41
|
-
database: mysql2
|
42
|
-
sphinx_version: 2.8.2
|
43
|
-
sphinx_engine: manticore
|
44
|
-
debian: stretch
|
45
15
|
matrix:
|
46
16
|
parameters:
|
47
|
-
|
17
|
+
database: [ 'mysql2', 'postgresql' ]
|
18
|
+
rails: [ '4_2', '5_0', '5_1', '5_2' ]
|
48
19
|
- test:
|
49
|
-
name: "
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
debian: stretch
|
20
|
+
name: "Sphinx 3.4"
|
21
|
+
sphinx_version: 3.4.1
|
22
|
+
sphinx_engine: sphinx
|
23
|
+
debian: buster
|
54
24
|
matrix:
|
55
25
|
parameters:
|
56
|
-
|
26
|
+
database: [ 'mysql2' ]
|
27
|
+
ruby: [ '2.4.10', '2.5.9', '2.6.9', '2.7.5', '3.0.3' ]
|
28
|
+
rails: [ '4_2', '5_0', '5_1', '5_2' ]
|
29
|
+
exclude:
|
30
|
+
- rails: '4_2'
|
31
|
+
ruby: '2.5.9'
|
32
|
+
- rails: '4_2'
|
33
|
+
ruby: '2.6.9'
|
34
|
+
- rails: '4_2'
|
35
|
+
ruby: '2.7.5'
|
36
|
+
- rails: '4_2'
|
37
|
+
ruby: '3.0.3'
|
38
|
+
- rails: '5_0'
|
39
|
+
ruby: '3.0.3'
|
40
|
+
- rails: '5_1'
|
41
|
+
ruby: '3.0.3'
|
42
|
+
- rails: '5_2'
|
43
|
+
ruby: '3.0.3'
|
44
|
+
- rails: '6_0'
|
45
|
+
ruby: '2.4.10'
|
46
|
+
- rails: '6_1'
|
47
|
+
ruby: '2.4.10'
|
48
|
+
- rails: '7_0'
|
49
|
+
ruby: '2.4.10'
|
50
|
+
- rails: '7_0'
|
51
|
+
ruby: '2.5.9'
|
52
|
+
- rails: '7_0'
|
53
|
+
ruby: '2.6.9'
|
57
54
|
- test:
|
58
|
-
name: "Manticore 3.5
|
59
|
-
database: mysql2
|
55
|
+
name: "Manticore 3.5"
|
60
56
|
sphinx_version: 3.5.4
|
61
57
|
sphinx_engine: manticore
|
62
58
|
debian: buster
|
63
59
|
matrix:
|
64
60
|
parameters:
|
65
|
-
|
61
|
+
database: [ 'mysql2', 'postgresql' ]
|
62
|
+
ruby: [ '2.4.10', '2.5.9', '2.6.9', '2.7.5', '3.0.3' ]
|
63
|
+
rails: [ '4_2', '5_0', '5_1', '5_2' ]
|
64
|
+
exclude:
|
65
|
+
- rails: '4_2'
|
66
|
+
ruby: '2.5.9'
|
67
|
+
- rails: '4_2'
|
68
|
+
ruby: '2.6.9'
|
69
|
+
- rails: '4_2'
|
70
|
+
ruby: '2.7.5'
|
71
|
+
- rails: '4_2'
|
72
|
+
ruby: '3.0.3'
|
73
|
+
- rails: '5_0'
|
74
|
+
ruby: '3.0.3'
|
75
|
+
- rails: '5_1'
|
76
|
+
ruby: '3.0.3'
|
77
|
+
- rails: '5_2'
|
78
|
+
ruby: '3.0.3'
|
79
|
+
- rails: '6_0'
|
80
|
+
ruby: '2.4.10'
|
81
|
+
- rails: '6_1'
|
82
|
+
ruby: '2.4.10'
|
83
|
+
- rails: '7_0'
|
84
|
+
ruby: '2.4.10'
|
85
|
+
- rails: '7_0'
|
86
|
+
ruby: '2.5.9'
|
87
|
+
- rails: '7_0'
|
88
|
+
ruby: '2.6.9'
|
66
89
|
- test:
|
67
|
-
name: "Manticore
|
68
|
-
|
69
|
-
sphinx_version: 3.5.4
|
90
|
+
name: "Manticore 4.0"
|
91
|
+
sphinx_version: 4.0.2
|
70
92
|
sphinx_engine: manticore
|
71
93
|
debian: buster
|
72
94
|
matrix:
|
73
95
|
parameters:
|
74
|
-
|
96
|
+
database: [ 'mysql2', 'postgresql' ]
|
97
|
+
ruby: [ '2.4.10', '2.5.9', '2.6.9', '2.7.5', '3.0.3' ]
|
98
|
+
rails: [ '4_2', '5_0', '5_1', '5_2' ]
|
99
|
+
exclude:
|
100
|
+
- rails: '4_2'
|
101
|
+
ruby: '2.5.9'
|
102
|
+
- rails: '4_2'
|
103
|
+
ruby: '2.6.9'
|
104
|
+
- rails: '4_2'
|
105
|
+
ruby: '2.7.5'
|
106
|
+
- rails: '4_2'
|
107
|
+
ruby: '3.0.3'
|
108
|
+
- rails: '5_0'
|
109
|
+
ruby: '3.0.3'
|
110
|
+
- rails: '5_1'
|
111
|
+
ruby: '3.0.3'
|
112
|
+
- rails: '5_2'
|
113
|
+
ruby: '3.0.3'
|
114
|
+
- rails: '6_0'
|
115
|
+
ruby: '2.4.10'
|
116
|
+
- rails: '6_1'
|
117
|
+
ruby: '2.4.10'
|
118
|
+
- rails: '7_0'
|
119
|
+
ruby: '2.4.10'
|
120
|
+
- rails: '7_0'
|
121
|
+
ruby: '2.5.9'
|
122
|
+
- rails: '7_0'
|
123
|
+
ruby: '2.6.9'
|
75
124
|
|
76
125
|
jobs:
|
77
126
|
test:
|
78
127
|
parameters:
|
79
128
|
ruby:
|
80
129
|
type: string
|
130
|
+
rails:
|
131
|
+
type: string
|
81
132
|
database:
|
82
133
|
type: string
|
83
134
|
sphinx_version:
|
@@ -108,14 +159,14 @@ jobs:
|
|
108
159
|
|
109
160
|
- restore_cache:
|
110
161
|
keys:
|
111
|
-
- v1-dependencies-<< parameters.ruby >>
|
162
|
+
- v1-dependencies-<< parameters.ruby >>-<< parameters.rails >>
|
112
163
|
|
113
164
|
- run:
|
114
165
|
name: install bundler
|
115
166
|
command: |
|
116
|
-
if [ "<< parameters.ruby >>" == "2.7.
|
167
|
+
if [ "<< parameters.ruby >>" == "2.7.5" ]; then
|
117
168
|
export BUNDLER_VERSION=2.1.4
|
118
|
-
elif [ "<< parameters.ruby >>" == "3.0.
|
169
|
+
elif [ "<< parameters.ruby >>" == "3.0.3" ]; then
|
119
170
|
export BUNDLER_VERSION=2.1.4
|
120
171
|
else
|
121
172
|
export BUNDLER_VERSION=1.17.3
|
@@ -131,12 +182,22 @@ jobs:
|
|
131
182
|
|
132
183
|
- run:
|
133
184
|
name: set up appraisal
|
134
|
-
command: bundle exec appraisal
|
185
|
+
command: bundle exec appraisal generate
|
186
|
+
|
187
|
+
- run:
|
188
|
+
name: update gems
|
189
|
+
environment:
|
190
|
+
BUNDLE_GEMFILE: "./gemfiles/rails_<< parameters.rails >>.gemfile"
|
191
|
+
command: |
|
192
|
+
if [[ -f $BUNDLE_GEMFILE ]]
|
193
|
+
then
|
194
|
+
bundle update
|
195
|
+
fi
|
135
196
|
|
136
197
|
- save_cache:
|
137
198
|
paths:
|
138
199
|
- ./vendor/bundle
|
139
|
-
key: v1-dependencies-<< parameters.ruby >>
|
200
|
+
key: v1-dependencies-<< parameters.ruby >>-<< parameters.rails >>
|
140
201
|
|
141
202
|
- run:
|
142
203
|
name: set up sphinx
|
@@ -149,4 +210,9 @@ jobs:
|
|
149
210
|
DATABASE: << parameters.database >>
|
150
211
|
SPHINX_VERSION: << parameters.sphinx_version >>
|
151
212
|
SPHINX_ENGINE: << parameters.sphinx_engine >>
|
152
|
-
|
213
|
+
BUNDLE_GEMFILE: "./gemfiles/rails_<< parameters.rails >>.gemfile"
|
214
|
+
command: |
|
215
|
+
if [[ -f $BUNDLE_GEMFILE ]]
|
216
|
+
then
|
217
|
+
bundle exec rspec
|
218
|
+
fi
|
data/Appraisals
CHANGED
@@ -39,3 +39,9 @@ appraise 'rails_6_1' do
|
|
39
39
|
gem 'mysql2', '~> 0.5.0', :platform => :ruby
|
40
40
|
gem 'pg', '~> 1.0', :platform => :ruby
|
41
41
|
end if RUBY_PLATFORM != 'java' && RUBY_VERSION.to_f >= 2.5
|
42
|
+
|
43
|
+
appraise 'rails_7_0' do
|
44
|
+
gem 'rails', '~> 7.0.0'
|
45
|
+
gem 'mysql2', '~> 0.5.0', :platform => :ruby
|
46
|
+
gem 'pg', '~> 1.0', :platform => :ruby
|
47
|
+
end if RUBY_PLATFORM != 'java' && RUBY_VERSION.to_f >= 2.7
|
data/CHANGELOG.markdown
CHANGED
@@ -2,6 +2,45 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project (at least, from v3.0.0 onwards) are documented in this file.
|
4
4
|
|
5
|
+
## 5.4.0 - 2021-12-21
|
6
|
+
|
7
|
+
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.4.0)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
* Rails 7 support, including contributions from @anthonyshull in [#1205](https://github.com/pat/thinking-sphinx/pull/1205).
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
|
15
|
+
* Confirmed support by testing against Manticore 4.0 and Sphinx 3.4.
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
* Include instance_exec in ThinkingSphinx::Search::CORE_METHODS by @jdelStrother in [#1210](https://github.com/pat/thinking-sphinx/pull/1210).
|
20
|
+
* Use File.exist? instead of the deprecated File.exists? ([#1211](https://github.com/pat/thinking-sphinx/issues/1211)).
|
21
|
+
|
22
|
+
## 5.3.0 - 2021-08-19
|
23
|
+
|
24
|
+
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.3.0)
|
25
|
+
|
26
|
+
### Changed
|
27
|
+
|
28
|
+
* StaleIdsExceptions now include a URL in their error message with recommendations on how to resolve the problem.
|
29
|
+
* Fire real-time callbacks on `after_commit` (including deletions) to ensure data is fully persisted to the database before updating Sphinx. More details in [#1204](https://github.com/pat/thinking-sphinx/pull/1204).
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
|
33
|
+
* Ensure Thinking Sphinx's ActiveRecord components are loaded by either Rails' after_initialise hook or ActiveSupport's on_load notification, because the order of these two events are not consistent.
|
34
|
+
* Remove `app/indices` from eager_load_paths in Rails 4.2 and 5, to match the behaviour in 6.
|
35
|
+
|
36
|
+
## 5.2.1 - 2021-08-09
|
37
|
+
|
38
|
+
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.2.1)
|
39
|
+
|
40
|
+
### Fixed
|
41
|
+
|
42
|
+
* Ensure ActiveRecord components are loaded for rake tasks, but only after the Rails application has initialised. More details in [#1199](https://github.com/pat/thinking-sphinx/issues/1199).
|
43
|
+
|
5
44
|
## 5.2.0 - 2021-06-12
|
6
45
|
|
7
46
|
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.2.0)
|
data/README.textile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
h1. Thinking Sphinx
|
2
2
|
|
3
|
-
Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v5.
|
3
|
+
Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v5.4.0.
|
4
4
|
|
5
5
|
h2. Upgrading
|
6
6
|
|
@@ -14,7 +14,7 @@ It's a gem, so install it like you would any other gem. You will also need to sp
|
|
14
14
|
|
15
15
|
<pre><code>gem 'mysql2', '~> 0.4', :platform => :ruby
|
16
16
|
gem 'jdbc-mysql', '~> 5.1.35', :platform => :jruby
|
17
|
-
gem 'thinking-sphinx', '~> 5.
|
17
|
+
gem 'thinking-sphinx', '~> 5.4'</code></pre>
|
18
18
|
|
19
19
|
The MySQL gems mentioned are required for connecting to Sphinx, so please include it even when you're using PostgreSQL for your database.
|
20
20
|
|
@@ -31,8 +31,8 @@ The current release of Thinking Sphinx works with the following versions of its
|
|
31
31
|
|_. Library |_. Minimum |_. Tested Against |
|
32
32
|
| Ruby | v2.4 | v2.4, v2.5, v2.6, v2.7, v3.0 |
|
33
33
|
| Sphinx | v2.2.11 | v2.2.11, v3.3.1 |
|
34
|
-
| Manticore | v2.8 |
|
35
|
-
| ActiveRecord | v4.2 | v4.2..
|
34
|
+
| Manticore | v2.8 | v3.5, v4.0 |
|
35
|
+
| ActiveRecord | v4.2 | v4.2..v7.0 |
|
36
36
|
|
37
37
|
It _might_ work with older versions of Ruby, but it's highly recommended to update to a supported release.
|
38
38
|
|
@@ -40,7 +40,9 @@ It should also work with JRuby, but the test environment for that in CI has been
|
|
40
40
|
|
41
41
|
h3. Sphinx or Manticore
|
42
42
|
|
43
|
-
|
43
|
+
If you're using Sphinx, v2.2.11 is recommended even though it's quite old, as it works well with PostgreSQL databases (but if you're using MySQL - or real-time indices - then v3.3.1 should also be fine).
|
44
|
+
|
45
|
+
If you're opting for Manticore instead, v2.8 or newer works, but v3 or newer is recommended as that's what is actively tested against.
|
44
46
|
|
45
47
|
h3. Rails and ActiveRecord
|
46
48
|
|
@@ -79,4 +81,4 @@ You can then run the unit tests with @rake spec:unit@, the acceptance tests with
|
|
79
81
|
|
80
82
|
h2. Licence
|
81
83
|
|
82
|
-
Copyright (c) 2007-
|
84
|
+
Copyright (c) 2007-2021, Thinking Sphinx is developed and maintained by Pat Allan, and is released under the open MIT Licence. Many thanks to "all who have contributed patches":https://github.com/pat/thinking-sphinx/contributors.
|
data/bin/loadsphinx
CHANGED
@@ -28,6 +28,9 @@ load_sphinx () {
|
|
28
28
|
3.3.1)
|
29
29
|
url="http://sphinxsearch.com/files/sphinx-3.3.1-b72d67b-linux-amd64.tar.gz"
|
30
30
|
format="gz";;
|
31
|
+
3.4.1)
|
32
|
+
url="http://sphinxsearch.com/files/sphinx-3.4.1-efbcc65-linux-amd64.tar.gz"
|
33
|
+
format="gz";;
|
31
34
|
*)
|
32
35
|
echo "No Sphinx version $version available"
|
33
36
|
exit 1;;
|
@@ -64,6 +67,8 @@ load_manticore () {
|
|
64
67
|
url="https://github.com/manticoresoftware/manticoresearch/releases/download/3.4.2/manticore_3.4.2-200410-6903305-release.xenial_amd64-bin.deb";;
|
65
68
|
3.5.4)
|
66
69
|
url="https://repo.manticoresearch.com/repository/manticoresearch_buster/pool/m/manticore/manticore_3.5.4-201211-13f8d08d_amd64.deb";;
|
70
|
+
4.0.2)
|
71
|
+
url="https://repo.manticoresearch.com/repository/manticoresearch_buster/pool/m/manticore/manticore_4.0.2-210921-af497f245_amd64.deb";;
|
67
72
|
*)
|
68
73
|
echo "No Manticore version $version available"
|
69
74
|
exit 1;;
|
@@ -3,7 +3,11 @@
|
|
3
3
|
class ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks <
|
4
4
|
ThinkingSphinx::Callbacks
|
5
5
|
|
6
|
-
callbacks :after_destroy, :after_rollback
|
6
|
+
callbacks :after_commit, :after_destroy, :after_rollback
|
7
|
+
|
8
|
+
def after_commit
|
9
|
+
delete_from_sphinx
|
10
|
+
end
|
7
11
|
|
8
12
|
def after_destroy
|
9
13
|
delete_from_sphinx
|
@@ -40,3 +40,5 @@ require 'thinking_sphinx/active_record/depolymorph/conditions_reflection'
|
|
40
40
|
require 'thinking_sphinx/active_record/depolymorph/overridden_reflection'
|
41
41
|
require 'thinking_sphinx/active_record/depolymorph/scoped_reflection'
|
42
42
|
require 'thinking_sphinx/active_record/filter_reflection'
|
43
|
+
|
44
|
+
ActiveRecord::Base.include ThinkingSphinx::ActiveRecord::Base
|
@@ -24,7 +24,10 @@ class ThinkingSphinx::Callbacks::Appender
|
|
24
24
|
attr_reader :model, :reference, :options, :block
|
25
25
|
|
26
26
|
def add_core_callbacks
|
27
|
-
model.
|
27
|
+
model.after_commit(
|
28
|
+
ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks,
|
29
|
+
on: :destroy
|
30
|
+
)
|
28
31
|
end
|
29
32
|
|
30
33
|
def add_delta_callbacks
|
@@ -40,8 +43,9 @@ class ThinkingSphinx::Callbacks::Appender
|
|
40
43
|
end
|
41
44
|
|
42
45
|
def add_real_time_callbacks
|
43
|
-
model.
|
44
|
-
reference, path, &block
|
46
|
+
model.after_commit(
|
47
|
+
ThinkingSphinx::RealTime.callback_for(reference, path, &block),
|
48
|
+
on: [:create, :update]
|
45
49
|
)
|
46
50
|
end
|
47
51
|
|
@@ -5,26 +5,34 @@ class ThinkingSphinx::Railtie < Rails::Railtie
|
|
5
5
|
ThinkingSphinx::Configuration.reset
|
6
6
|
end
|
7
7
|
|
8
|
+
config.after_initialize do
|
9
|
+
require 'thinking_sphinx/active_record'
|
10
|
+
end
|
11
|
+
|
8
12
|
initializer 'thinking_sphinx.initialisation' do
|
9
13
|
ActiveSupport.on_load(:active_record) do
|
10
14
|
require 'thinking_sphinx/active_record'
|
11
|
-
ActiveRecord::Base.include ThinkingSphinx::ActiveRecord::Base
|
12
15
|
end
|
13
16
|
|
14
|
-
if
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
Rails.application.config.eager_load_paths -=
|
22
|
-
ThinkingSphinx::Configuration.instance.index_paths
|
23
|
-
Rails.application.config.eager_load_paths.freeze
|
17
|
+
if zeitwerk?
|
18
|
+
ActiveSupport::Dependencies.autoload_paths.delete(
|
19
|
+
Rails.root.join("app", "indices").to_s
|
20
|
+
)
|
24
21
|
end
|
22
|
+
|
23
|
+
Rails.application.config.eager_load_paths -=
|
24
|
+
ThinkingSphinx::Configuration.instance.index_paths
|
25
|
+
Rails.application.config.eager_load_paths.freeze
|
25
26
|
end
|
26
27
|
|
27
28
|
rake_tasks do
|
28
29
|
load File.expand_path('../tasks.rb', __FILE__)
|
29
30
|
end
|
31
|
+
|
32
|
+
def zeitwerk?
|
33
|
+
return true if ActiveSupport::VERSION::MAJOR >= 7
|
34
|
+
return false if ActiveSupport::VERSION::MAJOR <= 5
|
35
|
+
|
36
|
+
Rails.application.config.autoloader == :zeitwerk
|
37
|
+
end
|
30
38
|
end
|
@@ -9,6 +9,7 @@ class ThinkingSphinx::Search::StaleIdsException < StandardError
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def message
|
12
|
-
"Record IDs found by Sphinx but not by ActiveRecord : #{ids.join(', ')}"
|
12
|
+
"Record IDs found by Sphinx but not by ActiveRecord : #{ids.join(', ')}\n" \
|
13
|
+
"https://freelancing-gods.com/thinking-sphinx/v5/common_issues.html#record-ids"
|
13
14
|
end
|
14
15
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
class ThinkingSphinx::Search < Array
|
4
4
|
CORE_METHODS = %w( == class class_eval extend frozen? id instance_eval
|
5
|
-
instance_of? instance_values instance_variable_defined?
|
5
|
+
instance_exec instance_of? instance_values instance_variable_defined?
|
6
6
|
instance_variable_get instance_variable_set instance_variables is_a?
|
7
7
|
kind_of? member? method methods nil? object_id respond_to?
|
8
8
|
respond_to_missing? send should should_not type )
|
data/lib/thinking_sphinx/test.rb
CHANGED
data/lib/thinking_sphinx.rb
CHANGED
@@ -101,10 +101,6 @@ require 'thinking_sphinx/distributed'
|
|
101
101
|
require 'thinking_sphinx/logger'
|
102
102
|
require 'thinking_sphinx/real_time'
|
103
103
|
|
104
|
-
if defined?(Rails::Railtie)
|
105
|
-
require 'thinking_sphinx/railtie'
|
106
|
-
else
|
107
|
-
require 'thinking_sphinx/active_record'
|
108
|
-
end
|
104
|
+
require 'thinking_sphinx/railtie' if defined?(Rails::Railtie)
|
109
105
|
|
110
106
|
ThinkingSphinx.before_index_hooks << ThinkingSphinx::Hooks::GuardPresence
|
@@ -20,7 +20,11 @@ describe 'Accessing attributes directly via search results', :live => true do
|
|
20
20
|
search = Book.search 'gods', :select => "*, weight()"
|
21
21
|
search.context[:panes] << ThinkingSphinx::Panes::WeightPane
|
22
22
|
|
23
|
-
|
23
|
+
if ENV["SPHINX_ENGINE"] == "sphinx" && ENV["SPHINX_VERSION"].to_f > 3.3
|
24
|
+
expect(search.first.weight).to eq(20_000.0)
|
25
|
+
else
|
26
|
+
expect(search.first.weight).to eq(2500)
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
it "provides direct access to the weight with alternative primary keys" do
|
@@ -39,7 +43,11 @@ describe 'Accessing attributes directly via search results', :live => true do
|
|
39
43
|
search = Book.search 'gods', :select => "*, weight()"
|
40
44
|
search.masks << ThinkingSphinx::Masks::WeightEnumeratorMask
|
41
45
|
|
42
|
-
|
46
|
+
if ENV["SPHINX_ENGINE"] == "sphinx" && ENV["SPHINX_VERSION"].to_f > 3.3
|
47
|
+
expectations = [[gods, 20_000.0]]
|
48
|
+
else
|
49
|
+
expectations = [[gods, 2500]]
|
50
|
+
end
|
43
51
|
search.each_with_weight do |result, weight|
|
44
52
|
expectation = expectations.shift
|
45
53
|
|
@@ -4,13 +4,22 @@ require 'acceptance/spec_helper'
|
|
4
4
|
|
5
5
|
describe 'Paginating search results', :live => true do
|
6
6
|
it "tracks how many results there are in total" do
|
7
|
+
expect(Article.search.total_entries).to be_zero
|
8
|
+
|
7
9
|
21.times { |number| Article.create :title => "Article #{number}" }
|
8
10
|
index
|
9
11
|
|
10
|
-
|
12
|
+
if ENV["SPHINX_ENGINE"] == "manticore" && ENV["SPHINX_VERSION"].to_f >= 4.0
|
13
|
+
# I suspect this is a bug in Manticore?
|
14
|
+
expect(Article.search.total_entries).to eq(22)
|
15
|
+
else
|
16
|
+
expect(Article.search.total_entries).to eq(21)
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
13
20
|
it "paginates the result set by default" do
|
21
|
+
expect(Article.search.total_entries).to be_zero
|
22
|
+
|
14
23
|
21.times { |number| Article.create :title => "Article #{number}" }
|
15
24
|
index
|
16
25
|
|
@@ -18,9 +27,16 @@ describe 'Paginating search results', :live => true do
|
|
18
27
|
end
|
19
28
|
|
20
29
|
it "tracks the number of pages" do
|
30
|
+
expect(Article.search.total_entries).to be_zero
|
31
|
+
|
21
32
|
21.times { |number| Article.create :title => "Article #{number}" }
|
22
33
|
index
|
23
34
|
|
24
|
-
|
35
|
+
if ENV["SPHINX_ENGINE"] == "manticore" && ENV["SPHINX_VERSION"].to_f >= 4.0
|
36
|
+
# I suspect this is a bug in Manticore?
|
37
|
+
expect(Article.search.total_pages).to eq(1)
|
38
|
+
else
|
39
|
+
expect(Article.search.total_pages).to eq(2)
|
40
|
+
end
|
25
41
|
end
|
26
42
|
end
|
@@ -17,7 +17,7 @@ describe 'Searching with filters', :live => true do
|
|
17
17
|
grave = Book.create! :title => 'The Graveyard Book', :year => 2009
|
18
18
|
index
|
19
19
|
|
20
|
-
expect(Book.search(:with => {:year => [2001, 2005]}).to_a).to
|
20
|
+
expect(Book.search(:with => {:year => [2001, 2005]}).to_a).to match_array([gods, boys])
|
21
21
|
end
|
22
22
|
|
23
23
|
it "limits results by a ranged filter" do
|
@@ -31,7 +31,7 @@ describe 'Searching with filters', :live => true do
|
|
31
31
|
index
|
32
32
|
|
33
33
|
expect(Book.search(:with => {:created_at => 6.days.ago..2.days.ago}).to_a).
|
34
|
-
to
|
34
|
+
to match_array([gods, boys])
|
35
35
|
end
|
36
36
|
|
37
37
|
it "limits results by exclusive filters on single values" do
|
@@ -154,6 +154,6 @@ describe 'Searching with filters', :live => true do
|
|
154
154
|
expect(products.to_a).to eq([pancakes])
|
155
155
|
|
156
156
|
products = Product.search :with => {"options.sugar" => 1}
|
157
|
-
expect(products.to_a).to
|
157
|
+
expect(products.to_a).to match_array([pancakes, waffles])
|
158
158
|
end if JSONColumn.call
|
159
159
|
end
|
@@ -16,7 +16,7 @@ describe 'SQL delta indexing', :live => true do
|
|
16
16
|
)
|
17
17
|
sleep 0.25
|
18
18
|
|
19
|
-
expect(Book.search('Terry Pratchett').to_a).to
|
19
|
+
expect(Book.search('Terry Pratchett').to_a).to match_array([guards, men])
|
20
20
|
end
|
21
21
|
|
22
22
|
it "automatically indexes updated records" do
|
@@ -12,11 +12,13 @@ class SphinxController
|
|
12
12
|
|
13
13
|
ThinkingSphinx::Configuration.reset
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
if Rails::VERSION::MAJOR < 7
|
16
|
+
ActiveSupport::Dependencies.loaded.each do |path|
|
17
|
+
$LOADED_FEATURES.delete "#{path}.rb"
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
+
ActiveSupport::Dependencies.clear
|
21
|
+
end
|
20
22
|
|
21
23
|
config.searchd.mysql41 = 9307
|
22
24
|
config.settings['quiet_deltas'] = true
|
@@ -5,7 +5,9 @@ require 'spec_helper'
|
|
5
5
|
describe ThinkingSphinx::ActiveRecord::Index do
|
6
6
|
let(:index) { ThinkingSphinx::ActiveRecord::Index.new :user }
|
7
7
|
let(:config) { double('config', :settings => {},
|
8
|
-
:indices_location => 'location', :next_offset => 8
|
8
|
+
:indices_location => 'location', :next_offset => 8,
|
9
|
+
:index_set_class => index_set_class) }
|
10
|
+
let(:index_set_class) { double :reference_name => :user }
|
9
11
|
|
10
12
|
before :each do
|
11
13
|
allow(ThinkingSphinx::Configuration).to receive_messages :instance => config
|
data/thinking-sphinx.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thinking-sphinx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat Allan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|