pg_search 2.1.2 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +11 -7
  3. data/.travis.yml +33 -42
  4. data/CHANGELOG.md +140 -112
  5. data/CONTRIBUTING.md +5 -3
  6. data/Gemfile +6 -4
  7. data/LICENSE +1 -1
  8. data/README.md +221 -159
  9. data/Rakefile +3 -5
  10. data/lib/pg_search/configuration/association.rb +2 -0
  11. data/lib/pg_search/configuration/column.rb +2 -0
  12. data/lib/pg_search/configuration/foreign_column.rb +2 -0
  13. data/lib/pg_search/configuration.rb +8 -4
  14. data/lib/pg_search/document.rb +5 -3
  15. data/lib/pg_search/features/dmetaphone.rb +3 -1
  16. data/lib/pg_search/features/feature.rb +4 -2
  17. data/lib/pg_search/features/trigram.rb +31 -5
  18. data/lib/pg_search/features/tsearch.rb +4 -1
  19. data/lib/pg_search/features.rb +2 -0
  20. data/lib/pg_search/migration/dmetaphone_generator.rb +3 -1
  21. data/lib/pg_search/migration/generator.rb +4 -2
  22. data/lib/pg_search/migration/multisearch_generator.rb +2 -1
  23. data/lib/pg_search/migration/templates/create_pg_search_documents.rb.erb +1 -1
  24. data/lib/pg_search/multisearch/rebuilder.rb +7 -3
  25. data/lib/pg_search/multisearch.rb +4 -4
  26. data/lib/pg_search/multisearchable.rb +10 -6
  27. data/lib/pg_search/normalizer.rb +2 -0
  28. data/lib/pg_search/railtie.rb +2 -0
  29. data/lib/pg_search/scope_options.rb +21 -41
  30. data/lib/pg_search/tasks.rb +3 -0
  31. data/lib/pg_search/version.rb +3 -1
  32. data/lib/pg_search.rb +10 -5
  33. data/pg_search.gemspec +8 -7
  34. data/spec/integration/associations_spec.rb +103 -101
  35. data/spec/integration/pagination_spec.rb +9 -7
  36. data/spec/integration/pg_search_spec.rb +266 -255
  37. data/spec/integration/single_table_inheritance_spec.rb +16 -15
  38. data/spec/lib/pg_search/configuration/association_spec.rb +7 -5
  39. data/spec/lib/pg_search/configuration/column_spec.rb +2 -0
  40. data/spec/lib/pg_search/configuration/foreign_column_spec.rb +5 -3
  41. data/spec/lib/pg_search/features/dmetaphone_spec.rb +6 -4
  42. data/spec/lib/pg_search/features/trigram_spec.rb +39 -12
  43. data/spec/lib/pg_search/features/tsearch_spec.rb +23 -21
  44. data/spec/lib/pg_search/multisearch/rebuilder_spec.rb +32 -11
  45. data/spec/lib/pg_search/multisearch_spec.rb +9 -7
  46. data/spec/lib/pg_search/multisearchable_spec.rb +68 -27
  47. data/spec/lib/pg_search/normalizer_spec.rb +7 -5
  48. data/spec/lib/pg_search_spec.rb +33 -31
  49. data/spec/spec_helper.rb +3 -1
  50. data/spec/support/database.rb +16 -20
  51. data/spec/support/with_model.rb +2 -0
  52. metadata +13 -30
  53. data/.rubocop_todo.yml +0 -163
  54. data/Guardfile +0 -6
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PgSearch::Multisearchable do
@@ -11,6 +13,33 @@ describe PgSearch::Multisearchable do
11
13
  end
12
14
  end
13
15
 
16
+ with_model :MultisearchableParent do
17
+ table do |t|
18
+ t.string :secret
19
+ end
20
+
21
+ model do
22
+ include PgSearch
23
+ multisearchable
24
+
25
+ has_many :multisearchable_children, dependent: :destroy
26
+ end
27
+ end
28
+
29
+ with_model :MultisearchableChild do
30
+ table do |t|
31
+ t.belongs_to :multisearchable_parent, index: false
32
+ end
33
+
34
+ model do
35
+ belongs_to :multisearchable_parent
36
+
37
+ after_destroy do
38
+ multisearchable_parent.update_attribute(:secret, rand(1000).to_s)
39
+ end
40
+ end
41
+ end
42
+
14
43
  describe "callbacks" do
