searchable-by 0.5.8 → 0.5.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9577dc443c9400afd9bb866e8a53a351cf1e56420ce28b140c184e6647689411
4
- data.tar.gz: 6a84939c7bb80af91d31b6d6bb3fd65acd672a4b41fbc25dbe08664e74d1f58d
3
+ metadata.gz: 8b6f1b26859c89dfec031b51501c3f1dd6e8050d27bf7ae00bdb0ef9b8495422
4
+ data.tar.gz: a24dc8497c85648498fccffd56aaa4f995d7c31b48ab21e970356115a6a1ec50
5
5
  SHA512:
6
- metadata.gz: 86367f8084de15d5d8e11568c1dadd5beddb090bf4dc4c334133197e15906e0bced5396a5c95f9434e6902d2ae0752698590f1b2fc1eacba26cb49a66a3e5697
7
- data.tar.gz: ac9f4157b9a1705b50c95c9e1e3ee4f9c19b5ea7be9fec12a5a42df53eb0a2761a0c90c902dce641f15628ac48f2b3be4e1b504cfb36bebd6db00620dda4d787
6
+ metadata.gz: 33f4d29187d4bf9545af72632b1c17742be5ceeb3b699d36dc6e0f251151dabb06877269378d17f72dcb152f4413265866b9e076c537f5f0e1cf3f12689d3492
7
+ data.tar.gz: 6cba46e2c5ee6bf164490d5f7e2b7c715ae19dcc51d6eafbc3e93283e4d02e887e926eadc821753cf4b25522b5adb4322ac37a89d678beb76c33b7fd79fb193a
@@ -0,0 +1,21 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: ["2.6", "2.7", "3.0"]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ bundler-cache: true
21
+ - run: bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,19 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- searchable-by (0.5.8)
4
+ searchable-by (0.5.9)
5
5
  activerecord
6
6
  activesupport
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activemodel (6.1.1)
12
- activesupport (= 6.1.1)
13
- activerecord (6.1.1)
14
- activemodel (= 6.1.1)
15
- activesupport (= 6.1.1)
16
- activesupport (6.1.1)
11
+ activemodel (6.1.3)
12
+ activesupport (= 6.1.3)
13
+ activerecord (6.1.3)
14
+ activemodel (= 6.1.3)
15
+ activesupport (= 6.1.3)
16
+ activesupport (6.1.3)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 1.6, < 2)
19
19
  minitest (>= 5.1)
@@ -22,16 +22,16 @@ GEM
22
22
  ast (2.4.2)
23
23
  concurrent-ruby (1.1.8)
24
24
  diff-lcs (1.4.4)
25
- i18n (1.8.8)
25
+ i18n (1.8.9)
26
26
  concurrent-ruby (~> 1.0)
27
- minitest (5.14.3)
27
+ minitest (5.14.4)
28
28
  parallel (1.20.1)
29
29
  parser (3.0.0.0)
30
30
  ast (~> 2.4.1)
31
31
  rack (2.2.3)
32
32
  rainbow (3.0.0)
33
33
  rake (13.0.3)
34
- regexp_parser (2.0.3)
34
+ regexp_parser (2.1.1)
35
35
  rexml (3.2.4)
36
36
  rspec (3.10.0)
37
37
  rspec-core (~> 3.10.0)
@@ -46,7 +46,7 @@ GEM
46
46
  diff-lcs (>= 1.2.0, < 2.0)
47
47
  rspec-support (~> 3.10.0)
48
48
  rspec-support (3.10.2)
49
- rubocop (1.9.1)
49
+ rubocop (1.11.0)
50
50
  parallel (~> 1.10)
51
51
  parser (>= 3.0.0.0)
52
52
  rainbow (>= 2.2.2, < 4.0)
@@ -63,7 +63,7 @@ GEM
63
63
  rubocop-rails
64
64
  rubocop-rake
65
65
  rubocop-rspec
66
- rubocop-performance (1.9.2)
66
+ rubocop-performance (1.10.1)
67
67
  rubocop (>= 0.90.0, < 2.0)
68
68
  rubocop-ast (>= 0.4.0)
69
69
  rubocop-rails (2.9.1)
@@ -95,4 +95,4 @@ DEPENDENCIES
95
95
  sqlite3
96
96
 
97
97
  BUNDLED WITH
98
- 2.2.3
98
+ 2.2.5
@@ -1,14 +1,15 @@
1
1
  module SearchableBy
2
2
  class Column
3
- attr_reader :attr, :type, :match, :match_phrase, :min_length
3
+ attr_reader :attr, :type, :match, :match_phrase, :min_length, :wildcard
4
4
  attr_accessor :node
5
5
 
