fuzzily 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -0
- data/Appraisals +4 -0
- data/Gemfile.lock +17 -15
- data/README.md +16 -4
- data/fuzzily.gemspec +1 -0
- data/gemfiles/rails23.gemfile.lock +5 -1
- data/gemfiles/rails30.gemfile.lock +5 -1
- data/gemfiles/rails31.gemfile.lock +5 -1
- data/gemfiles/rails32.gemfile.lock +5 -1
- data/gemfiles/rails32_pg.gemfile +9 -0
- data/gemfiles/rails32_pg.gemfile.lock +65 -0
- data/lib/fuzzily/model.rb +2 -2
- data/lib/fuzzily/version.rb +1 -1
- data/spec/fuzzily/migration_spec.rb +1 -1
- data/spec/meta_spec.rb +1 -1
- data/spec/spec_helper.rb +21 -5
- metadata +22 -4
data/.travis.yml
CHANGED
data/Appraisals
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,41 +1,42 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fuzzily (0.2.
|
4
|
+
fuzzily (0.2.2)
|
5
5
|
activerecord (>= 2.3.17)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activemodel (3.2.
|
11
|
-
activesupport (= 3.2.
|
10
|
+
activemodel (3.2.13)
|
11
|
+
activesupport (= 3.2.13)
|
12
12
|
builder (~> 3.0.0)
|
13
|
-
activerecord (3.2.
|
14
|
-
activemodel (= 3.2.
|
15
|
-
activesupport (= 3.2.
|
13
|
+
activerecord (3.2.13)
|
14
|
+
activemodel (= 3.2.13)
|
15
|
+
activesupport (= 3.2.13)
|
16
16
|
arel (~> 3.0.2)
|
17
17
|
tzinfo (~> 0.3.29)
|
18
|
-
activesupport (3.2.
|
19
|
-
i18n (
|
18
|
+
activesupport (3.2.13)
|
19
|
+
i18n (= 0.6.1)
|
20
20
|
multi_json (~> 1.0)
|
21
|
-
appraisal (0.5.
|
21
|
+
appraisal (0.5.2)
|
22
22
|
bundler
|
23
23
|
rake
|
24
24
|
arel (3.0.2)
|
25
25
|
builder (3.0.4)
|
26
26
|
coderay (1.0.9)
|
27
|
-
diff-lcs (1.2.
|
28
|
-
i18n (0.6.
|
27
|
+
diff-lcs (1.2.4)
|
28
|
+
i18n (0.6.1)
|
29
29
|
method_source (0.8.1)
|
30
|
-
multi_json (1.
|
30
|
+
multi_json (1.7.2)
|
31
31
|
mysql2 (0.3.11)
|
32
|
-
|
32
|
+
pg (0.15.1)
|
33
|
+
pry (0.9.12.1)
|
33
34
|
coderay (~> 1.0.5)
|
34
35
|
method_source (~> 0.8)
|
35
36
|
slop (~> 3.4)
|
36
37
|
pry-nav (0.2.3)
|
37
38
|
pry (~> 0.9.10)
|
38
|
-
rake (10.0.
|
39
|
+
rake (10.0.4)
|
39
40
|
rspec (2.13.0)
|
40
41
|
rspec-core (~> 2.13.0)
|
41
42
|
rspec-expectations (~> 2.13.0)
|
@@ -43,7 +44,7 @@ GEM
|
|
43
44
|
rspec-core (2.13.1)
|
44
45
|
rspec-expectations (2.13.0)
|
45
46
|
diff-lcs (>= 1.1.3, < 2.0)
|
46
|
-
rspec-mocks (2.13.
|
47
|
+
rspec-mocks (2.13.1)
|
47
48
|
slop (3.4.4)
|
48
49
|
sqlite3 (1.3.7)
|
49
50
|
tzinfo (0.3.37)
|
@@ -55,6 +56,7 @@ DEPENDENCIES
|
|
55
56
|
appraisal
|
56
57
|
fuzzily!
|
57
58
|
mysql2
|
59
|
+
pg
|
58
60
|
pry
|
59
61
|
pry-nav
|
60
62
|
rake
|
data/README.md
CHANGED
@@ -1,13 +1,25 @@
|
|
1
|
-
# Fuzzily
|
1
|
+
# Fuzzily - fuzzy string matching for ActiveRecord
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/fuzzily.png)](http://badge.fury.io/rb/fuzzily)
|
3
4
|
[![Build Status](https://travis-ci.org/mezis/fuzzily.png?branch=master)](https://travis-ci.org/mezis/fuzzily)
|
4
5
|
[![Dependency Status](https://gemnasium.com/mezis/fuzzily.png)](https://gemnasium.com/mezis/fuzzily)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/mezis/fuzzily.png)](https://codeclimate.com/github/mezis/fuzzily)
|
5
7
|
|
6
|
-
|
8
|
+
> Show me photos of **Marakech** !
|
9
|
+
>
|
10
|
+
> Here aresome photos of **Marrakesh**, Morroco.
|
11
|
+
> Did you mean **Martanesh**, Albania, **Marakkanam**, India, or **Marasheshty**, Romania?
|
7
12
|
|
13
|
+
Blurrily finds misspelled, prefix, or partial needles in a haystack of
|
14
|
+
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.
|
8
15
|
Loosely inspired from an [old blog post](http://unirec.blogspot.co.uk/2007/12/live-fuzzy-search-using-n-grams-in.html).
|
9
16
|
|
10
|
-
|
17
|
+
Works with ActiveRecord 2.3, 3.0, 3.1, 3.2 on various Rubies.
|
18
|
+
|
19
|
+
If your dateset is big, if you need yet more speed, or do not use ActiveRecord,
|
20
|
+
check out [blurrily](http://github.com/mezis/blurrily), another gem (backed with a C extension)
|
21
|
+
with the same intent.
|
22
|
+
|
11
23
|
|
12
24
|
## Installation
|
13
25
|
|
@@ -100,7 +112,7 @@ the `owner_type` and `fuzzy_field` columns of the `trigrams` table from
|
|
100
112
|
MySQL and pgSQL.
|
101
113
|
|
102
114
|
This is not the default in the gem as ActiveRecord does not suport `ENUM`
|
103
|
-
columns in any version
|
115
|
+
columns in any version.
|
104
116
|
|
105
117
|
|
106
118
|
## License
|
data/fuzzily.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_development_dependency 'pry'
|
21
21
|
gem.add_development_dependency 'pry-nav'
|
22
22
|
gem.add_development_dependency 'sqlite3'
|
23
|
+
gem.add_development_dependency 'pg'
|
23
24
|
gem.add_development_dependency 'mysql2'
|
24
25
|
|
25
26
|
gem.files = `git ls-files`.split($/)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mezis/Dropbox/Development/fuzzily
|
3
3
|
specs:
|
4
|
-
fuzzily (0.
|
4
|
+
fuzzily (0.2.2)
|
5
5
|
activerecord (>= 2.3.17)
|
6
6
|
|
7
7
|
GEM
|
@@ -16,6 +16,8 @@ GEM
|
|
16
16
|
coderay (1.0.9)
|
17
17
|
diff-lcs (1.1.3)
|
18
18
|
method_source (0.8.1)
|
19
|
+
mysql2 (0.3.11)
|
20
|
+
pg (0.14.1)
|
19
21
|
pry (0.9.12)
|
20
22
|
coderay (~> 1.0.5)
|
21
23
|
method_source (~> 0.8)
|
@@ -41,6 +43,8 @@ DEPENDENCIES
|
|
41
43
|
activerecord (~> 2.3.0)
|
42
44
|
appraisal
|
43
45
|
fuzzily!
|
46
|
+
mysql2
|
47
|
+
pg
|
44
48
|
pry
|
45
49
|
pry-nav
|
46
50
|
rake
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mezis/Dropbox/Development/fuzzily
|
3
3
|
specs:
|
4
|
-
fuzzily (0.
|
4
|
+
fuzzily (0.2.2)
|
5
5
|
activerecord (>= 2.3.17)
|
6
6
|
|
7
7
|
GEM
|
@@ -26,6 +26,8 @@ GEM
|
|
26
26
|
diff-lcs (1.1.3)
|
27
27
|
i18n (0.5.0)
|
28
28
|
method_source (0.8.1)
|
29
|
+
mysql2 (0.3.11)
|
30
|
+
pg (0.15.1)
|
29
31
|
pry (0.9.12)
|
30
32
|
coderay (~> 1.0.5)
|
31
33
|
method_source (~> 0.8)
|
@@ -52,6 +54,8 @@ DEPENDENCIES
|
|
52
54
|
activerecord (~> 3.0.0)
|
53
55
|
appraisal
|
54
56
|
fuzzily!
|
57
|
+
mysql2
|
58
|
+
pg
|
55
59
|
pry
|
56
60
|
pry-nav
|
57
61
|
rake
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mezis/Dropbox/Development/fuzzily
|
3
3
|
specs:
|
4
|
-
fuzzily (0.
|
4
|
+
fuzzily (0.2.2)
|
5
5
|
activerecord (>= 2.3.17)
|
6
6
|
|
7
7
|
GEM
|
@@ -28,6 +28,8 @@ GEM
|
|
28
28
|
i18n (0.6.1)
|
29
29
|
method_source (0.8.1)
|
30
30
|
multi_json (1.6.1)
|
31
|
+
mysql2 (0.3.11)
|
32
|
+
pg (0.15.1)
|
31
33
|
pry (0.9.12)
|
32
34
|
coderay (~> 1.0.5)
|
33
35
|
method_source (~> 0.8)
|
@@ -54,6 +56,8 @@ DEPENDENCIES
|
|
54
56
|
activerecord (~> 3.1.0)
|
55
57
|
appraisal
|
56
58
|
fuzzily!
|
59
|
+
mysql2
|
60
|
+
pg
|
57
61
|
pry
|
58
62
|
pry-nav
|
59
63
|
rake
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mezis/Dropbox/Development/fuzzily
|
3
3
|
specs:
|
4
|
-
fuzzily (0.
|
4
|
+
fuzzily (0.2.2)
|
5
5
|
activerecord (>= 2.3.17)
|
6
6
|
|
7
7
|
GEM
|
@@ -28,6 +28,8 @@ GEM
|
|
28
28
|
i18n (0.6.1)
|
29
29
|
method_source (0.8.1)
|
30
30
|
multi_json (1.6.1)
|
31
|
+
mysql2 (0.3.11)
|
32
|
+
pg (0.15.1)
|
31
33
|
pry (0.9.12)
|
32
34
|
coderay (~> 1.0.5)
|
33
35
|
method_source (~> 0.8)
|
@@ -54,6 +56,8 @@ DEPENDENCIES
|
|
54
56
|
activerecord (~> 3.2.0)
|
55
57
|
appraisal
|
56
58
|
fuzzily!
|
59
|
+
mysql2
|
60
|
+
pg
|
57
61
|
pry
|
58
62
|
pry-nav
|
59
63
|
rake
|
@@ -0,0 +1,65 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /Users/mezis/Dropbox/Development/fuzzily
|
3
|
+
specs:
|
4
|
+
fuzzily (0.2.2)
|
5
|
+
activerecord (>= 2.3.17)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (3.2.12)
|
11
|
+
activesupport (= 3.2.12)
|
12
|
+
builder (~> 3.0.0)
|
13
|
+
activerecord (3.2.12)
|
14
|
+
activemodel (= 3.2.12)
|
15
|
+
activesupport (= 3.2.12)
|
16
|
+
arel (~> 3.0.2)
|
17
|
+
tzinfo (~> 0.3.29)
|
18
|
+
activesupport (3.2.12)
|
19
|
+
i18n (~> 0.6)
|
20
|
+
multi_json (~> 1.0)
|
21
|
+
appraisal (0.5.1)
|
22
|
+
bundler
|
23
|
+
rake
|
24
|
+
arel (3.0.2)
|
25
|
+
builder (3.0.4)
|
26
|
+
coderay (1.0.9)
|
27
|
+
diff-lcs (1.2.2)
|
28
|
+
i18n (0.6.4)
|
29
|
+
method_source (0.8.1)
|
30
|
+
multi_json (1.7.2)
|
31
|
+
mysql2 (0.3.11)
|
32
|
+
pg (0.15.1)
|
33
|
+
pry (0.9.12)
|
34
|
+
coderay (~> 1.0.5)
|
35
|
+
method_source (~> 0.8)
|
36
|
+
slop (~> 3.4)
|
37
|
+
pry-nav (0.2.3)
|
38
|
+
pry (~> 0.9.10)
|
39
|
+
rake (10.0.4)
|
40
|
+
rspec (2.13.0)
|
41
|
+
rspec-core (~> 2.13.0)
|
42
|
+
rspec-expectations (~> 2.13.0)
|
43
|
+
rspec-mocks (~> 2.13.0)
|
44
|
+
rspec-core (2.13.1)
|
45
|
+
rspec-expectations (2.13.0)
|
46
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
47
|
+
rspec-mocks (2.13.0)
|
48
|
+
slop (3.4.4)
|
49
|
+
sqlite3 (1.3.7)
|
50
|
+
tzinfo (0.3.37)
|
51
|
+
|
52
|
+
PLATFORMS
|
53
|
+
ruby
|
54
|
+
|
55
|
+
DEPENDENCIES
|
56
|
+
activerecord (~> 3.2.0)
|
57
|
+
appraisal
|
58
|
+
fuzzily!
|
59
|
+
mysql2
|
60
|
+
pg
|
61
|
+
pry
|
62
|
+
pry-nav
|
63
|
+
rake
|
64
|
+
rspec
|
65
|
+
sqlite3
|
data/lib/fuzzily/model.rb
CHANGED
@@ -38,8 +38,8 @@ module Fuzzily
|
|
38
38
|
def matches_for(text)
|
39
39
|
trigrams = Fuzzily::String.new(text).trigrams
|
40
40
|
self.
|
41
|
-
scoped(:select => 'owner_id, owner_type, count(*) AS matches, score').
|
42
|
-
scoped(:group =>
|
41
|
+
scoped(:select => 'owner_id, owner_type, count(*) AS matches, MAX(score) AS score').
|
42
|
+
scoped(:group => 'owner_id, owner_type').
|
43
43
|
scoped(:order => 'matches DESC, score ASC').
|
44
44
|
with_trigram(trigrams).
|
45
45
|
map(&:owner)
|
data/lib/fuzzily/version.rb
CHANGED
@@ -19,7 +19,7 @@ describe Fuzzily::Migration do
|
|
19
19
|
subject.trigrams_table_name = :foobars
|
20
20
|
silence_stream(STDOUT) { subject.up }
|
21
21
|
expect {
|
22
|
-
ActiveRecord::Base.connection.execute('INSERT INTO
|
22
|
+
ActiveRecord::Base.connection.execute('INSERT INTO foobars (score) VALUES (1)')
|
23
23
|
}.to_not raise_error
|
24
24
|
end
|
25
25
|
|
data/spec/meta_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -23,10 +23,24 @@ end
|
|
23
23
|
RSpec.configure do |config|
|
24
24
|
config.before(:each) do
|
25
25
|
# Setup test database
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
|
27
|
+
if ENV['FUZZILY_USE_PG']
|
28
|
+
ActiveRecord::Base.establish_connection(
|
29
|
+
:adapter => 'postgresql',
|
30
|
+
:database => 'fuzzily_test',
|
31
|
+
:host => 'localhost',
|
32
|
+
:username => 'postgres'
|
33
|
+
)
|
34
|
+
|
35
|
+
ActiveRecord::Base.connection.execute 'DROP TABLE IF EXISTS trigrams;'
|
36
|
+
ActiveRecord::Base.connection.execute 'DROP TABLE IF EXISTS stuffs;'
|
37
|
+
ActiveRecord::Base.connection.execute 'DROP TABLE IF EXISTS foobars;'
|
38
|
+
else
|
39
|
+
ActiveRecord::Base.establish_connection(
|
40
|
+
:adapter => 'sqlite3',
|
41
|
+
:database => Database.to_s
|
42
|
+
)
|
43
|
+
end
|
30
44
|
|
31
45
|
def prepare_trigrams_table
|
32
46
|
silence_stream(STDOUT) do
|
@@ -43,6 +57,8 @@ RSpec.configure do |config|
|
|
43
57
|
end
|
44
58
|
|
45
59
|
config.after(:each) do
|
46
|
-
|
60
|
+
unless ENV['FUZZILY_USE_PG']
|
61
|
+
Database.delete if Database.exist?
|
62
|
+
end
|
47
63
|
end
|
48
64
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuzzily
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03
|
12
|
+
date: 2013-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -123,6 +123,22 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: pg
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
126
142
|
- !ruby/object:Gem::Dependency
|
127
143
|
name: mysql2
|
128
144
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,6 +181,8 @@ files:
|
|
165
181
|
- gemfiles/rails31.gemfile.lock
|
166
182
|
- gemfiles/rails32.gemfile
|
167
183
|
- gemfiles/rails32.gemfile.lock
|
184
|
+
- gemfiles/rails32_pg.gemfile
|
185
|
+
- gemfiles/rails32_pg.gemfile.lock
|
168
186
|
- lib/fuzzily.rb
|
169
187
|
- lib/fuzzily/migration.rb
|
170
188
|
- lib/fuzzily/model.rb
|
@@ -191,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
209
|
version: '0'
|
192
210
|
segments:
|
193
211
|
- 0
|
194
|
-
hash:
|
212
|
+
hash: 2078821306338560416
|
195
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
214
|
none: false
|
197
215
|
requirements:
|
@@ -200,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
218
|
version: '0'
|
201
219
|
segments:
|
202
220
|
- 0
|
203
|
-
hash:
|
221
|
+
hash: 2078821306338560416
|
204
222
|
requirements: []
|
205
223
|
rubyforge_project:
|
206
224
|
rubygems_version: 1.8.23
|