15
44
  describe "after_create" do
16
45
  let(:record) { ModelThatIsMultisearchable.new }
@@ -92,6 +121,18 @@ describe PgSearch::Multisearchable do
92
121
  expect { record.destroy }.to change(PgSearch::Document, :count).by(-1)
93
122
  expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
94
123
  end
124
+
125
+ it "should remove its document in case of complex associations" do
126
+ parent = MultisearchableParent.create!
127
+
128
+ MultisearchableChild.create!(multisearchable_parent: parent)
129
+ MultisearchableChild.create!(multisearchable_parent: parent)
130
+
131
+ document = parent.pg_search_document
132
+
133
+ expect { parent.destroy }.to change(PgSearch::Document, :count).by(-1)
134
+ expect { PgSearch::Document.find(document.id) }.to raise_error(ActiveRecord::RecordNotFound)
135
+ end
95
136
  end
96
137
  end
97
138
 
@@ -104,7 +145,7 @@ describe PgSearch::Multisearchable do
104
145
  end
105
146
 
106
147
  context "when searching against a single column" do
107
- let(:multisearchable_options) { {:against => :some_content} }
148
+ let(:multisearchable_options) { { against: :some_content } }
108
149
  let(:text) { "foo bar" }
109
150
  before do
110
151
  allow(record).to receive(:some_content) { text }
@@ -118,7 +159,7 @@ describe PgSearch::Multisearchable do
118
159
  end
119
160
 
120
161
  context "when searching against multiple columns" do
121
- let(:multisearchable_options) { {:against => %i[attr1 attr2]} }
162
+ let(:multisearchable_options) { { against: %i[attr1 attr2] } }
122
163
  before do
123
164
  allow(record).to receive(:attr1) { '1' }
124
165
  allow(record).to receive(:attr2) { '2' }
@@ -141,7 +182,7 @@ describe PgSearch::Multisearchable do
141
182
  end
142
183
 
143
184
  context "when searching against a single column" do
144
- let(:multisearchable_options) { {:against => :some_content} }
185
+ let(:multisearchable_options) { { against: :some_content } }
145
186
  let(:text) { "foo bar" }
146
187
  before do
147
188
  allow(record).to receive(:some_content) { text }
@@ -155,7 +196,7 @@ describe PgSearch::Multisearchable do
155
196
  end
156
197
 
157
198
  context "when searching against multiple columns" do
158
- let(:multisearchable_options) { {:against => %i[attr1 attr2]} }
199
+ let(:multisearchable_options) { { against: %i[attr1 attr2] } }
159
200
  before do
160
201
  allow(record).to receive(:attr1) { '1' }
161
202
  allow(record).to receive(:attr2) { '2' }
@@ -171,7 +212,7 @@ describe PgSearch::Multisearchable do
171
212
  context "with additional_attributes" do
172
213
  let(:multisearchable_options) do
173
214
  {
174
- :additional_attributes => lambda do |record|
215
+ additional_attributes: lambda do |record|
175
216
  { foo: record.bar }
176
217
  end
177
218
  }
@@ -190,7 +231,7 @@ describe PgSearch::Multisearchable do
190
231
  context "when selectively updating" do
191
232
  let(:multisearchable_options) do
192
233
  {
193
- :update_if => lambda do |record|
234
+ update_if: lambda do |record|
194
235
  record.bar?
195
236
  end
196
237
  }
@@ -215,7 +256,7 @@ describe PgSearch::Multisearchable do
215
256
 
216
257
  it "does not update the document" do
217
258
  expect_any_instance_of(PgSearch::Document)
218
- .to_not receive(:update_attributes)
259
+ .to_not receive(:update)
219
260
 
220
261
  record.save
221
262
  end
@@ -228,7 +269,7 @@ describe PgSearch::Multisearchable do
228
269
 
229
270
  it "updates the document" do
230
271
  expect_any_instance_of(PgSearch::Document)
231
- .to receive(:update_attributes)
272
+ .to receive(:update)
232
273
 
233
274
  record.save
234
275
  end
@@ -247,7 +288,7 @@ describe PgSearch::Multisearchable do
247
288
 
248
289
  model do
249
290
  include PgSearch
250
- multisearchable :if => ->(record) { record.multisearchable? }
291
+ multisearchable if: ->(record) { record.multisearchable? }
251
292
  end
252
293
  end
253
294
 
@@ -255,7 +296,7 @@ describe PgSearch::Multisearchable do
255
296
  describe "after_create" do
256
297
  describe "saving the record" do
257
298
  context "when the condition is true" do
258
- let(:record) { ModelThatIsMultisearchable.new(:multisearchable => true) }
299
+ let(:record) { ModelThatIsMultisearchable.new(multisearchable: true) }
259
300
 
260
301
  it "should create a PgSearch::Document record" do
261
302
  expect { record.save! }.to change(PgSearch::Document, :count).by(1)
@@ -271,7 +312,7 @@ describe PgSearch::Multisearchable do
271
312
  end
272
313
 
273
314
  context "when the condition is false" do
274
- let(:record) { ModelThatIsMultisearchable.new(:multisearchable => false) }
315
+ let(:record) { ModelThatIsMultisearchable.new(multisearchable: false) }
275
316
 
276
317
  it "should not create a PgSearch::Document record" do
277
318
  expect { record.save! }.not_to change(PgSearch::Document, :count)
@@ -281,7 +322,7 @@ describe PgSearch::Multisearchable do
281
322
  end
282
323
 
283
324
  describe "after_update" do
284
- let(:record) { ModelThatIsMultisearchable.create!(:multisearchable => true) }
325
+ let(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
285
326
 
286
327
  context "when the document is present" do
287
328
  before { expect(record.pg_search_document).to be_present }
@@ -356,7 +397,7 @@ describe PgSearch::Multisearchable do
356
397
  end
357
398
 
358
399
  describe "after_destroy" do
359
- let(:record) { ModelThatIsMultisearchable.create!(:multisearchable => true) }
400
+ let(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
360
401
 
361
402
  it "should remove its document" do
362
403
  document = record.pg_search_document
@@ -375,7 +416,7 @@ describe PgSearch::Multisearchable do
375
416
 
376
417
  model do
377
418
  include PgSearch
378
- multisearchable :unless => ->(record) { record.not_multisearchable? }
419
+ multisearchable unless: ->(record) { record.not_multisearchable? }
379
420
  end
380
421
  end
381
422
 
@@ -383,7 +424,7 @@ describe PgSearch::Multisearchable do
383
424
  describe "after_create" do
384
425
  describe "saving the record" do
385
426
  context "when the condition is false" do
386
- let(:record) { ModelThatIsMultisearchable.new(:not_multisearchable => false) }
427
+ let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: false) }
387
428
 
388
429
  it "should create a PgSearch::Document record" do
389
430
  expect { record.save! }.to change(PgSearch::Document, :count).by(1)
@@ -399,7 +440,7 @@ describe PgSearch::Multisearchable do
399
440
  end
400
441
 
401
442
  context "when the condition is true" do
402
- let(:record) { ModelThatIsMultisearchable.new(:not_multisearchable => true) }
443
+ let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: true) }
403
444
 
404
445
  it "should not create a PgSearch::Document record" do
405
446
  expect { record.save! }.not_to change(PgSearch::Document, :count)
@@ -409,7 +450,7 @@ describe PgSearch::Multisearchable do
409
450
  end
410
451
 
411
452
  describe "after_update" do
412
- let!(:record) { ModelThatIsMultisearchable.create!(:not_multisearchable => false) }
453
+ let!(:record) { ModelThatIsMultisearchable.create!(not_multisearchable: false) }
413
454
 
414
455
  context "when the document is present" do
415
456
  before { expect(record.pg_search_document).to be_present }
@@ -504,7 +545,7 @@ describe PgSearch::Multisearchable do
504
545
 
505
546
  model do
506
547
  include PgSearch
507
- multisearchable :if => :multisearchable?
548
+ multisearchable if: :multisearchable?
508
549
  end
509
550
  end
510
551
 
@@ -512,7 +553,7 @@ describe PgSearch::Multisearchable do
512
553
  describe "after_create" do
513
554
  describe "saving the record" do
514
555
  context "when the condition is true" do
515
- let(:record) { ModelThatIsMultisearchable.new(:multisearchable => true) }
556
+ let(:record) { ModelThatIsMultisearchable.new(multisearchable: true) }
516
557
 
517
558
  it "should create a PgSearch::Document record" do
518
559
  expect { record.save! }.to change(PgSearch::Document, :count).by(1)
