fuzzily 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +3 -3
- data/Gemfile.lock +2 -2
- data/README.md +10 -1
- data/lib/fuzzily/searchable.rb +9 -3
- data/lib/fuzzily/version.rb +1 -1
- data/spec/fuzzily/searchable_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c37ee71c17d18b2b0a83263b030b99d006e1fcb6
|
4
|
+
data.tar.gz: d0c4d04349af32e8703bbc12f2b8e01806f39f18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e78e76c739b9cd65ebccb6f9aef1e5e1e9a4f5fdcd4c0dcd93daa83d14d4c3e52dee40627a4bf2a8a6474ae503d0380ece47c47f772b2b7d2940a37622af141
|
7
|
+
data.tar.gz: fc3ee743aa1daafb48040732a4ad5f4dd6c25929d2967365eca67a940e8ba70dd92ba5d6aec86a45f36f751c4d8179dafe12ddfd6511caa900ef064988db44e6
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0-
|
1
|
+
2.0.0-p451
|
data/.travis.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
rvm:
|
2
2
|
- "1.8.7"
|
3
|
-
- "1.9.2"
|
4
3
|
- "1.9.3"
|
5
4
|
- "2.0.0"
|
5
|
+
- "2.1.0"
|
6
6
|
gemfile:
|
7
7
|
- gemfiles/rails23.gemfile
|
8
8
|
- gemfiles/rails30.gemfile
|
@@ -20,12 +20,12 @@ after_script:
|
|
20
20
|
- ./rebund/run upload
|
21
21
|
matrix:
|
22
22
|
exclude:
|
23
|
+
- rvm: 2.1.0
|
24
|
+
gemfile: gemfiles/rails23.gemfile
|
23
25
|
- rvm: 2.0.0
|
24
26
|
gemfile: gemfiles/rails23.gemfile
|
25
27
|
- rvm: 1.8.7
|
26
28
|
gemfile: gemfiles/rails40.gemfile
|
27
|
-
- rvm: 1.9.2
|
28
|
-
gemfile: gemfiles/rails40.gemfile
|
29
29
|
before_script:
|
30
30
|
- psql -c 'create database fuzzily_test;' -U postgres
|
31
31
|
- mysql -e 'create database fuzzily_test;'
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Fuzzily finds misspelled, prefix, or partial needles in a haystack of
|
|
15
15
|
strings. It's a fast, [trigram](http://en.wikipedia.org/wiki/N-gram)-based, database-backed [fuzzy](http://en.wikipedia.org/wiki/Approximate_string_matching) string search/match engine for Rails.
|
16
16
|
Loosely inspired from an [old blog post](http://unirec.blogspot.co.uk/2007/12/live-fuzzy-search-using-n-grams-in.html).
|
17
17
|
|
18
|
-
Tested with ActiveRecord (2.3, 3.0, 3.1, 3.2, 4.0) on various Rubies (1.8.7, 1.9.
|
18
|
+
Tested with ActiveRecord (2.3, 3.0, 3.1, 3.2, 4.0) on various Rubies (1.8.7, 1.9.3, 2.0.0, 2.1.0) and the most common adapters (SQLite3, MySQL, and PostgreSQL).
|
19
19
|
|
20
20
|
If your dateset is big, if you need yet more speed, or do not use ActiveRecord,
|
21
21
|
check out [blurrily](http://github.com/mezis/blurrily), another gem (backed with a C extension)
|
@@ -166,7 +166,16 @@ class Employee < ActiveRecord::Base
|
|
166
166
|
end
|
167
167
|
```
|
168
168
|
|
169
|
+
## Update Trigram index using `sidekiq-delay`
|
169
170
|
|
171
|
+
For larger text, it takes time to build the index. Thus it can be moved into delay task using `sidekiq` + `sidekiq-delay` or `delayed_job` gem, both of them provide the method `delay` to move the execution to background thread by adding option `async`:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
class Employee < ActiveRecord::Base
|
175
|
+
fuzzily_searchable :name, async: true
|
176
|
+
|
177
|
+
end
|
178
|
+
```
|
170
179
|
|
171
180
|
## License
|
172
181
|
|
data/lib/fuzzily/searchable.rb
CHANGED
@@ -40,7 +40,7 @@ module Fuzzily
|
|
40
40
|
private
|
41
41
|
|
42
42
|
def _find_by_fuzzy(_o, pattern, options={})
|
43
|
-
options[:limit] ||= 10
|
43
|
+
options[:limit] ||= 10 unless options.has_key? :limit
|
44
44
|
options[:offset] ||= 0
|
45
45
|
|
46
46
|
trigrams = _o.trigram_class_name.constantize.
|
@@ -112,7 +112,8 @@ module Fuzzily
|
|
112
112
|
:field => field,
|
113
113
|
:trigram_class_name => options.fetch(:class_name, 'Trigram'),
|
114
114
|
:trigram_association => "trigrams_for_#{field}".to_sym,
|
115
|
-
:update_trigrams_method => "update_fuzzy_#{field}!".to_sym
|
115
|
+
:update_trigrams_method => "update_fuzzy_#{field}!".to_sym,
|
116
|
+
:async => options.fetch(:async, false)
|
116
117
|
)
|
117
118
|
|
118
119
|
_add_trigram_association(_o)
|
@@ -126,11 +127,16 @@ module Fuzzily
|
|
126
127
|
end
|
127
128
|
|
128
129
|
define_method _o.update_trigrams_method do
|
129
|
-
|
130
|
+
if _o.async && self.respond_to?(:delay)
|
131
|
+
self.delay._update_fuzzy!(_o)
|
132
|
+
else
|
133
|
+
_update_fuzzy!(_o)
|
134
|
+
end
|
130
135
|
end
|
131
136
|
|
132
137
|
after_save do |record|
|
133
138
|
next unless record.send("#{field}_changed?".to_sym)
|
139
|
+
|
134
140
|
record.send(_o.update_trigrams_method)
|
135
141
|
end
|
136
142
|
|
data/lib/fuzzily/version.rb
CHANGED
@@ -154,6 +154,18 @@ describe Fuzzily::Searchable do
|
|
154
154
|
subject.find_by_fuzzy_name('Paris', :limit => 2).length.should == 2
|
155
155
|
end
|
156
156
|
|
157
|
+
it 'limits results to 10 if limit option is not given' do
|
158
|
+
subject.fuzzily_searchable :name
|
159
|
+
30.times { subject.create!(:name => 'Paris') }
|
160
|
+
subject.find_by_fuzzy_name('Paris').length.should == 10
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'does not limit results it limit option is present and is nil' do
|
164
|
+
subject.fuzzily_searchable :name
|
165
|
+
30.times { subject.create!(:name => 'Paris') }
|
166
|
+
subject.find_by_fuzzy_name('Paris', :limit => nil).length.should == 30
|
167
|
+
end
|
168
|
+
|
157
169
|
it 'honours offset option' do
|
158
170
|
subject.fuzzily_searchable :name
|
159
171
|
3.times { subject.create!(:name => 'Paris') }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuzzily
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julien Letessier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|