searchable-by 0.5.7 → 0.5.8
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/.rubocop.yml +7 -8
- data/.travis.yml +2 -1
- data/Gemfile.lock +22 -13
- data/README.md +4 -3
- data/lib/searchable_by/column.rb +5 -2
- data/searchable-by.gemspec +3 -5
- data/spec/searchable_by_spec.rb +5 -0
- data/spec/spec_helper.rb +7 -2
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9577dc443c9400afd9bb866e8a53a351cf1e56420ce28b140c184e6647689411
|
4
|
+
data.tar.gz: 6a84939c7bb80af91d31b6d6bb3fd65acd672a4b41fbc25dbe08664e74d1f58d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86367f8084de15d5d8e11568c1dadd5beddb090bf4dc4c334133197e15906e0bced5396a5c95f9434e6902d2ae0752698590f1b2fc1eacba26cb49a66a3e5697
|
7
|
+
data.tar.gz: ac9f4157b9a1705b50c95c9e1e3ee4f9c19b5ea7be9fec12a5a42df53eb0a2761a0c90c902dce641f15628ac48f2b3be4e1b504cfb36bebd6db00620dda4d787
|
data/.rubocop.yml
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
- https://gitlab.com/bsm/misc/raw/master/rubocop/default.yml
|
1
|
+
inherit_gem:
|
2
|
+
rubocop-bsm:
|
3
|
+
- default.yml
|
4
|
+
inherit_mode:
|
5
|
+
merge:
|
6
|
+
- Exclude
|
8
7
|
|
9
8
|
AllCops:
|
10
|
-
TargetRubyVersion: "2.
|
9
|
+
TargetRubyVersion: "2.6"
|
11
10
|
|
12
11
|
Naming/FileName:
|
13
12
|
Exclude:
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
searchable-by (0.5.
|
4
|
+
searchable-by (0.5.8)
|
5
5
|
activerecord
|
6
6
|
activesupport
|
7
7
|
|
@@ -19,15 +19,16 @@ GEM
|
|
19
19
|
minitest (>= 5.1)
|
20
20
|
tzinfo (~> 2.0)
|
21
21
|
zeitwerk (~> 2.3)
|
22
|
-
ast (2.4.
|
23
|
-
concurrent-ruby (1.1.
|
22
|
+
ast (2.4.2)
|
23
|
+
concurrent-ruby (1.1.8)
|
24
24
|
diff-lcs (1.4.4)
|
25
|
-
i18n (1.8.
|
25
|
+
i18n (1.8.8)
|
26
26
|
concurrent-ruby (~> 1.0)
|
27
27
|
minitest (5.14.3)
|
28
28
|
parallel (1.20.1)
|
29
29
|
parser (3.0.0.0)
|
30
30
|
ast (~> 2.4.1)
|
31
|
+
rack (2.2.3)
|
31
32
|
rainbow (3.0.0)
|
32
33
|
rake (13.0.3)
|
33
34
|
regexp_parser (2.0.3)
|
@@ -41,11 +42,11 @@ GEM
|
|
41
42
|
rspec-expectations (3.10.1)
|
42
43
|
diff-lcs (>= 1.2.0, < 2.0)
|
43
44
|
rspec-support (~> 3.10.0)
|
44
|
-
rspec-mocks (3.10.
|
45
|
+
rspec-mocks (3.10.2)
|
45
46
|
diff-lcs (>= 1.2.0, < 2.0)
|
46
47
|
rspec-support (~> 3.10.0)
|
47
|
-
rspec-support (3.10.
|
48
|
-
rubocop (1.
|
48
|
+
rspec-support (3.10.2)
|
49
|
+
rubocop (1.9.1)
|
49
50
|
parallel (~> 1.10)
|
50
51
|
parser (>= 3.0.0.0)
|
51
52
|
rainbow (>= 2.2.2, < 4.0)
|
@@ -54,14 +55,24 @@ GEM
|
|
54
55
|
rubocop-ast (>= 1.2.0, < 2.0)
|
55
56
|
ruby-progressbar (~> 1.7)
|
56
57
|
unicode-display_width (>= 1.4.0, < 3.0)
|
57
|
-
rubocop-ast (1.4.
|
58
|
+
rubocop-ast (1.4.1)
|
58
59
|
parser (>= 2.7.1.5)
|
60
|
+
rubocop-bsm (0.5.4)
|
61
|
+
rubocop (~> 1.0)
|
62
|
+
rubocop-performance
|
63
|
+
rubocop-rails
|
64
|
+
rubocop-rake
|
65
|
+
rubocop-rspec
|
59
66
|
rubocop-performance (1.9.2)
|
60
67
|
rubocop (>= 0.90.0, < 2.0)
|
61
68
|
rubocop-ast (>= 0.4.0)
|
69
|
+
rubocop-rails (2.9.1)
|
70
|
+
activesupport (>= 4.2.0)
|
71
|
+
rack (>= 1.1)
|
72
|
+
rubocop (>= 0.90.0, < 2.0)
|
62
73
|
rubocop-rake (0.5.1)
|
63
74
|
rubocop
|
64
|
-
rubocop-rspec (2.
|
75
|
+
rubocop-rspec (2.2.0)
|
65
76
|
rubocop (~> 1.0)
|
66
77
|
rubocop-ast (>= 1.1.0)
|
67
78
|
ruby-progressbar (1.11.0)
|
@@ -79,11 +90,9 @@ DEPENDENCIES
|
|
79
90
|
rake
|
80
91
|
rspec
|
81
92
|
rubocop
|
82
|
-
rubocop-
|
83
|
-
rubocop-rake
|
84
|
-
rubocop-rspec
|
93
|
+
rubocop-bsm
|
85
94
|
searchable-by!
|
86
95
|
sqlite3
|
87
96
|
|
88
97
|
BUNDLED WITH
|
89
|
-
2.
|
98
|
+
2.2.3
|
data/README.md
CHANGED
@@ -15,9 +15,10 @@ class Post < ActiveRecord::Base
|
|
15
15
|
# Limit the number of terms per query to 3.
|
16
16
|
searchable_by max_terms: 3 do
|
17
17
|
# Allow to search strings with custom match type.
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
column :title,
|
19
|
+
match: :prefix, # Use btree index-friendly prefix match, e.g. `ILIKE 'term%'` instead of default `ILIKE '%term%'`.
|
20
|
+
match_phrase: :exact, # For phrases use exact match type, e.g. searching for `"My Post"` will query `WHERE LOWER(title) = 'my post'`.
|
21
|
+
min_length: 3 # Return no-match if search term is too short (useful for trigram indexes).
|
21
22
|
|
22
23
|
# ... and integers.
|
23
24
|
column :id, type: :integer
|
data/lib/searchable_by/column.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
module SearchableBy
|
2
2
|
class Column
|
3
|
-
attr_reader :attr, :type, :match, :match_phrase
|
3
|
+
attr_reader :attr, :type, :match, :match_phrase, :min_length
|
4
4
|
attr_accessor :node
|
5
5
|
|
6
|
-
def initialize(attr, type: :string, match: :all, match_phrase: nil)
|
6
|
+
def initialize(attr, type: :string, match: :all, match_phrase: nil, min_length: 0)
|
7
7
|
@attr = attr
|
8
8
|
@type = type.to_sym
|
9
9
|
@match = match
|
10
10
|
@match_phrase = match_phrase || match
|
11
|
+
@min_length = min_length
|
11
12
|
end
|
12
13
|
|
13
14
|
def build_condition(value)
|
15
|
+
return Arel::Nodes::False.new if value.term.length < min_length # no-match
|
16
|
+
|
14
17
|
scope = node.not_eq(nil)
|
15
18
|
|
16
19
|
case type
|
data/searchable-by.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'searchable-by'
|
3
|
-
s.version = '0.5.
|
3
|
+
s.version = '0.5.8'
|
4
4
|
s.authors = ['Dimitrij Denissenko']
|
5
5
|
s.email = ['dimitrij@blacksquaremedia.com']
|
6
6
|
s.summary = 'Generate search scopes'
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = `git ls-files -z`.split("\x0").reject {|f| f.start_with?('spec/') }
|
12
12
|
s.test_files = `git ls-files -z -- spec/*`.split("\x0")
|
13
13
|
s.require_paths = ['lib']
|
14
|
-
s.required_ruby_version = '>= 2.
|
14
|
+
s.required_ruby_version = '>= 2.6'
|
15
15
|
|
16
16
|
s.add_dependency 'activerecord'
|
17
17
|
s.add_dependency 'activesupport'
|
@@ -20,8 +20,6 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency 'rake'
|
21
21
|
s.add_development_dependency 'rspec'
|
22
22
|
s.add_development_dependency 'rubocop'
|
23
|
-
s.add_development_dependency 'rubocop-
|
24
|
-
s.add_development_dependency 'rubocop-rake'
|
25
|
-
s.add_development_dependency 'rubocop-rspec'
|
23
|
+
s.add_development_dependency 'rubocop-bsm'
|
26
24
|
s.add_development_dependency 'sqlite3'
|
27
25
|
end
|
data/spec/searchable_by_spec.rb
CHANGED
@@ -61,6 +61,11 @@ describe SearchableBy do
|
|
61
61
|
expect(Post.search_by('recip').pluck(:title)).to match_array(%w[ax1 ax2 bx1 bx2 ab1])
|
62
62
|
end
|
63
63
|
|
64
|
+
it 'supports min term length' do
|
65
|
+
expect(User.search_by('+ir')).to be_empty
|
66
|
+
expect(User.search_by('irs')).to match_array([USERS[:a]])
|
67
|
+
end
|
68
|
+
|
64
69
|
it 'searches within scopes' do
|
65
70
|
expect(Post.where(title: 'ax1').search_by('ALICE').pluck(:title)).to match_array(%w[ax1])
|
66
71
|
expect(Post.where(title: 'ax1').search_by('bOb').pluck(:title)).to be_empty
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,7 @@ ActiveRecord::Base.establish_connection :test
|
|
8
8
|
ActiveRecord::Base.connection.instance_eval do
|
9
9
|
create_table :users do |t|
|
10
10
|
t.string :name
|
11
|
+
t.string :bio
|
11
12
|
end
|
12
13
|
create_table :posts do |t|
|
13
14
|
t.integer :author_id, null: false
|
@@ -27,6 +28,10 @@ end
|
|
27
28
|
|
28
29
|
class User < AbstractModel
|
29
30
|
has_many :posts, foreign_key: :author_id
|
31
|
+
|
32
|
+
searchable_by do
|
33
|
+
column :bio, min_length: 3
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
class Post < AbstractModel
|
@@ -46,8 +51,8 @@ class Post < AbstractModel
|
|
46
51
|
end
|
47
52
|
|
48
53
|
USERS = {
|
49
|
-
a: User.create!(name: 'Alice'),
|
50
|
-
b: User.create!(name: 'Bob'),
|
54
|
+
a: User.create!(name: 'Alice', bio: 'First user'),
|
55
|
+
b: User.create!(name: 'Bob', bio: 'Second user'),
|
51
56
|
}.freeze
|
52
57
|
|
53
58
|
POSTS = {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: searchable-by
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitrij Denissenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -95,35 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop-
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop-rake
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-rspec
|
98
|
+
name: rubocop-bsm
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - ">="
|
@@ -187,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
159
|
requirements:
|
188
160
|
- - ">="
|
189
161
|
- !ruby/object:Gem::Version
|
190
|
-
version: '2.
|
162
|
+
version: '2.6'
|
191
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
164
|
requirements:
|
193
165
|
- - ">="
|