@@ -528,7 +569,7 @@ describe PgSearch::Multisearchable do
528
569
  end
529
570
 
530
571
  context "when the condition is false" do
531
- let(:record) { ModelThatIsMultisearchable.new(:multisearchable => false) }
572
+ let(:record) { ModelThatIsMultisearchable.new(multisearchable: false) }
532
573
 
533
574
  it "should not create a PgSearch::Document record" do
534
575
  expect { record.save! }.not_to change(PgSearch::Document, :count)
@@ -538,7 +579,7 @@ describe PgSearch::Multisearchable do
538
579
  end
539
580
 
540
581
  describe "after_update" do
541
- let!(:record) { ModelThatIsMultisearchable.create!(:multisearchable => true) }
582
+ let!(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
542
583
 
543
584
  context "when the document is present" do
544
585
  before { expect(record.pg_search_document).to be_present }
@@ -617,7 +658,7 @@ describe PgSearch::Multisearchable do
617
658
  end
618
659
 
619
660
  describe "after_destroy" do
620
- let(:record) { ModelThatIsMultisearchable.create!(:multisearchable => true) }
661
+ let(:record) { ModelThatIsMultisearchable.create!(multisearchable: true) }
621
662
 
622
663
  it "should remove its document" do
623
664
  document = record.pg_search_document
@@ -636,7 +677,7 @@ describe PgSearch::Multisearchable do
636
677
 
637
678
  model do
638
679
  include PgSearch
639
- multisearchable :unless => :not_multisearchable?
680
+ multisearchable unless: :not_multisearchable?
640
681
  end
641
682
  end
642
683
 
@@ -644,7 +685,7 @@ describe PgSearch::Multisearchable do
644
685
  describe "after_create" do
645
686
  describe "saving the record" do
646
687
  context "when the condition is true" do
647
- let(:record) { ModelThatIsMultisearchable.new(:not_multisearchable => true) }
688
+ let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: true) }
648
689
 
649
690
  it "should not create a PgSearch::Document record" do
650
691
  expect { record.save! }.not_to change(PgSearch::Document, :count)
@@ -652,7 +693,7 @@ describe PgSearch::Multisearchable do
652
693
  end
653
694
 
654
695
  context "when the condition is false" do
655
- let(:record) { ModelThatIsMultisearchable.new(:not_multisearchable => false) }
696
+ let(:record) { ModelThatIsMultisearchable.new(not_multisearchable: false) }
656
697
 
657
698
  it "should create a PgSearch::Document record" do
658
699
  expect { record.save! }.to change(PgSearch::Document, :count).by(1)
@@ -670,7 +711,7 @@ describe PgSearch::Multisearchable do
670
711
  end
671
712
 
672
713
  describe "after_update" do
673
- let!(:record) { ModelThatIsMultisearchable.create!(:not_multisearchable => false) }
714
+ let!(:record) { ModelThatIsMultisearchable.create!(not_multisearchable: false) }
674
715
 
675
716
  context "when the document is present" do
676
717
  before { expect(record.pg_search_document).to be_present }
@@ -749,7 +790,7 @@ describe PgSearch::Multisearchable do
749
790
  end
750
791
 
751
792
  describe "after_destroy" do
752
- let(:record) { ModelThatIsMultisearchable.create!(:not_multisearchable => false) }
793
+ let(:record) { ModelThatIsMultisearchable.create!(not_multisearchable: false) }
753
794
 
754
795
  it "should remove its document" do
755
796
  document = record.pg_search_document
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PgSearch::Normalizer do
@@ -5,7 +7,7 @@ describe PgSearch::Normalizer do
5
7
  context "when config[:ignore] includes :accents" do
6
8
  context "when passed an Arel node" do
7
9
  it "wraps the expression in unaccent()" do
8
- config = double("config", :ignore => [:accents])
10
+ config = double("config", ignore: [:accents])
9
11
  node = Arel::Nodes::NamedFunction.new("foo", [Arel::Nodes.build_quoted("bar")])
10
12
 
11
13
  normalizer = PgSearch::Normalizer.new(config)
@@ -17,7 +19,7 @@ describe PgSearch::Normalizer do
17
19
  allow(PgSearch).to receive(:unaccent_function).and_return("my_unaccent")
18
20
  node = Arel::Nodes::NamedFunction.new("foo", [Arel::Nodes.build_quoted("bar")])
