pg_search 2.3.5 → 2.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +75 -0
- data/.rubocop.yml +4 -1
- data/.travis.yml +13 -18
- data/CHANGELOG.md +9 -0
- data/LICENSE +1 -1
- data/README.md +14 -9
- data/Rakefile +7 -1
- data/lib/pg_search/configuration.rb +12 -2
- data/lib/pg_search/features/feature.rb +1 -1
- data/lib/pg_search/features/tsearch.rb +1 -1
- data/lib/pg_search/multisearch.rb +12 -4
- data/lib/pg_search/scope_options.rb +2 -5
- data/lib/pg_search/version.rb +1 -1
- data/lib/pg_search.rb +2 -2
- data/pg_search.gemspec +4 -1
- data/spec/integration/pg_search_spec.rb +32 -1
- data/spec/lib/pg_search/features/trigram_spec.rb +1 -1
- data/spec/lib/pg_search/multisearch_spec.rb +9 -0
- data/spec/lib/pg_search_spec.rb +2 -2
- data/spec/spec_helper.rb +9 -1
- data/spec/support/database.rb +6 -4
- metadata +35 -6
- data/.autotest +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43a62057153fd9e33ed21bc6ce1a420b5fbeaad46e9b047bd1e039c9c7ab6ad2
|
4
|
+
data.tar.gz: 15759abc9542c0b7ddc6060e156e7eff74d78cceef5bb06c4bdfa562e029722b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c1fc5c20a82e45a4fd6381fc56fd940dcd85cce2039e2e7f5159e0c939146d0176f1970481c29205bd7d7737022007d3d78cddc3fa93603a67221fa272d1a4e
|
7
|
+
data.tar.gz: 06a4f487a2cef2fd7b55bf5f650f6e13cec3528b6514f72e6dce69943c67d879f42c795d46c7aa442b2abfe789e4459f10437df94e955f9bfbe54968e9297e39
|
@@ -0,0 +1,75 @@
|
|
1
|
+
name: build
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
- github-actions
|
8
|
+
pull_request:
|
9
|
+
branches:
|
10
|
+
- master
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
test:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
services:
|
16
|
+
postgres:
|
17
|
+
image: postgres:latest
|
18
|
+
env:
|
19
|
+
POSTGRES_USER: postgres
|
20
|
+
POSTGRES_PASSWORD: postgres
|
21
|
+
options: >-
|
22
|
+
--health-cmd pg_isready
|
23
|
+
--health-interval 10s
|
24
|
+
--health-timeout 5s
|
25
|
+
--health-retries 5
|
26
|
+
ports:
|
27
|
+
- 5432:5432
|
28
|
+
env:
|
29
|
+
CI: true
|
30
|
+
PGHOST: 127.0.0.1
|
31
|
+
PGUSER: postgres
|
32
|
+
PGPASS: postgres
|
33
|
+
strategy:
|
34
|
+
fail-fast: false
|
35
|
+
matrix:
|
36
|
+
ruby-version: ['2.6', '2.7', '3.0', '3.1']
|
37
|
+
active-record-version-env:
|
38
|
+
- ACTIVE_RECORD_VERSION="~> 5.2.0"
|
39
|
+
- ACTIVE_RECORD_VERSION="~> 6.0.0"
|
40
|
+
- ACTIVE_RECORD_VERSION="~> 6.1.0"
|
41
|
+
- ACTIVE_RECORD_VERSION="~> 7.0.0"
|
42
|
+
allow-failure: [false]
|
43
|
+
include:
|
44
|
+
- ruby-version: '3.1'
|
45
|
+
active-record-version-env: ACTIVE_RECORD_BRANCH="7-0-stable"
|
46
|
+
allow-failure: true
|
47
|
+
- ruby-version: '3.1'
|
48
|
+
active-record-version-env: ACTIVE_RECORD_BRANCH="6-1-stable"
|
49
|
+
allow-failure: true
|
50
|
+
exclude:
|
51
|
+
- ruby-version: '3.0'
|
52
|
+
active-record-version-env: ACTIVE_RECORD_VERSION="~> 5.2.0"
|
53
|
+
allow-failure: false
|
54
|
+
- ruby-version: '3.1'
|
55
|
+
active-record-version-env: ACTIVE_RECORD_VERSION="~> 5.2.0"
|
56
|
+
allow-failure: false
|
57
|
+
- ruby-version: '2.6'
|
58
|
+
active-record-version-env: ACTIVE_RECORD_VERSION="~> 7.0.0"
|
59
|
+
allow-failure: false
|
60
|
+
continue-on-error: ${{ matrix.allow-failure }}
|
61
|
+
steps:
|
62
|
+
- uses: actions/checkout@v2
|
63
|
+
- name: Set up Ruby
|
64
|
+
uses: ruby/setup-ruby@v1
|
65
|
+
with:
|
66
|
+
ruby-version: ${{ matrix.ruby-version }}
|
67
|
+
bundler-cache: true
|
68
|
+
- name: Set up test database
|
69
|
+
env:
|
70
|
+
PGPASSWORD: postgres
|
71
|
+
run: createdb pg_search_test
|
72
|
+
- name: Update bundle
|
73
|
+
run: ${{ matrix.active-record-version-env }} bundle update
|
74
|
+
- name: Run tests
|
75
|
+
run: ${{ matrix.active-record-version-env }} bundle exec rake
|
data/.rubocop.yml
CHANGED
@@ -5,7 +5,7 @@ require:
|
|
5
5
|
- rubocop-rspec
|
6
6
|
|
7
7
|
AllCops:
|
8
|
-
TargetRubyVersion: 2.
|
8
|
+
TargetRubyVersion: 2.6
|
9
9
|
NewCops: enable
|
10
10
|
Exclude:
|
11
11
|
- bin/**/*
|
@@ -132,3 +132,6 @@ RSpec/MultipleExpectations:
|
|
132
132
|
|
133
133
|
RSpec/ExampleLength:
|
134
134
|
Max: 15
|
135
|
+
|
136
|
+
Rails/RakeEnvironment:
|
137
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -3,40 +3,35 @@ bundler_args: --binstubs
|
|
3
3
|
cache: bundler
|
4
4
|
|
5
5
|
rvm:
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
- jruby-9.2.13.0
|
6
|
+
- 3.0.1
|
7
|
+
- 2.7.3
|
8
|
+
- 2.6.7
|
10
9
|
|
11
10
|
services:
|
12
11
|
- postgresql
|
13
12
|
|
14
13
|
env:
|
15
|
-
|
16
|
-
-
|
17
|
-
matrix:
|
18
|
-
- ACTIVE_RECORD_BRANCH="master"
|
14
|
+
jobs:
|
15
|
+
- ACTIVE_RECORD_BRANCH="main"
|
19
16
|
- ACTIVE_RECORD_BRANCH="6-1-stable"
|
20
17
|
- ACTIVE_RECORD_BRANCH="6-0-stable"
|
21
|
-
- ACTIVE_RECORD_VERSION="~> 6.1.0
|
18
|
+
- ACTIVE_RECORD_VERSION="~> 6.1.0"
|
22
19
|
- ACTIVE_RECORD_VERSION="~> 6.0.0"
|
23
20
|
- ACTIVE_RECORD_VERSION="~> 5.2.0"
|
24
21
|
|
25
|
-
|
22
|
+
jobs:
|
26
23
|
allow_failures:
|
27
|
-
- env: ACTIVE_RECORD_BRANCH="
|
24
|
+
- env: ACTIVE_RECORD_BRANCH="main"
|
28
25
|
- env: ACTIVE_RECORD_BRANCH="6-0-stable"
|
29
26
|
- env: ACTIVE_RECORD_BRANCH="6-1-stable"
|
30
|
-
|
27
|
+
exclude:
|
28
|
+
- rvm: 3.0.1
|
29
|
+
env: ACTIVE_RECORD_VERSION="~> 5.2.0"
|
30
|
+
- rvm: 2.6.7
|
31
|
+
env: ACTIVE_RECORD_BRANCH="main"
|
31
32
|
|
32
33
|
before_script:
|
33
34
|
- psql --version
|
34
35
|
- psql -c 'create database pg_search_test;' -U postgres >/dev/null
|
35
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
36
|
-
- chmod +x ./cc-test-reporter
|
37
|
-
- ./cc-test-reporter before-build
|
38
36
|
|
39
37
|
script: bin/rake
|
40
|
-
|
41
|
-
after_script:
|
42
|
-
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# pg_search changelog
|
2
2
|
|
3
|
+
## 2.3.6
|
4
|
+
|
5
|
+
* Drop support for Ruby 2.5
|
6
|
+
* Support Ruby 3.1
|
7
|
+
* Support Active Record 7.0
|
8
|
+
* Don't require `:against` if `:tsvector_column` is specified (Travis Hunter)
|
9
|
+
* Optionally disable transaction when rebuilding documents (Travis Hunter)
|
10
|
+
* Preserve columns when chaining ::with_pg_search_highlight (jcsanti)
|
11
|
+
|
3
12
|
## 2.3.5
|
4
13
|
|
5
14
|
* Add table of contents to README (Barry Woolgar)
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010-
|
1
|
+
Copyright (c) 2010-2021 Casebook, PBC <http://www.casebook.net>
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
# [pg_search](http://github.com/Casecommons/pg_search/)
|
2
2
|
|
3
3
|
[![Gem Version](https://img.shields.io/gem/v/pg_search.svg?style=flat)](https://rubygems.org/gems/pg_search)
|
4
|
-
[![Build Status](https://
|
5
|
-
[![Maintainability](https://api.codeclimate.com/v1/badges/ae1a7c021e473e9b2486/maintainability)](https://codeclimate.com/github/Casecommons/pg_search/maintainability)
|
6
|
-
[![Test Coverage](https://codeclimate.com/github/Casecommons/pg_search/badges/coverage.svg)](https://codeclimate.com/github/Casecommons/pg_search/coverage)
|
7
|
-
[![Inline docs](http://inch-ci.org/github/Casecommons/pg_search.svg?branch=master&style=flat)](http://inch-ci.org/github/Casecommons/pg_search)
|
4
|
+
[![Build Status](https://github.com/Casecommons/pg_search/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/Casecommons/pg_search/actions/workflows/ci.yml)
|
8
5
|
[![Join the chat at https://gitter.im/Casecommons/pg_search](https://img.shields.io/badge/gitter-join%20chat-blue.svg)](https://gitter.im/Casecommons/pg_search?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
9
6
|
|
10
7
|
## DESCRIPTION
|
@@ -12,11 +9,11 @@
|
|
12
9
|
PgSearch builds named scopes that take advantage of PostgreSQL's full text
|
13
10
|
search.
|
14
11
|
|
15
|
-
Read the blog post introducing PgSearch at https://
|
12
|
+
Read the blog post introducing PgSearch at https://tanzu.vmware.com/content/blog/pg-search-how-i-learned-to-stop-worrying-and-love-postgresql-full-text-search
|
16
13
|
|
17
14
|
## REQUIREMENTS
|
18
15
|
|
19
|
-
* Ruby 2.
|
16
|
+
* Ruby 2.6+
|
20
17
|
* ActiveRecord 5.2+
|
21
18
|
* PostgreSQL 9.2+
|
22
19
|
* [PostgreSQL extensions](https://github.com/Casecommons/pg_search/wiki/Installing-PostgreSQL-Extensions) for certain features
|
@@ -319,7 +316,7 @@ To remove all of the documents for a given class, you can simply delete all of
|
|
319
316
|
the PgSearch::Document records.
|
320
317
|
|
321
318
|
```ruby
|
322
|
-
PgSearch::Document.
|
319
|
+
PgSearch::Document.delete_by(searchable_type: "Animal")
|
323
320
|
```
|
324
321
|
|
325
322
|
To regenerate the documents for a given class, run:
|
@@ -338,6 +335,13 @@ like so:
|
|
338
335
|
PgSearch::Multisearch.rebuild(Product, clean_up: false)
|
339
336
|
```
|
340
337
|
|
338
|
+
```rebuild``` runs inside a single transaction. To run outside of a transaction,
|
339
|
+
you can pass ```transactional: false``` like so:
|
340
|
+
|
341
|
+
```ruby
|
342
|
+
PgSearch::Multisearch.rebuild(Product, transactional: false)
|
343
|
+
```
|
344
|
+
|
341
345
|
Rebuild is also available as a Rake task, for convenience.
|
342
346
|
|
343
347
|
$ rake pg_search:multisearch:rebuild[BlogPost]
|
@@ -383,7 +387,7 @@ class Movie < ActiveRecord::Base
|
|
383
387
|
INSERT INTO pg_search_documents (searchable_type, searchable_id, content, created_at, updated_at)
|
384
388
|
SELECT 'Movie' AS searchable_type,
|
385
389
|
movies.id AS searchable_id,
|
386
|
-
(
|
390
|
+
CONCAT_WS(' ', movies.name, directors.name) AS content,
|
387
391
|
now() AS created_at,
|
388
392
|
now() AS updated_at
|
389
393
|
FROM movies
|
@@ -393,6 +397,7 @@ class Movie < ActiveRecord::Base
|
|
393
397
|
end
|
394
398
|
end
|
395
399
|
```
|
400
|
+
**Note:** If using PostgreSQL before 9.1, replace the `CONCAT_WS()` function call with double-pipe concatenation, eg. `(movies.name || ' ' || directors.name)`. However, now be aware that if *any* of the joined values is NULL then the final `content` value will also be NULL, whereas `CONCAT_WS()` will selectively ignore NULL values.
|
396
401
|
|
397
402
|
#### Disabling multi-search indexing temporarily
|
398
403
|
|
@@ -1196,5 +1201,5 @@ for discussing pg_search and other Casebook PBC open source projects.
|
|
1196
1201
|
|
1197
1202
|
## LICENSE
|
1198
1203
|
|
1199
|
-
Copyright © 2010–
|
1204
|
+
Copyright © 2010–2021 [Casebook PBC](http://www.casebook.net).
|
1200
1205
|
Licensed under the MIT license, see [LICENSE](/LICENSE) file.
|
data/Rakefile
CHANGED
@@ -11,4 +11,10 @@ RuboCop::RakeTask.new do |t|
|
|
11
11
|
t.options = %w[--display-cop-names]
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
desc "Check test coverage"
|
15
|
+
task :undercover do
|
16
|
+
system("git fetch --unshallow") if ENV["CI"]
|
17
|
+
exit(1) unless system("bin/undercover --compare origin/master")
|
18
|
+
end
|
19
|
+
|
20
|
+
task default: %w[spec rubocop undercover]
|
@@ -92,8 +92,11 @@ module PgSearch
|
|
92
92
|
}.freeze
|
93
93
|
|
94
94
|
def assert_valid_options(options)
|
95
|
-
unless options[:against] || options[:associated_against]
|
96
|
-
raise
|
95
|
+
unless options[:against] || options[:associated_against] || using_tsvector_column?(options[:using])
|
96
|
+
raise(
|
97
|
+
ArgumentError,
|
98
|
+
"the search scope #{@name} must have :against, :associated_against, or :tsvector_column in its options"
|
99
|
+
)
|
97
100
|
end
|
98
101
|
|
99
102
|
options.assert_valid_keys(VALID_KEYS)
|
@@ -104,5 +107,12 @@ module PgSearch
|
|
104
107
|
end
|
105
108
|
end
|
106
109
|
end
|
110
|
+
|
111
|
+
def using_tsvector_column?(options)
|
112
|
+
return unless options.is_a?(Hash)
|
113
|
+
|
114
|
+
options.dig(:dmetaphone, :tsvector_column).present? ||
|
115
|
+
options.dig(:tsearch, :tsvector_column).present?
|
116
|
+
end
|
107
117
|
end
|
108
118
|
end
|
@@ -132,7 +132,7 @@ module PgSearch
|
|
132
132
|
def tsquery
|
133
133
|
return "''" if query.blank?
|
134
134
|
|
135
|
-
query_terms = query.split
|
135
|
+
query_terms = query.split.compact
|
136
136
|
tsquery_terms = query_terms.map { |term| tsquery_for_term(term) }
|
137
137
|
tsquery_terms.join(options[:any_word] ? ' || ' : ' && ')
|
138
138
|
end
|
@@ -5,7 +5,7 @@ require "pg_search/multisearch/rebuilder"
|
|
5
5
|
module PgSearch
|
6
6
|
module Multisearch
|
7
7
|
class << self
|
8
|
-
def rebuild(model, deprecated_clean_up = nil, clean_up: true)
|
8
|
+
def rebuild(model, deprecated_clean_up = nil, clean_up: true, transactional: true)
|
9
9
|
unless deprecated_clean_up.nil?
|
10
10
|
ActiveSupport::Deprecation.warn(
|
11
11
|
"pg_search 3.0 will no longer accept a boolean second argument to PgSearchMultisearch.rebuild, " \
|
@@ -14,11 +14,19 @@ module PgSearch
|
|
14
14
|
clean_up = deprecated_clean_up
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
if transactional
|
18
|
+
model.transaction { execute(model, clean_up) }
|
19
|
+
else
|
20
|
+
execute(model, clean_up)
|
20
21
|
end
|
21
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def execute(model, clean_up)
|
27
|
+
PgSearch::Document.where(searchable_type: model.base_class.name).delete_all if clean_up
|
28
|
+
Rebuilder.new(model).rebuild
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
32
|
class ModelNotMultisearchable < StandardError
|
@@ -37,11 +37,8 @@ module PgSearch
|
|
37
37
|
|
38
38
|
def with_pg_search_highlight
|
39
39
|
scope = self
|
40
|
-
scope.select(
|
41
|
-
|
42
|
-
|
43
|
-
def pg_search_highlight_field
|
44
|
-
"(#{highlight}) AS pg_search_highlight, #{table_name}.*"
|
40
|
+
scope = scope.select("#{table_name}.*") unless scope.select_values.any?
|
41
|
+
scope.select("(#{highlight}) AS pg_search_highlight")
|
45
42
|
end
|
46
43
|
|
47
44
|
def highlight
|
data/lib/pg_search/version.rb
CHANGED
data/lib/pg_search.rb
CHANGED
@@ -57,14 +57,14 @@ module PgSearch
|
|
57
57
|
class PgSearchRankNotSelected < StandardError
|
58
58
|
def message
|
59
59
|
"You must chain .with_pg_search_rank after the pg_search_scope " \
|
60
|
-
|
60
|
+
"to access the pg_search_rank attribute on returned records"
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
class PgSearchHighlightNotSelected < StandardError
|
65
65
|
def message
|
66
66
|
"You must chain .with_pg_search_highlight after the pg_search_scope " \
|
67
|
-
|
67
|
+
"to access the pg_search_highlight attribute on returned records"
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
data/pg_search.gemspec
CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
|
|
13
13
|
s.summary = "PgSearch builds Active Record named scopes that take advantage of PostgreSQL's full text search"
|
14
14
|
s.description = "PgSearch builds Active Record named scopes that take advantage of PostgreSQL's full text search"
|
15
15
|
s.licenses = ['MIT']
|
16
|
+
s.metadata["rubygems_mfa_required"] = "true"
|
16
17
|
|
17
18
|
s.files = `git ls-files`.split("\n")
|
18
19
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
@@ -30,8 +31,10 @@ Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
|
|
30
31
|
s.add_development_dependency 'rubocop-rake'
|
31
32
|
s.add_development_dependency 'rubocop-rspec'
|
32
33
|
s.add_development_dependency 'simplecov'
|
34
|
+
s.add_development_dependency 'simplecov-lcov'
|
35
|
+
s.add_development_dependency 'undercover'
|
33
36
|
s.add_development_dependency 'warning'
|
34
37
|
s.add_development_dependency 'with_model'
|
35
38
|
|
36
|
-
s.required_ruby_version = '>= 2.
|
39
|
+
s.required_ruby_version = '>= 2.6'
|
37
40
|
end
|
@@ -140,6 +140,22 @@ describe "an Active Record model which includes PgSearch" do
|
|
140
140
|
}.to raise_error(ArgumentError, /against/)
|
141
141
|
end
|
142
142
|
end
|
143
|
+
|
144
|
+
context "when a tsvector column is specified" do
|
145
|
+
it "does not raise an exception when invoked" do
|
146
|
+
ModelWithPgSearch.pg_search_scope :with_unknown_ignoring, {
|
147
|
+
using: {
|
148
|
+
tsearch: {
|
149
|
+
tsvector_column: "tsv"
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
expect {
|
155
|
+
ModelWithPgSearch.with_unknown_ignoring("foo")
|
156
|
+
}.not_to raise_error
|
157
|
+
end
|
158
|
+
end
|
143
159
|
end
|
144
160
|
end
|
145
161
|
end
|
@@ -407,6 +423,15 @@ describe "an Active Record model which includes PgSearch" do
|
|
407
423
|
expect(results).to eq([winner, loser])
|
408
424
|
end
|
409
425
|
|
426
|
+
it 'preserves column selection when with_pg_search_rank is chained after a select()' do
|
427
|
+
loser = ModelWithPgSearch.create!(title: 'foo', content: 'bar')
|
428
|
+
|
429
|
+
results = ModelWithPgSearch.search_content('bar').select(:content).with_pg_search_rank
|
430
|
+
|
431
|
+
expect(results.length).to be 1
|
432
|
+
expect(results.first.as_json.keys).to contain_exactly('id', 'content', 'pg_search_rank')
|
433
|
+
end
|
434
|
+
|
410
435
|
it 'allows pg_search_rank along with a join' do
|
411
436
|
parent_1 = ParentModel.create!(id: 98)
|
412
437
|
parent_2 = ParentModel.create!(id: 99)
|
@@ -614,7 +639,7 @@ describe "an Active Record model which includes PgSearch" do
|
|
614
639
|
describe "highlighting" do
|
615
640
|
before do
|
616
641
|
["Strip Down", "Down", "Down and Out", "Won't Let You Down"].each do |name|
|
617
|
-
ModelWithPgSearch.create! content: name
|
642
|
+
ModelWithPgSearch.create! title: 'Just a title', content: name
|
618
643
|
end
|
619
644
|
end
|
620
645
|
|
@@ -635,6 +660,12 @@ describe "an Active Record model which includes PgSearch" do
|
|
635
660
|
|
636
661
|
expect(result.pg_search_highlight).to eq("Won't <b>Let</b> You Down")
|
637
662
|
end
|
663
|
+
|
664
|
+
it 'preserves column selection when with_pg_search_highlight is chained after a select()' do
|
665
|
+
result = ModelWithPgSearch.search_content("Let").select(:content).with_pg_search_highlight.first
|
666
|
+
|
667
|
+
expect(result.as_json.keys).to contain_exactly('id', 'content', 'pg_search_highlight')
|
668
|
+
end
|
638
669
|
end
|
639
670
|
|
640
671
|
context "with custom highlighting options" do
|
@@ -16,7 +16,7 @@ describe PgSearch::Features::Trigram do
|
|
16
16
|
]
|
17
17
|
}
|
18
18
|
let(:normalizer) { PgSearch::Normalizer.new(config) }
|
19
|
-
let(:config) { OpenStruct.new(ignore: []) }
|
19
|
+
let(:config) { OpenStruct.new(ignore: []) } # rubocop:disable Style/OpenStructUse
|
20
20
|
|
21
21
|
let(:coalesced_columns) do
|
22
22
|
<<~SQL.squish
|
@@ -33,6 +33,15 @@ describe PgSearch::Multisearch do
|
|
33
33
|
expect(model).to have_received(:transaction).once
|
34
34
|
end
|
35
35
|
|
36
|
+
context "when transactional is false" do
|
37
|
+
it "does not operate inside a transaction" do
|
38
|
+
allow(model).to receive(:transaction)
|
39
|
+
|
40
|
+
described_class.rebuild(model, transactional: false)
|
41
|
+
expect(model).not_to have_received(:transaction)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
36
45
|
describe "cleaning up search documents for this model" do
|
37
46
|
before do
|
38
47
|
connection.execute <<~SQL.squish
|
data/spec/lib/pg_search_spec.rb
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
# For Active Record 5.x
|
5
|
+
# For Active Record 5.x, the association reflection's cache needs be cleared
|
6
6
|
# because we're stubbing the related constants.
|
7
|
-
if ActiveRecord::VERSION::MAJOR == 5
|
7
|
+
if ActiveRecord::VERSION::MAJOR == 5
|
8
8
|
def clear_searchable_cache
|
9
9
|
PgSearch::Document.reflect_on_association(:searchable).clear_association_scope_cache
|
10
10
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,8 +4,16 @@ require 'warning'
|
|
4
4
|
# Ignore Ruby 2.7 warnings from Active Record
|
5
5
|
Warning.ignore :keyword_separation
|
6
6
|
|
7
|
+
# https://github.com/grodowski/undercover#setting-up-required-lcov-reporting
|
7
8
|
require 'simplecov'
|
8
|
-
|
9
|
+
require 'simplecov-lcov'
|
10
|
+
SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
|
11
|
+
SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
|
12
|
+
SimpleCov.start do
|
13
|
+
add_filter(%r{^/spec/})
|
14
|
+
enable_coverage(:branch)
|
15
|
+
end
|
16
|
+
require 'undercover'
|
9
17
|
|
10
18
|
require "bundler/setup"
|
11
19
|
require "pg_search"
|
data/spec/support/database.rb
CHANGED
@@ -10,10 +10,12 @@ else
|
|
10
10
|
end
|
11
11
|
|
12
12
|
begin
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
connection_options = { adapter: 'postgresql', database: 'pg_search_test', min_messages: 'warning' }
|
14
|
+
if ENV["CI"]
|
15
|
+
connection_options[:username] = 'postgres'
|
16
|
+
connection_options[:password] = 'postgres'
|
17
|
+
end
|
18
|
+
ActiveRecord::Base.establish_connection(connection_options)
|
17
19
|
connection = ActiveRecord::Base.connection
|
18
20
|
connection.execute("SELECT 1")
|
19
21
|
rescue ERROR_CLASS, ActiveRecord::NoDatabaseError => e
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grant Hutchins
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -165,6 +165,34 @@ dependencies:
|
|
165
165
|
- - ">="
|
166
166
|
- !ruby/object:Gem::Version
|
167
167
|
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: simplecov-lcov
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: undercover
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
168
196
|
- !ruby/object:Gem::Dependency
|
169
197
|
name: warning
|
170
198
|
requirement: !ruby/object:Gem::Requirement
|
@@ -202,11 +230,11 @@ executables: []
|
|
202
230
|
extensions: []
|
203
231
|
extra_rdoc_files: []
|
204
232
|
files:
|
205
|
-
- ".autotest"
|
206
233
|
- ".bundle/config"
|
207
234
|
- ".codeclimate.yml"
|
208
235
|
- ".editorconfig"
|
209
236
|
- ".github/dependabot.yml"
|
237
|
+
- ".github/workflows/ci.yml"
|
210
238
|
- ".gitignore"
|
211
239
|
- ".jrubyrc"
|
212
240
|
- ".rspec"
|
@@ -271,7 +299,8 @@ files:
|
|
271
299
|
homepage: https://github.com/Casecommons/pg_search
|
272
300
|
licenses:
|
273
301
|
- MIT
|
274
|
-
metadata:
|
302
|
+
metadata:
|
303
|
+
rubygems_mfa_required: 'true'
|
275
304
|
post_install_message:
|
276
305
|
rdoc_options: []
|
277
306
|
require_paths:
|
@@ -280,14 +309,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
280
309
|
requirements:
|
281
310
|
- - ">="
|
282
311
|
- !ruby/object:Gem::Version
|
283
|
-
version: '2.
|
312
|
+
version: '2.6'
|
284
313
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
314
|
requirements:
|
286
315
|
- - ">="
|
287
316
|
- !ruby/object:Gem::Version
|
288
317
|
version: '0'
|
289
318
|
requirements: []
|
290
|
-
rubygems_version: 3.
|
319
|
+
rubygems_version: 3.3.3
|
291
320
|
signing_key:
|
292
321
|
specification_version: 4
|
293
322
|
summary: PgSearch builds Active Record named scopes that take advantage of PostgreSQL's
|