pg_search 2.3.5 → 2.3.6
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/.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
|
[](https://rubygems.org/gems/pg_search)
|
|
4
|
-
[](https://codeclimate.com/github/Casecommons/pg_search/maintainability)
|
|
6
|
-
[](https://codeclimate.com/github/Casecommons/pg_search/coverage)
|
|
7
|
-
[](http://inch-ci.org/github/Casecommons/pg_search)
|
|
4
|
+
[](https://github.com/Casecommons/pg_search/actions/workflows/ci.yml)
|
|
8
5
|
[](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
|