19
21
 
20
- config = double("config", :ignore => [:accents])
22
+ config = double("config", ignore: [:accents])
21
23
 
22
24
  normalizer = PgSearch::Normalizer.new(config)
23
25
  expect(normalizer.add_normalization(node)).to eq("my_unaccent(foo('bar'))")
@@ -27,7 +29,7 @@ describe PgSearch::Normalizer do
27
29
 
28
30
  context "when passed a String" do
29
31
  it "wraps the expression in unaccent()" do
30
- config = double("config", :ignore => [:accents])
32
+ config = double("config", ignore: [:accents])
31
33
 
32
34
  normalizer = PgSearch::Normalizer.new(config)
33
35
  expect(normalizer.add_normalization("foo")).to eq("unaccent(foo)")
@@ -37,7 +39,7 @@ describe PgSearch::Normalizer do
37
39
  it "wraps the expression in that function" do
38
40
  allow(PgSearch).to receive(:unaccent_function).and_return("my_unaccent")
39
41
 
40
- config = double("config", :ignore => [:accents])
42
+ config = double("config", ignore: [:accents])
41
43
 
42
44
  normalizer = PgSearch::Normalizer.new(config)
43
45
  expect(normalizer.add_normalization("foo")).to eq("my_unaccent(foo)")
@@ -48,7 +50,7 @@ describe PgSearch::Normalizer do
48
50
 
49
51
  context "when config[:ignore] does not include :accents" do
50
52
  it "passes the expression through" do
51
- config = double("config", :ignore => [])
53
+ config = double("config", ignore: [])
52
54
 
53
55
  normalizer = PgSearch::Normalizer.new(config)
54
56
  expect(normalizer.add_normalization("foo")).to eq("foo")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  # For AR 5 and greater, the association reflection's cache needs be cleared
@@ -30,7 +32,7 @@ describe PgSearch do
30
32
  end
31
33
 
32
34
  context "with PgSearch.multisearch_options set to a Hash" do
33
- before { allow(PgSearch).to receive(:multisearch_options).and_return(:using => :dmetaphone) }
35
+ before { allow(PgSearch).to receive(:multisearch_options).and_return(using: :dmetaphone) }
34
36
  subject do
35
37
  PgSearch::Document.clear_searchable_cache
36
38
  PgSearch.multisearch(query).map(&:searchable)
@@ -42,11 +44,11 @@ describe PgSearch do
42
44
  end
43
45
  model do
44
46
  include PgSearch
45
- multisearchable :against => :title
47
+ multisearchable against: :title
46
48
  end
47
49
  end
48
50
 
49
- let!(:soundalike_record) { MultisearchableModel.create!(:title => 'foning') }
51
+ let!(:soundalike_record) { MultisearchableModel.create!(title: 'foning') }
50
52
  let(:query) { "Phoning" }
51
53
  it { is_expected.to include(soundalike_record) }
52
54
  end
@@ -61,9 +63,9 @@ describe PgSearch do
61
63
  allow(PgSearch).to receive(:multisearch_options) do
62
64
  lambda do |query, soundalike|
63
65
  if soundalike
64
- {:using => :dmetaphone, :query => query}
66
+ { using: :dmetaphone, query: query }
65
67
  else
66
- {:query => query}
68
+ { query: query }
67
69
  end
68
70
  end
69
71
  end
@@ -75,11 +77,11 @@ describe PgSearch do
75
77
  end
76
78
  model do
77
79
  include PgSearch
78
- multisearchable :against => :title
80
+ multisearchable against: :title
79
81
  end
80
82
  end
81
83
 
82
- let!(:soundalike_record) { MultisearchableModel.create!(:title => 'foning') }
84
+ let!(:soundalike_record) { MultisearchableModel.create!(title: 'foning') }
83
85
  let(:query) { "Phoning" }
84
86
 
85
87
  context "with soundalike true" do
@@ -105,7 +107,7 @@ describe PgSearch do
105
107
  before do
106
108
  searchable_subclass_model = Class.new(SuperclassModel) do
107
109
  include PgSearch
108
- multisearchable :against => :content
110
+ multisearchable against: :content
109
111
  end
110
112
  stub_const("SearchableSubclassModel", searchable_subclass_model)
111
113
  stub_const("AnotherSearchableSubclassModel", searchable_subclass_model)
@@ -113,13 +115,13 @@ describe PgSearch do
113
115
  end
