psql_autocomplete 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98170622f62b893280f5754ef14820a2e8c9a8d4
4
- data.tar.gz: e3cd2c447ecd7d5a1f8793823aa9cad62cb41d95
3
+ metadata.gz: 610efb95add64e7302adbb746e7012bd0b80b47e
4
+ data.tar.gz: 19b7befff50ba4fb43d0e7c3c99706be75739bcb
5
5
  SHA512:
6
- metadata.gz: cc0d195a03210121f0213f8c19b413890f7977163ab67d59ef0e0c4c00f32aea5d242a27efe02ec9b9ea919ffccf11faf5f3075adc80a62c0c9b525ddde1fa59
7
- data.tar.gz: 76d5ce05dfb75316959c93109ba88a7b2f130dddada5b38f2863ca7e8c8c8c8e5e184c82f48ce32575a99eb1350e540fc19a87e86c563210316e85dfc7f52a9e
6
+ metadata.gz: 899817802739de3f29196b0d96ec6bf23a1e8cf4b9bcb51669fba09d58bb7ac5ae98d6518e09431c5eff73bf56e2463f8107bfc64e15ef80dd055fe851f6d077
7
+ data.tar.gz: 8a08c76f956c0026f159d5424186f0d56c581c1172ef237a0c4e1633da37eae39f88cc67e3310bec21d964382ed7c757f820545dd8f55f6d6c3019b865b2eb44
data/README.md CHANGED
@@ -31,8 +31,13 @@ class Contact < ActiveRecord::Base
31
31
  extend PsqlAutocomplete
32
32
  end
33
33
 
34
- # > Contact.autocomplete_query('John', [:first_name, :last_name])
35
- # => "to_tsvector('simple', coalesce(first_name,'') || ' ' || coalesce(last_name,'')) @@ to_tsquery('simple', 'John:*')"
34
+ Contact.autocomplete_query('John', [:first_name, :last_name])
35
+ # => "(coalesce(lower(regexp_replace(first_name, '[:'']', '', 'g')), '') || ' ' || coalesce(lower(regexp_replace(last_name, '[:'']', '', 'g')), ''))::tsvector @@ $$'john':*$$::tsquery"
36
+
37
+ Contact.autocomplete_query('John', [:first_name, :last_name], unaccent: true)
38
+ # => => "(unaccent(coalesce(lower(regexp_replace(first_name, '[:'']', '', 'g')), '')) || ' ' || unaccent(coalesce(lower(regexp_replace(last_name, '[:'']', '', 'g')), '')))::tsvector @@ unaccent($$'john':*$$)::tsquery"
39
+
40
+ # You will need to `create extension unaccent` for this option to work
36
41
 
37
42
  # Actual search
38
43
  class Contact < ActiveRecord::Base
@@ -43,7 +48,7 @@ class Contact < ActiveRecord::Base
43
48
  end
44
49
  end
45
50
 
46
- # > Contact.autocomplete('Jules')
51
+ Contact.autocomplete('Jules')
47
52
  # => [#<Contact:0x0x007fd2be761220>, #<Contact:0x007fd2be760938>, ...]
48
53
  ```
49
54
 
@@ -1,3 +1,3 @@
1
1
  module PsqlAutocomplete
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -4,27 +4,39 @@ require 'psql_autocomplete/version'
4
4
  # on the postgresql full text search engine
5
5
  module PsqlAutocomplete
6
6
  # Returns a postgres FTS query injectable in a where clause
7
- def autocomplete_query(sentence, fields)
8
- "(#{tsvector(fields)})::tsvector @@ $$#{tsquery(sentence)}$$::tsquery"
7
+ def autocomplete_query(sentence, fields, unaccent: false)
8
+ "(#{tsvector(fields, unaccent)})::tsvector @@ " \
9
+ "#{tsquery(sentence, unaccent)}::tsquery"
9
10
  end
10
11
 
11
12
  private
12
13
 
13
- def tsvector(fields)
14
- fields.map(&method(:sql_sanitize_column)).join(" || ' ' || ")
14
+ def tsvector(fields, unaccent)
15
+ sanitize = method(:sql_sanitize_column).curry[unaccent]
16
+ fields.map(&sanitize).join(" || ' ' || ")
15
17
  end
16
18
 
17
- def sql_sanitize_column(field)
18
- "coalesce(lower(regexp_replace(#{field}, '[:'']', '', 'g')), '')"
19
+ def sql_sanitize_column(unaccent, field)
20
+ res = "coalesce(lower(regexp_replace(#{field}, '[:'']', '', 'g')), '')"
21
+
22
+ return res unless unaccent
23
+
24
+ "unaccent(#{res})"
19
25
  end
20
26
 
21
- def tsquery(sentence)
22
- sentence.
27
+ def tsquery(sentence, unaccent)
28
+ query = sentence.
23
29
  downcase.
24
30
  split(' ').
25
31
  map(&:strip).
26
32
  compact.
27
33
  map { |q| "'#{q.gsub("'", "''")}':*" }.
28
34
  join(' & ')
35
+
36
+ query = "$$#{query}$$"
37
+
38
+ return query unless unaccent
39
+
40
+ "unaccent(#{query})"
29
41
  end
30
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psql_autocomplete
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - JobTeaser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-07 00:00:00.000000000 Z
11
+ date: 2017-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler