pg_search 2.3.0 → 2.3.5
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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -0
- data/.github/dependabot.yml +11 -0
- data/.jrubyrc +1 -0
- data/.rubocop.yml +85 -7
- data/.travis.yml +14 -22
- data/CHANGELOG.md +41 -16
- data/CODE_OF_CONDUCT.md +76 -0
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/README.md +60 -18
- data/lib/pg_search.rb +4 -6
- data/lib/pg_search/document.rb +1 -1
- data/lib/pg_search/features/dmetaphone.rb +4 -6
- data/lib/pg_search/features/tsearch.rb +13 -12
- data/lib/pg_search/migration/templates/add_pg_search_dmetaphone_support_functions.rb.erb +6 -6
- data/lib/pg_search/migration/templates/create_pg_search_documents.rb.erb +2 -2
- data/lib/pg_search/multisearch.rb +10 -1
- data/lib/pg_search/multisearch/rebuilder.rb +7 -3
- data/lib/pg_search/scope_options.rb +3 -3
- data/lib/pg_search/tasks.rb +2 -1
- data/lib/pg_search/version.rb +1 -1
- data/pg_search.gemspec +11 -7
- data/spec/.rubocop.yml +2 -2
- data/spec/integration/.rubocop.yml +11 -0
- data/spec/integration/associations_spec.rb +17 -56
- data/spec/integration/deprecation_spec.rb +1 -1
- data/spec/integration/pg_search_spec.rb +62 -51
- data/spec/lib/pg_search/configuration/association_spec.rb +8 -6
- data/spec/lib/pg_search/features/dmetaphone_spec.rb +2 -2
- data/spec/lib/pg_search/features/trigram_spec.rb +15 -11
- data/spec/lib/pg_search/features/tsearch_spec.rb +16 -10
- data/spec/lib/pg_search/multisearch/rebuilder_spec.rb +116 -71
- data/spec/lib/pg_search/multisearch_spec.rb +48 -29
- data/spec/lib/pg_search/multisearchable_spec.rb +150 -97
- data/spec/lib/pg_search/normalizer_spec.rb +12 -10
- data/spec/lib/pg_search_spec.rb +66 -55
- data/spec/spec_helper.rb +13 -4
- data/spec/support/database.rb +1 -1
- metadata +78 -17
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require "active_support/deprecation"
|
4
5
|
|
6
|
+
# rubocop:disable RSpec/NestedGroups
|
5
7
|
describe PgSearch::Multisearch do
|
6
|
-
with_table "pg_search_documents",
|
8
|
+
with_table "pg_search_documents", &DOCUMENTS_SCHEMA
|
7
9
|
|
8
10
|
with_model :MultisearchableModel do
|
9
11
|
table do |t|
|
@@ -18,22 +20,22 @@ describe PgSearch::Multisearch do
|
|
18
20
|
|
19
21
|
let(:model) { MultisearchableModel }
|
20
22
|
let(:connection) { model.connection }
|
21
|
-
let(:documents) { double(:documents) }
|
22
23
|
|
23
24
|
describe ".rebuild" do
|
24
25
|
before do
|
25
26
|
model.multisearchable against: :title
|
26
27
|
end
|
27
28
|
|
28
|
-
it "
|
29
|
-
|
29
|
+
it "operates inside a transaction" do
|
30
|
+
allow(model).to receive(:transaction)
|
30
31
|
|
31
|
-
|
32
|
+
described_class.rebuild(model)
|
33
|
+
expect(model).to have_received(:transaction).once
|
32
34
|
end
|
33
35
|
|
34
36
|
describe "cleaning up search documents for this model" do
|
35
37
|
before do
|
36
|
-
connection.execute
|
38
|
+
connection.execute <<~SQL.squish
|
37
39
|
INSERT INTO pg_search_documents
|
38
40
|
(searchable_type, searchable_id, content, created_at, updated_at)
|
39
41
|
VALUES
|
@@ -47,28 +49,39 @@ describe PgSearch::Multisearch do
|
|
47
49
|
end
|
48
50
|
|
49
51
|
context "when clean_up is not passed" do
|
50
|
-
it "
|
51
|
-
|
52
|
+
it "deletes the document for the model" do
|
53
|
+
described_class.rebuild(model)
|
52
54
|
expect(PgSearch::Document.count).to eq(1)
|
53
55
|
expect(PgSearch::Document.first.searchable_type).to eq("Bar")
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
57
59
|
context "when clean_up is true" do
|
58
|
-
|
59
|
-
|
60
|
-
it "should delete the document for the model" do
|
61
|
-
PgSearch::Multisearch.rebuild(model, clean_up)
|
60
|
+
it "deletes the document for the model" do
|
61
|
+
described_class.rebuild(model, clean_up: true)
|
62
62
|
expect(PgSearch::Document.count).to eq(1)
|
63
63
|
expect(PgSearch::Document.first.searchable_type).to eq("Bar")
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
context "when clean_up is false" do
|
68
|
-
|
68
|
+
it "does not delete the document for the model" do
|
69
|
+
described_class.rebuild(model, clean_up: false)
|
70
|
+
expect(PgSearch::Document.count).to eq(2)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "when deprecated_clean_up is true" do
|
75
|
+
it "deletes the document for the model" do
|
76
|
+
ActiveSupport::Deprecation.silence { described_class.rebuild(model, true) }
|
77
|
+
expect(PgSearch::Document.count).to eq(1)
|
78
|
+
expect(PgSearch::Document.first.searchable_type).to eq("Bar")
|
79
|
+
end
|
80
|
+
end
|
69
81
|
|
70
|
-
|
71
|
-
|
82
|
+
context "when deprecated_clean_up is false" do
|
83
|
+
it "does not delete the document for the model" do
|
84
|
+
ActiveSupport::Deprecation.silence { described_class.rebuild(model, false) }
|
72
85
|
expect(PgSearch::Document.count).to eq(2)
|
73
86
|
end
|
74
87
|
end
|
@@ -76,7 +89,7 @@ describe PgSearch::Multisearch do
|
|
76
89
|
context "when the model implements .rebuild_pg_search_documents" do
|
77
90
|
before do
|
78
91
|
def model.rebuild_pg_search_documents
|
79
|
-
connection.execute
|
92
|
+
connection.execute <<~SQL.squish
|
80
93
|
INSERT INTO pg_search_documents
|
81
94
|
(searchable_type, searchable_id, content, created_at, updated_at)
|
82
95
|
VALUES
|
@@ -85,31 +98,36 @@ describe PgSearch::Multisearch do
|
|
85
98
|
end
|
86
99
|
end
|
87
100
|
|
88
|
-
it "
|
89
|
-
|
90
|
-
|
101
|
+
it "calls .rebuild_pg_search_documents and skips the default behavior" do
|
102
|
+
without_partial_double_verification do
|
103
|
+
allow(model).to receive(:rebuild_sql)
|
104
|
+
described_class.rebuild(model)
|
91
105
|
|
92
|
-
|
93
|
-
|
106
|
+
record = PgSearch::Document.find_by(searchable_type: "Baz", searchable_id: 789)
|
107
|
+
expect(model).not_to have_received(:rebuild_sql)
|
108
|
+
expect(record.content).to eq("baz")
|
109
|
+
end
|
94
110
|
end
|
95
111
|
end
|
96
112
|
end
|
97
113
|
|
98
114
|
describe "inserting the new documents" do
|
99
115
|
let!(:new_models) { [] }
|
116
|
+
|
100
117
|
before do
|
101
118
|
new_models << model.create!(title: "Foo", content: "Bar")
|
102
119
|
new_models << model.create!(title: "Baz", content: "Bar")
|
103
120
|
end
|
104
121
|
|
105
|
-
it "
|
106
|
-
|
122
|
+
it "creates new documents for the two models" do
|
123
|
+
described_class.rebuild(model)
|
107
124
|
expect(PgSearch::Document.last(2).map(&:searchable).map(&:title)).to match_array(new_models.map(&:title))
|
108
125
|
end
|
109
126
|
end
|
110
127
|
|
111
128
|
describe "the generated SQL" do
|
112
129
|
let(:now) { Time.now }
|
130
|
+
|
113
131
|
before { allow(Time).to receive(:now).and_return(now) }
|
114
132
|
|
115
133
|
context "with one attribute" do
|
@@ -117,8 +135,8 @@ describe PgSearch::Multisearch do
|
|
117
135
|
model.multisearchable against: [:title]
|
118
136
|
end
|
119
137
|
|
120
|
-
it "
|
121
|
-
expected_sql =
|
138
|
+
it "generates the proper SQL code" do
|
139
|
+
expected_sql = <<~SQL.squish
|
122
140
|
INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
|
123
141
|
SELECT #{connection.quote(model.name)} AS searchable_type,
|
124
142
|
#{model.quoted_table_name}.id AS searchable_id,
|
@@ -133,7 +151,7 @@ describe PgSearch::Multisearch do
|
|
133
151
|
statements = []
|
134
152
|
allow(connection).to receive(:execute) { |sql| statements << sql.strip }
|
135
153
|
|
136
|
-
|
154
|
+
described_class.rebuild(model)
|
137
155
|
|
138
156
|
expect(statements).to include(expected_sql.strip)
|
139
157
|
end
|
@@ -144,8 +162,8 @@ describe PgSearch::Multisearch do
|
|
144
162
|
model.multisearchable against: %i[title content]
|
145
163
|
end
|
146
164
|
|
147
|
-
it "
|
148
|
-
expected_sql =
|
165
|
+
it "generates the proper SQL code" do
|
166
|
+
expected_sql = <<~SQL.squish
|
149
167
|
INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
|
150
168
|
SELECT #{connection.quote(model.name)} AS searchable_type,
|
151
169
|
#{model.quoted_table_name}.id AS searchable_id,
|
@@ -160,7 +178,7 @@ describe PgSearch::Multisearch do
|
|
160
178
|
statements = []
|
161
179
|
allow(connection).to receive(:execute) { |sql| statements << sql.strip }
|
162
180
|
|
163
|
-
|
181
|
+
described_class.rebuild(model)
|
164
182
|
|
165
183
|
expect(statements).to include(expected_sql.strip)
|
166
184
|
end
|
@@ -168,3 +186,4 @@ describe PgSearch::Multisearch do
|
|
168
186
|
end
|
169
187
|
end
|
170
188
|
end
|
189
|
+
# rubocop:enable RSpec/NestedGroups
|
@@ -2,8 +2,9 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
+
# rubocop:disable RSpec/NestedGroups
|
5
6
|
describe PgSearch::Multisearchable do
|
6
|
-
with_table "pg_search_documents",
|
7
|
+
with_table "pg_search_documents", &DOCUMENTS_SCHEMA
|
7
8
|
|
8
9
|
describe "a model that is multisearchable" do
|
9
10
|
with_model :ModelThatIsMultisearchable do
|
@@ -35,7 +36,7 @@ describe PgSearch::Multisearchable do
|
|
35
36
|
belongs_to :multisearchable_parent
|
36
37
|
|
37
38
|
after_destroy do
|
38
|
-
multisearchable_parent.update_attribute(:secret, rand(1000).to_s)
|
39
|
+
multisearchable_parent.update_attribute(:secret, rand(1000).to_s) # rubocop:disable Rails/SkipsModelValidations
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
@@ -45,21 +46,21 @@ describe PgSearch::Multisearchable do
|
|
45
46
|
let(:record) { ModelThatIsMultisearchable.new }
|
46
47
|
|
47
48
|
describe "saving the record" do
|
48
|
-
it "
|
49
|
+
it "creates a PgSearch::Document record" do
|
49
50
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
50
51
|
end
|
51
52
|
|
52
53
|
context "with multisearch disabled" do
|
53
54
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
54
55
|
|
55
|
-
it "
|
56
|
+
it "does not create a PgSearch::Document record" do
|
56
57
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
57
58
|
end
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
61
62
|
describe "the document" do
|
62
|
-
it "
|
63
|
+
it "is associated to the record" do
|
63
64
|
record.save!
|
64
65
|
newest_pg_search_document = PgSearch::Document.last
|
65
66
|
expect(record.pg_search_document).to eq(newest_pg_search_document)
|
@@ -76,20 +77,22 @@ describe PgSearch::Multisearchable do
|
|
76
77
|
|
77
78
|
describe "saving the record" do
|
78
79
|
it "calls save on the pg_search_document" do
|
79
|
-
|
80
|
+
allow(record.pg_search_document).to receive(:save)
|
80
81
|
record.save!
|
82
|
+
expect(record.pg_search_document).to have_received(:save)
|
81
83
|
end
|
82
84
|
|
83
|
-
it "
|
85
|
+
it "does not create a PgSearch::Document record" do
|
84
86
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
85
87
|
end
|
86
88
|
|
87
89
|
context "with multisearch disabled" do
|
88
90
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
89
91
|
|
90
|
-
it "
|
91
|
-
|
92
|
+
it "does not create a PgSearch::Document record" do
|
93
|
+
allow(record.pg_search_document).to receive(:save)
|
92
94
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
95
|
+
expect(record.pg_search_document).not_to have_received(:save)
|
93
96
|
end
|
94
97
|
end
|
95
98
|
end
|
@@ -99,14 +102,14 @@ describe PgSearch::Multisearchable do
|
|
99
102
|
before { record.pg_search_document = nil }
|
100
103
|
|
101
104
|
describe "saving the record" do
|
102
|
-
it "
|
105
|
+
it "creates a PgSearch::Document record" do
|
103
106
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
104
107
|
end
|
105
108
|
|
106
109
|
context "with multisearch disabled" do
|
107
110
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
108
111
|
|
109
|
-
it "
|
112
|
+
it "does not create a PgSearch::Document record" do
|
110
113
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
111
114
|
end
|
112
115
|
end
|
@@ -115,14 +118,14 @@ describe PgSearch::Multisearchable do
|
|
115
118
|
end
|
116
119
|
|
117
120
|
describe "after_destroy" do
|
118
|
-
it "
|
121
|
+
it "removes its document" do
|
119
122
|
record = ModelThatIsMultisearchable.create!
|
120
123
|
document = record.pg_search_document
|
121
124
|
expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
|
122
125
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
123
126
|
end
|
124
127
|
|
125
|
-
it "
|
128
|
+
it "removes its document in case of complex associations" do
|
126
129
|
parent = MultisearchableParent.create!
|
127
130
|
|
128
131
|
MultisearchableChild.create!(multisearchable_parent: parent)
|
@@ -137,9 +140,10 @@ describe PgSearch::Multisearchable do
|
|
137
140
|
end
|
138
141
|
|
139
142
|
describe "populating the searchable text" do
|
140
|
-
let(:record) { ModelThatIsMultisearchable.new }
|
141
143
|
subject { record }
|
142
144
|
|
145
|
+
let(:record) { ModelThatIsMultisearchable.new }
|
146
|
+
|
143
147
|
before do
|
144
148
|
ModelThatIsMultisearchable.multisearchable(multisearchable_options)
|
145
149
|
end
|
@@ -147,36 +151,45 @@ describe PgSearch::Multisearchable do
|
|
147
151
|
context "when searching against a single column" do
|
148
152
|
let(:multisearchable_options) { { against: :some_content } }
|
149
153
|
let(:text) { "foo bar" }
|
154
|
+
|
150
155
|
before do
|
151
|
-
|
156
|
+
without_partial_double_verification do
|
157
|
+
allow(record).to receive(:some_content) { text }
|
158
|
+
end
|
152
159
|
record.save
|
153
160
|
end
|
154
161
|
|
155
162
|
describe '#content' do
|
156
163
|
subject { super().pg_search_document.content }
|
164
|
+
|
157
165
|
it { is_expected.to eq(text) }
|
158
166
|
end
|
159
167
|
end
|
160
168
|
|
161
169
|
context "when searching against multiple columns" do
|
162
|
-
let(:multisearchable_options) { { against: %i[
|
170
|
+
let(:multisearchable_options) { { against: %i[attr_1 attr_2] } }
|
171
|
+
|
163
172
|
before do
|
164
|
-
|
165
|
-
|
173
|
+
without_partial_double_verification do
|
174
|
+
allow(record).to receive(:attr_1).and_return('1')
|
175
|
+
allow(record).to receive(:attr_2).and_return('2')
|
176
|
+
end
|
166
177
|
record.save
|
167
178
|
end
|
168
179
|
|
169
180
|
describe '#content' do
|
170
181
|
subject { super().pg_search_document.content }
|
182
|
+
|
171
183
|
it { is_expected.to eq("1 2") }
|
172
184
|
end
|
173
185
|
end
|
174
186
|
end
|
175
187
|
|
176
188
|
describe "populating the searchable attributes" do
|
177
|
-
let(:record) { ModelThatIsMultisearchable.new }
|
178
189
|
subject { record }
|
179
190
|
|
191
|
+
let(:record) { ModelThatIsMultisearchable.new }
|
192
|
+
|
180
193
|
before do
|
181
194
|
ModelThatIsMultisearchable.multisearchable(multisearchable_options)
|
182
195
|
end
|
@@ -184,27 +197,35 @@ describe PgSearch::Multisearchable do
|
|
184
197
|
context "when searching against a single column" do
|
185
198
|
let(:multisearchable_options) { { against: :some_content } }
|
186
199
|
let(:text) { "foo bar" }
|
200
|
+
|
187
201
|
before do
|
188
|
-
|
202
|
+
without_partial_double_verification do
|
203
|
+
allow(record).to receive(:some_content) { text }
|
204
|
+
end
|
189
205
|
record.save
|
190
206
|
end
|
191
207
|
|
192
208
|
describe '#content' do
|
193
209
|
subject { super().pg_search_document.content }
|
210
|
+
|
194
211
|
it { is_expected.to eq(text) }
|
195
212
|
end
|
196
213
|
end
|
197
214
|
|
198
215
|
context "when searching against multiple columns" do
|
199
|
-
let(:multisearchable_options) { { against: %i[
|
216
|
+
let(:multisearchable_options) { { against: %i[attr_1 attr_2] } }
|
217
|
+
|
200
218
|
before do
|
201
|
-
|
202
|
-
|
219
|
+
without_partial_double_verification do
|
220
|
+
allow(record).to receive(:attr_1).and_return('1')
|
221
|
+
allow(record).to receive(:attr_2).and_return('2')
|
222
|
+
end
|
203
223
|
record.save
|
204
224
|
end
|
205
225
|
|
206
226
|
describe '#content' do
|
207
227
|
subject { super().pg_search_document.content }
|
228
|
+
|
208
229
|
it { is_expected.to eq("1 2") }
|
209
230
|
end
|
210
231
|
end
|
@@ -220,11 +241,14 @@ describe PgSearch::Multisearchable do
|
|
220
241
|
let(:text) { "foo bar" }
|
221
242
|
|
222
243
|
it "sets the attributes" do
|
223
|
-
|
224
|
-
|
225
|
-
.to receive(:create_pg_search_document)
|
226
|
-
.
|
227
|
-
|
244
|
+
without_partial_double_verification do
|
245
|
+
allow(record).to receive(:bar).and_return(text)
|
246
|
+
allow(record).to receive(:create_pg_search_document)
|
247
|
+
record.save
|
248
|
+
expect(record)
|
249
|
+
.to have_received(:create_pg_search_document)
|
250
|
+
.with(content: '', foo: text)
|
251
|
+
end
|
228
252
|
end
|
229
253
|
end
|
230
254
|
|
@@ -239,39 +263,46 @@ describe PgSearch::Multisearchable do
|
|
239
263
|
let(:text) { "foo bar" }
|
240
264
|
|
241
265
|
it "creates the document" do
|
242
|
-
|
243
|
-
|
244
|
-
.to receive(:create_pg_search_document)
|
245
|
-
.
|
246
|
-
|
266
|
+
without_partial_double_verification do
|
267
|
+
allow(record).to receive(:bar?).and_return(false)
|
268
|
+
allow(record).to receive(:create_pg_search_document)
|
269
|
+
record.save
|
270
|
+
expect(record)
|
271
|
+
.to have_received(:create_pg_search_document)
|
272
|
+
.with(content: '')
|
273
|
+
end
|
247
274
|
end
|
248
275
|
|
249
|
-
context "the document is created" do
|
276
|
+
context "when the document is created" do
|
250
277
|
before { record.save }
|
251
278
|
|
252
|
-
context "update_if returns false" do
|
279
|
+
context "when update_if returns false" do
|
253
280
|
before do
|
254
|
-
|
281
|
+
without_partial_double_verification do
|
282
|
+
allow(record).to receive(:bar?).and_return(false)
|
283
|
+
end
|
255
284
|
end
|
256
285
|
|
257
286
|
it "does not update the document" do
|
258
|
-
|
259
|
-
.
|
260
|
-
|
261
|
-
|
287
|
+
without_partial_double_verification do
|
288
|
+
allow(record.pg_search_document).to receive(:update)
|
289
|
+
record.save
|
290
|
+
expect(record.pg_search_document).not_to have_received(:update)
|
291
|
+
end
|
262
292
|
end
|
263
293
|
end
|
264
294
|
|
265
|
-
context "update_if returns true" do
|
295
|
+
context "when update_if returns true" do
|
266
296
|
before do
|
267
|
-
|
297
|
+
without_partial_double_verification do
|
298
|
+
allow(record).to receive(:bar?).and_return(true)
|
299
|
+
end
|
268
300
|
end
|
269
301
|
|
270
302
|
it "updates the document" do
|
271
|
-
|
272
|
-
.to receive(:update)
|
273
|
-
|
303
|
+
allow(record.pg_search_document).to receive(:update)
|
274
304
|
record.save
|
305
|
+
expect(record.pg_search_document).to have_received(:update)
|
275
306
|
end
|
276
307
|
end
|
277
308
|
end
|
@@ -298,14 +329,14 @@ describe PgSearch::Multisearchable do
|
|
298
329
|
context "when the condition is true" do
|
299
330
|
let(:record) { ModelThatIsMultisearchable.new(multisearchable: true) }
|
300
331
|
|
301
|
-
it "
|
332
|
+
it "creates a PgSearch::Document record" do
|
302
333
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
303
334
|
end
|
304
335
|
|
305
336
|
context "with multisearch disabled" do
|
306
337
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
307
338
|
|
308
|
-
it "
|
339
|
+
it "does not create a PgSearch::Document record" do
|
309
340
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
310
341
|
end
|
311
342
|
end
|
@@ -314,7 +345,7 @@ describe PgSearch::Multisearchable do
|
|
314
345
|
context "when the condition is false" do
|
315
346
|
let(:record) { ModelThatIsMultisearchable.new(multisearchable: false) }
|
316
347
|
|
317
|
-
it "
|
348
|
+
it "does not create a PgSearch::Document record" do
|
318
349
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
319
350
|
end
|
320
351
|
end
|
@@ -330,11 +361,12 @@ describe PgSearch::Multisearchable do
|
|
330
361
|
describe "saving the record" do
|
331
362
|
context "when the condition is true" do
|
332
363
|
it "calls save on the pg_search_document" do
|
333
|
-
|
364
|
+
allow(record.pg_search_document).to receive(:save)
|
334
365
|
record.save!
|
366
|
+
expect(record.pg_search_document).to have_received(:save)
|
335
367
|
end
|
336
368
|
|
337
|
-
it "
|
369
|
+
it "does not create a PgSearch::Document record" do
|
338
370
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
339
371
|
end
|
340
372
|
end
|
@@ -343,11 +375,12 @@ describe PgSearch::Multisearchable do
|
|
343
375
|
before { record.multisearchable = false }
|
344
376
|
|
345
377
|
it "calls destroy on the pg_search_document" do
|
346
|
-
|
378
|
+
allow(record.pg_search_document).to receive(:destroy)
|
347
379
|
record.save!
|
380
|
+
expect(record.pg_search_document).to have_received(:destroy)
|
348
381
|
end
|
349
382
|
|
350
|
-
it "
|
383
|
+
it "removes its document" do
|
351
384
|
document = record.pg_search_document
|
352
385
|
expect { record.save! }.to change(PgSearch::Document, :count).by(-1)
|
353
386
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -359,9 +392,10 @@ describe PgSearch::Multisearchable do
|
|
359
392
|
allow(PgSearch).to receive(:multisearch_enabled?).and_return(false)
|
360
393
|
end
|
361
394
|
|
362
|
-
it "
|
363
|
-
|
395
|
+
it "does not create a PgSearch::Document record" do
|
396
|
+
allow(record.pg_search_document).to receive(:save)
|
364
397
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
398
|
+
expect(record.pg_search_document).not_to have_received(:save)
|
365
399
|
end
|
366
400
|
end
|
367
401
|
end
|
@@ -372,14 +406,14 @@ describe PgSearch::Multisearchable do
|
|
372
406
|
|
373
407
|
describe "saving the record" do
|
374
408
|
context "when the condition is true" do
|
375
|
-
it "
|
409
|
+
it "creates a PgSearch::Document record" do
|
376
410
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
377
411
|
end
|
378
412
|
|
379
413
|
context "with multisearch disabled" do
|
380
414
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
381
415
|
|
382
|
-
it "
|
416
|
+
it "does not create a PgSearch::Document record" do
|
383
417
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
384
418
|
end
|
385
419
|
end
|
@@ -388,7 +422,7 @@ describe PgSearch::Multisearchable do
|
|
388
422
|
context "when the condition is false" do
|
389
423
|
before { record.multisearchable = false }
|
390
424
|
|
391
|
-
it "
|
425
|
+
it "does not create a PgSearch::Document record" do
|
392
426
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
393
427
|
end
|
394
428
|
end
|
@@ -399,7 +433,7 @@ describe PgSearch::Multisearchable do
|
|
399
433
|
describe "after_destroy" do
|
400
434
|
let(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
|
401
435
|
|
402
|
-
it "
|
436
|
+
it "removes its document" do
|
403
437
|
document = record.pg_search_document
|
404
438
|
expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
|
405
439
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -426,14 +460,14 @@ describe PgSearch::Multisearchable do
|
|
426
460
|
context "when the condition is false" do
|
427
461
|
let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: false) }
|
428
462
|
|
429
|
-
it "
|
463
|
+
it "creates a PgSearch::Document record" do
|
430
464
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
431
465
|
end
|
432
466
|
|
433
467
|
context "with multisearch disabled" do
|
434
468
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
435
469
|
|
436
|
-
it "
|
470
|
+
it "does not create a PgSearch::Document record" do
|
437
471
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
438
472
|
end
|
439
473
|
end
|
@@ -442,7 +476,7 @@ describe PgSearch::Multisearchable do
|
|
442
476
|
context "when the condition is true" do
|
443
477
|
let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: true) }
|
444
478
|
|
445
|
-
it "
|
479
|
+
it "does not create a PgSearch::Document record" do
|
446
480
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
447
481
|
end
|
448
482
|
end
|
@@ -458,21 +492,26 @@ describe PgSearch::Multisearchable do
|
|
458
492
|
describe "saving the record" do
|
459
493
|
context "when the condition is false" do
|
460
494
|
it "calls save on the pg_search_document" do
|
461
|
-
|
495
|
+
allow(record.pg_search_document).to receive(:save)
|
462
496
|
record.save!
|
497
|
+
expect(record.pg_search_document).to have_received(:save)
|
463
498
|
end
|
464
499
|
|
465
|
-
it "
|
500
|
+
it "does not create a PgSearch::Document record" do
|
466
501
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
467
502
|
end
|
468
503
|
|
469
504
|
context "with multisearch disabled" do
|
470
505
|
before do
|
471
506
|
allow(PgSearch).to receive(:multisearch_enabled?).and_return(false)
|
472
|
-
|
507
|
+
allow(record.pg_search_document).to receive(:save)
|
508
|
+
end
|
509
|
+
|
510
|
+
it "does not call save on the document" do
|
511
|
+
expect(record.pg_search_document).not_to have_received(:save)
|
473
512
|
end
|
474
513
|
|
475
|
-
it "
|
514
|
+
it "does not create a PgSearch::Document record" do
|
476
515
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
477
516
|
end
|
478
517
|
end
|
@@ -482,11 +521,12 @@ describe PgSearch::Multisearchable do
|
|
482
521
|
before { record.not_multisearchable = true }
|
483
522
|
|
484
523
|
it "calls destroy on the pg_search_document" do
|
485
|
-
|
524
|
+
allow(record.pg_search_document).to receive(:destroy)
|
486
525
|
record.save!
|
526
|
+
expect(record.pg_search_document).to have_received(:destroy)
|
487
527
|
end
|
488
528
|
|
489
|
-
it "
|
529
|
+
it "removes its document" do
|
490
530
|
document = record.pg_search_document
|
491
531
|
expect { record.save! }.to change(PgSearch::Document, :count).by(-1)
|
492
532
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -500,7 +540,7 @@ describe PgSearch::Multisearchable do
|
|
500
540
|
|
501
541
|
describe "saving the record" do
|
502
542
|
context "when the condition is false" do
|
503
|
-
it "
|
543
|
+
it "creates a PgSearch::Document record" do
|
504
544
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
505
545
|
end
|
506
546
|
end
|
@@ -508,7 +548,7 @@ describe PgSearch::Multisearchable do
|
|
508
548
|
context "when the condition is true" do
|
509
549
|
before { record.not_multisearchable = true }
|
510
550
|
|
511
|
-
it "
|
551
|
+
it "does not create a PgSearch::Document record" do
|
512
552
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
513
553
|
end
|
514
554
|
end
|
@@ -516,7 +556,7 @@ describe PgSearch::Multisearchable do
|
|
516
556
|
context "with multisearch disabled" do
|
517
557
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
518
558
|
|
519
|
-
it "
|
559
|
+
it "does not create a PgSearch::Document record" do
|
520
560
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
521
561
|
end
|
522
562
|
end
|
@@ -525,7 +565,7 @@ describe PgSearch::Multisearchable do
|
|
525
565
|
end
|
526
566
|
|
527
567
|
describe "after_destroy" do
|
528
|
-
it "
|
568
|
+
it "removes its document" do
|
529
569
|
record = ModelThatIsMultisearchable.create!
|
530
570
|
document = record.pg_search_document
|
531
571
|
expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
|
@@ -555,14 +595,14 @@ describe PgSearch::Multisearchable do
|
|
555
595
|
context "when the condition is true" do
|
556
596
|
let(:record) { ModelThatIsMultisearchable.new(multisearchable: true) }
|
557
597
|
|
558
|
-
it "
|
598
|
+
it "creates a PgSearch::Document record" do
|
559
599
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
560
600
|
end
|
561
601
|
|
562
602
|
context "with multisearch disabled" do
|
563
603
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
564
604
|
|
565
|
-
it "
|
605
|
+
it "does not create a PgSearch::Document record" do
|
566
606
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
567
607
|
end
|
568
608
|
end
|
@@ -571,7 +611,7 @@ describe PgSearch::Multisearchable do
|
|
571
611
|
context "when the condition is false" do
|
572
612
|
let(:record) { ModelThatIsMultisearchable.new(multisearchable: false) }
|
573
613
|
|
574
|
-
it "
|
614
|
+
it "does not create a PgSearch::Document record" do
|
575
615
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
576
616
|
end
|
577
617
|
end
|
@@ -587,21 +627,26 @@ describe PgSearch::Multisearchable do
|
|
587
627
|
describe "saving the record" do
|
588
628
|
context "when the condition is true" do
|
589
629
|
it "calls save on the pg_search_document" do
|
590
|
-
|
630
|
+
allow(record.pg_search_document).to receive(:save)
|
591
631
|
record.save!
|
632
|
+
expect(record.pg_search_document).to have_received(:save)
|
592
633
|
end
|
593
634
|
|
594
|
-
it "
|
635
|
+
it "does not create a PgSearch::Document record" do
|
595
636
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
596
637
|
end
|
597
638
|
|
598
639
|
context "with multisearch disabled" do
|
599
640
|
before do
|
600
641
|
allow(PgSearch).to receive(:multisearch_enabled?).and_return(false)
|
601
|
-
|
642
|
+
allow(record.pg_search_document).to receive(:save)
|
602
643
|
end
|
603
644
|
|
604
|
-
it "
|
645
|
+
it "does not call save on the document" do
|
646
|
+
expect(record.pg_search_document).not_to have_received(:save)
|
647
|
+
end
|
648
|
+
|
649
|
+
it "does not create a PgSearch::Document record" do
|
605
650
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
606
651
|
end
|
607
652
|
end
|
@@ -611,11 +656,12 @@ describe PgSearch::Multisearchable do
|
|
611
656
|
before { record.multisearchable = false }
|
612
657
|
|
613
658
|
it "calls destroy on the pg_search_document" do
|
614
|
-
|
659
|
+
allow(record.pg_search_document).to receive(:destroy)
|
615
660
|
record.save!
|
661
|
+
expect(record.pg_search_document).to have_received(:destroy)
|
616
662
|
end
|
617
663
|
|
618
|
-
it "
|
664
|
+
it "removes its document" do
|
619
665
|
document = record.pg_search_document
|
620
666
|
expect { record.save! }.to change(PgSearch::Document, :count).by(-1)
|
621
667
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -632,7 +678,7 @@ describe PgSearch::Multisearchable do
|
|
632
678
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(true) }
|
633
679
|
|
634
680
|
context "when the condition is true" do
|
635
|
-
it "
|
681
|
+
it "creates a PgSearch::Document record" do
|
636
682
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
637
683
|
end
|
638
684
|
end
|
@@ -640,7 +686,7 @@ describe PgSearch::Multisearchable do
|
|
640
686
|
context "when the condition is false" do
|
641
687
|
before { record.multisearchable = false }
|
642
688
|
|
643
|
-
it "
|
689
|
+
it "does not create a PgSearch::Document record" do
|
644
690
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
645
691
|
end
|
646
692
|
end
|
@@ -649,7 +695,7 @@ describe PgSearch::Multisearchable do
|
|
649
695
|
context "with multisearch disabled" do
|
650
696
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
651
697
|
|
652
|
-
it "
|
698
|
+
it "does not create a PgSearch::Document record" do
|
653
699
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
654
700
|
end
|
655
701
|
end
|
@@ -660,7 +706,7 @@ describe PgSearch::Multisearchable do
|
|
660
706
|
describe "after_destroy" do
|
661
707
|
let(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
|
662
708
|
|
663
|
-
it "
|
709
|
+
it "removes its document" do
|
664
710
|
document = record.pg_search_document
|
665
711
|
expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
|
666
712
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -687,7 +733,7 @@ describe PgSearch::Multisearchable do
|
|
687
733
|
context "when the condition is true" do
|
688
734
|
let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: true) }
|
689
735
|
|
690
|
-
it "
|
736
|
+
it "does not create a PgSearch::Document record" do
|
691
737
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
692
738
|
end
|
693
739
|
end
|
@@ -695,14 +741,14 @@ describe PgSearch::Multisearchable do
|
|
695
741
|
context "when the condition is false" do
|
696
742
|
let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: false) }
|
697
743
|
|
698
|
-
it "
|
744
|
+
it "creates a PgSearch::Document record" do
|
699
745
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
700
746
|
end
|
701
747
|
|
702
748
|
context "with multisearch disabled" do
|
703
749
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
704
750
|
|
705
|
-
it "
|
751
|
+
it "does not create a PgSearch::Document record" do
|
706
752
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
707
753
|
end
|
708
754
|
end
|
@@ -721,11 +767,12 @@ describe PgSearch::Multisearchable do
|
|
721
767
|
before { record.not_multisearchable = true }
|
722
768
|
|
723
769
|
it "calls destroy on the pg_search_document" do
|
724
|
-
|
770
|
+
allow(record.pg_search_document).to receive(:destroy)
|
725
771
|
record.save!
|
772
|
+
expect(record.pg_search_document).to have_received(:destroy)
|
726
773
|
end
|
727
774
|
|
728
|
-
it "
|
775
|
+
it "removes its document" do
|
729
776
|
document = record.pg_search_document
|
730
777
|
expect { record.save! }.to change(PgSearch::Document, :count).by(-1)
|
731
778
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -734,21 +781,26 @@ describe PgSearch::Multisearchable do
|
|
734
781
|
|
735
782
|
context "when the condition is false" do
|
736
783
|
it "calls save on the pg_search_document" do
|
737
|
-
|
784
|
+
allow(record.pg_search_document).to receive(:save)
|
738
785
|
record.save!
|
786
|
+
expect(record.pg_search_document).to have_received(:save)
|
739
787
|
end
|
740
788
|
|
741
|
-
it "
|
789
|
+
it "does not create a PgSearch::Document record" do
|
742
790
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
743
791
|
end
|
744
792
|
|
745
793
|
context "with multisearch disabled" do
|
746
794
|
before do
|
747
795
|
allow(PgSearch).to receive(:multisearch_enabled?).and_return(false)
|
748
|
-
|
796
|
+
allow(record.pg_search_document).to receive(:save)
|
797
|
+
end
|
798
|
+
|
799
|
+
it "does not call save on the document" do
|
800
|
+
expect(record.pg_search_document).not_to have_received(:save)
|
749
801
|
end
|
750
802
|
|
751
|
-
it "
|
803
|
+
it "does not create a PgSearch::Document record" do
|
752
804
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
753
805
|
end
|
754
806
|
end
|
@@ -766,20 +818,20 @@ describe PgSearch::Multisearchable do
|
|
766
818
|
context "when the condition is true" do
|
767
819
|
before { record.not_multisearchable = true }
|
768
820
|
|
769
|
-
it "
|
821
|
+
it "does not create a PgSearch::Document record" do
|
770
822
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
771
823
|
end
|
772
824
|
end
|
773
825
|
|
774
826
|
context "when the condition is false" do
|
775
|
-
it "
|
827
|
+
it "creates a PgSearch::Document record" do
|
776
828
|
expect { record.save! }.to change(PgSearch::Document, :count).by(1)
|
777
829
|
end
|
778
830
|
|
779
831
|
context "with multisearch disabled" do
|
780
832
|
before { allow(PgSearch).to receive(:multisearch_enabled?).and_return(false) }
|
781
833
|
|
782
|
-
it "
|
834
|
+
it "does not create a PgSearch::Document record" do
|
783
835
|
expect { record.save! }.not_to change(PgSearch::Document, :count)
|
784
836
|
end
|
785
837
|
end
|
@@ -792,7 +844,7 @@ describe PgSearch::Multisearchable do
|
|
792
844
|
describe "after_destroy" do
|
793
845
|
let(:record) { ModelThatIsMultisearchable.create!(not_multisearchable: false) }
|
794
846
|
|
795
|
-
it "
|
847
|
+
it "removes its document" do
|
796
848
|
document = record.pg_search_document
|
797
849
|
expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
|
798
850
|
expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
@@ -802,3 +854,4 @@ describe PgSearch::Multisearchable do
|
|
802
854
|
end
|
803
855
|
end
|
804
856
|
end
|
857
|
+
# rubocop:enable RSpec/NestedGroups
|