114
116
 
115
117
  it "returns only results for that subclass" do
116
- included = SearchableSubclassModel.create!(:content => "foo bar")
118
+ included = SearchableSubclassModel.create!(content: "foo bar")
117
119
 
118
- SearchableSubclassModel.create!(:content => "baz")
119
- SuperclassModel.create!(:content => "foo bar")
120
- SuperclassModel.create!(:content => "baz")
121
- NonSearchableSubclassModel.create!(:content => "foo bar")
122
- NonSearchableSubclassModel.create!(:content => "baz")
120
+ SearchableSubclassModel.create!(content: "baz")
121
+ SuperclassModel.create!(content: "foo bar")
122
+ SuperclassModel.create!(content: "baz")
123
+ NonSearchableSubclassModel.create!(content: "foo bar")
124
+ NonSearchableSubclassModel.create!(content: "baz")
123
125
 
124
126
  expect(SuperclassModel.count).to be 6
125
127
  expect(SearchableSubclassModel.count).to be 2
@@ -132,7 +134,7 @@ describe PgSearch do
132
134
  end
133
135
 
134
136
  it "updates an existing STI model does not create a new pg_search document" do
135
- model = SearchableSubclassModel.create!(:content => "foo bar")
137
+ model = SearchableSubclassModel.create!(content: "foo bar")
136
138
  expect(SearchableSubclassModel.count).to eq(1)
137
139
  # We fetch the model from the database again otherwise
138
140
  # the pg_search_document from the cache is used.
@@ -144,12 +146,12 @@ describe PgSearch do
144
146
  end
145
147
 
146
148
  it "reindexing works" do
147
- NonSearchableSubclassModel.create!(:content => "foo bar")
148
- NonSearchableSubclassModel.create!(:content => "baz")
149
- expected = SearchableSubclassModel.create!(:content => "baz")
150
- SuperclassModel.create!(:content => "foo bar")
151
- SuperclassModel.create!(:content => "baz")
152
- SuperclassModel.create!(:content => "baz2")
149
+ NonSearchableSubclassModel.create!(content: "foo bar")
150
+ NonSearchableSubclassModel.create!(content: "baz")
151
+ expected = SearchableSubclassModel.create!(content: "baz")
152
+ SuperclassModel.create!(content: "foo bar")
153
+ SuperclassModel.create!(content: "baz")
154
+ SuperclassModel.create!(content: "baz2")
153
155
 
154
156
  expect(SuperclassModel.count).to be 6
155
157
  expect(NonSearchableSubclassModel.count).to be 2
@@ -166,15 +168,15 @@ describe PgSearch do
166
168
  end
167
169
 
168
170
  it "reindexing searchable STI doesn't clobber other related STI models" do
169
- SearchableSubclassModel.create!(:content => "baz")
170
- AnotherSearchableSubclassModel.create!(:content => "baz")
171
+ SearchableSubclassModel.create!(content: "baz")
172
+ AnotherSearchableSubclassModel.create!(content: "baz")
171
173
 
172
174
  expect(PgSearch::Document.count).to be 2
173
175
  PgSearch::Multisearch.rebuild(SearchableSubclassModel)
174
176
  expect(PgSearch::Document.count).to be 2
175
177
 
176
178
  PgSearch::Document.clear_searchable_cache
177
- classes = PgSearch::Document.all.collect {|d| d.searchable.class }
179
+ classes = PgSearch::Document.all.collect { |d| d.searchable.class }
178
180
  expect(classes).to include SearchableSubclassModel
179
181
  expect(classes).to include AnotherSearchableSubclassModel
180
182
  end
@@ -195,7 +197,7 @@ describe PgSearch do
195
197
  before do
196
198
  searchable_subclass_model = Class.new(SuperclassModel) do
197
199
  include PgSearch
198
- multisearchable :against => :content
200
+ multisearchable against: :content
199
201
  end
200
202
  stub_const("SearchableSubclassModel", searchable_subclass_model)
201
203
  stub_const("AnotherSearchableSubclassModel", searchable_subclass_model)
@@ -203,13 +205,13 @@ describe PgSearch do
203
205
  end
204
206
 
205
207
  it "returns only results for that subclass" do
206
- included = SearchableSubclassModel.create!(:content => "foo bar")
208
+ included = SearchableSubclassModel.create!(content: "foo bar")
207
209
 