6
- def initialize(attr, type: :string, match: :all, match_phrase: nil, min_length: 0)
6
+ def initialize(attr, type: :string, match: :all, match_phrase: nil, min_length: 0, wildcard: nil) # rubocop:disable Metrics/ParameterLists
7
7
  @attr = attr
8
8
  @type = type.to_sym
9
9
  @match = match
10
10
  @match_phrase = match_phrase || match
11
11
  @min_length = min_length
12
+ @wildcard = wildcard
12
13
  end
13
14
 
14
15
  def build_condition(value)
@@ -47,6 +48,7 @@ module SearchableBy
47
48
  else
48
49
  term.gsub!('%', '\%')
49
50
  term.gsub!('_', '\_')
51
+ term.gsub!(wildcard, '%') if wildcard
50
52
  scope.and(node.matches("%#{term}%"))
51
53
  end
52
54
  end
@@ -1,12 +1,12 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'searchable-by'
3
- s.version = '0.5.8'
3
+ s.version = '0.5.9'
4
4
  s.authors = ['Dimitrij Denissenko']
5
5
  s.email = ['dimitrij@blacksquaremedia.com']
6
6
  s.summary = 'Generate search scopes'
7
7
  s.description = 'ActiveRecord plugin'
8
8
  s.homepage = 'https://github.com/bsm/sortable-by'
9
- s.license = 'MIT'
9
+ s.license = 'Apache-2.0'
10
10
 
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")
@@ -22,6 +22,12 @@ describe SearchableBy do
22
22
  expect(sql).not_to include(%("posts"."id"))
23
23
  expect(sql).to include(%("posts"."title" LIKE 'foo\\%bar%'))
24
24
  expect(sql).to include(%("posts"."body" LIKE '%foo\\%bar%'))
25
+
26
+ sql = User.search_by('uni*dom').to_sql
27
+ expect(sql).to include(%("users"."country" LIKE '%uni%dom%'))
28
+
29
+ sql = User.search_by('"uni * dom"').to_sql
30
+ expect(sql).to include(%("users"."country" LIKE '%uni % dom%'))
25
31
  end
26
32
 
27
33
  it 'searches' do
@@ -74,4 +80,10 @@ describe SearchableBy do
74
80
  it 'searches integers' do
75
81
  expect(Post.search_by(POSTS[:ab1].id.to_s).count).to eq(1)
76
82
  end
83
+
84
+ it 'supports wildcard searching' do
85
+ expect(User.search_by('uni*dom')).to match_array([USERS[:a]])
86
+ expect(User.search_by('uni*o')).to match_array([USERS[:a], USERS[:b]])
87
+ expect(User.search_by('uni*of*dom')).to be_empty
88
+ end
77
89
  end
data/spec/spec_helper.rb CHANGED
@@ -9,6 +9,7 @@ ActiveRecord::Base.connection.instance_eval do
9
9
  create_table :users do |t|
10
10
  t.string :name
11
11
  t.string :bio
12
+ t.string :country
12
13
  end
13
14
  create_table :posts do |t|
14
15
  t.integer :author_id, null: false
@@ -31,6 +32,7 @@ class User < AbstractModel
31
32
 
32
33
  searchable_by do
33
34
  column :bio, min_length: 3
35
+ column :country, wildcard: '*'
34
36
  end
35
37
  end
36
38
 
@@ -51,8 +53,8 @@ class Post < AbstractModel
51
53
  end
52
54
 
53
55
  USERS = {
54
- a: User.create!(name: 'Alice', bio: 'First user'),
55
- b: User.create!(name: 'Bob', bio: 'Second user'),
56
+ a: User.create!(name: 'Alice', bio: 'First user', country: 'United Kingdom'),
57
+ b: User.create!(name: 'Bob', bio: 'Second user', country: 'United States of America'),
56
58
  }.freeze
57
59
 
58
60
  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.8
4
+ version: 0.5.9
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-02-10 00:00:00.000000000 Z
11
+ date: 2021-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -129,9 +129,9 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".github/workflows/ruby.yml"
132
133
  - ".gitignore"
133
134
  - ".rubocop.yml"
134
- - ".travis.yml"
135
135
  - Gemfile
136
136
  - Gemfile.lock
137
137
  - LICENSE
@@ -149,7 +149,7 @@ files:
149
149
  - spec/spec_helper.rb
150
150
  homepage: https://github.com/bsm/sortable-by
151
151
  licenses:
152
- - MIT
152
+ - Apache-2.0
153
153
  metadata: {}
154
154
  post_install_message:
155
155
  rdoc_options: []
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 3.0
4
- - 2.7
5
- - 2.6
6
- cache: bundler
7
- before_install:
8
- - gem install bundler