208
- SearchableSubclassModel.create!(:content => "baz")
209
- SuperclassModel.create!(:content => "foo bar")
210
- SuperclassModel.create!(:content => "baz")
211
- NonSearchableSubclassModel.create!(:content => "foo bar")
212
- NonSearchableSubclassModel.create!(:content => "baz")
210
+ SearchableSubclassModel.create!(content: "baz")
211
+ SuperclassModel.create!(content: "foo bar")
212
+ SuperclassModel.create!(content: "baz")
213
+ NonSearchableSubclassModel.create!(content: "foo bar")
214
+ NonSearchableSubclassModel.create!(content: "baz")
213
215
 
214
216
  expect(SuperclassModel.count).to be 6
215
217
  expect(SearchableSubclassModel.count).to be 2
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
4
  SimpleCov.start
3
5
 
@@ -20,7 +22,7 @@ require 'support/database'
20
22
  require 'support/with_model'
21
23
 
22
24
  DOCUMENTS_SCHEMA = lambda do |t|
23
- t.belongs_to :searchable, :polymorphic => true, :index => true
25
+ t.belongs_to :searchable, polymorphic: true, index: true
24
26
  t.text :content
25
27
  t.timestamps null: false
26
28
  end
@@ -1,27 +1,22 @@
1
- if defined? JRUBY_VERSION
1
+ # frozen_string_literal: true
2
+
3
+ case RUBY_PLATFORM
4
+ when "java"
2
5
  require "activerecord-jdbc-adapter"
3
- error_classes = [ActiveRecord::JDBCError]
6
+ ERROR_CLASS = ActiveRecord::JDBCError
4
7
  else
5
8
  require "pg"
6
- error_classes = [PG::Error]
9
+ ERROR_CLASS = PG::Error
7
10
  end
8
11
 
9
- error_classes << ActiveRecord::NoDatabaseError if defined? ActiveRecord::NoDatabaseError
10
-
11
12
  begin
12
- database_user = if ENV["TRAVIS"]
13
- "postgres"
14
- else
15
- ENV["USER"]
16
- end
17
-
18
- ActiveRecord::Base.establish_connection(:adapter => 'postgresql',
19
- :database => 'pg_search_test',
20
- :username => database_user,
21
- :min_messages => 'warning')
13
+ ActiveRecord::Base.establish_connection(adapter: 'postgresql',
14
+ database: 'pg_search_test',
15
+ username: (ENV["TRAVIS"] ? "postgres" : ENV["USER"]),
16
+ min_messages: 'warning')
22
17
  connection = ActiveRecord::Base.connection
23
18
  connection.execute("SELECT 1")
24
- rescue *error_classes => exception
19
+ rescue ERROR_CLASS, ActiveRecord::NoDatabaseError => e
25
20
  at_exit do
26
21
  puts "-" * 80
27
22
  puts "Unable to connect to database. Please run:"
@@ -29,7 +24,7 @@ rescue *error_classes => exception
29
24
  puts " createdb pg_search_test"
30
25
  puts "-" * 80
31
26
  end
32
- raise exception
27
+ raise e
33
28
  end
34
29
 
35
30
  if ENV["LOGGER"]
@@ -41,19 +36,20 @@ def install_extension(name)
41
36
  connection = ActiveRecord::Base.connection
42
37
  extension = connection.execute "SELECT * FROM pg_catalog.pg_extension WHERE extname = '#{name}';"
43
38
  return unless extension.none?
39
+
44
40
  connection.execute "CREATE EXTENSION #{name};"
45
- rescue StandardError => exception
41
+ rescue StandardError => e
46
42
  at_exit do
47
43
  puts "-" * 80
48
44
  puts "Please install the #{name} extension"
49
45
  puts "-" * 80
50
46
  end
51
- raise exception
47
+ raise e
52
48
  end
53
49
 
54
50
  def install_extension_if_missing(name, query, expected_result)
55
51
  result = ActiveRecord::Base.connection.select_value(query)
56
- raise "Unexpected output for #{query}: #{result.inspect}" unless result.downcase == expected_result.downcase
52
+ raise "Unexpected output for #{query}: #{result.inspect}" unless result.casecmp(expected_result).zero?
57
53
  rescue StandardError
58
54
  install_extension(name)
59
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "with_model"
2
4
 
3
5
  RSpec.configure do |config|