soulmate 0.1.3 → 1.0.0
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.
- data/lib/soulmate/helpers.rb +5 -2
- data/lib/soulmate/version.rb +3 -3
- data/soulmate.gemspec +8 -12
- data/test/samples/venues.json +1 -0
- data/test/test_soulmate.rb +11 -2
- metadata +54 -23
data/lib/soulmate/helpers.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
module Soulmate
|
2
4
|
module Helpers
|
3
5
|
|
@@ -11,8 +13,9 @@ module Soulmate
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def normalize(str)
|
14
|
-
|
16
|
+
# Letter, Mark, Number, Connector_Punctuation (Chinese, Japanese, etc.)
|
17
|
+
str.downcase.gsub(/[^\p{Word}\ ]/i, '').strip
|
15
18
|
end
|
16
19
|
|
17
20
|
end
|
18
|
-
end
|
21
|
+
end
|
data/lib/soulmate/version.rb
CHANGED
data/soulmate.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "soulmate"
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Eric Waller"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-02-04"
|
13
|
+
s.description = "Soulmate is a tool to help solve the common problem of developing a fast autocomplete feature. It uses Redis's sorted sets to build an index of partial words and corresponding top matches, and provides a simple sinatra app to query them. Soulmate finishes your sentences."
|
14
|
+
s.email = "eric@seatgeek.com"
|
15
15
|
s.executables = ["soulmate", "soulmate-web"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
@@ -40,15 +40,11 @@ Gem::Specification.new do |s|
|
|
40
40
|
"test/test.conf",
|
41
41
|
"test/test_soulmate.rb"
|
42
42
|
]
|
43
|
-
s.homepage =
|
43
|
+
s.homepage = "http://github.com/seatgeek/soulmate"
|
44
44
|
s.licenses = ["MIT"]
|
45
45
|
s.require_paths = ["lib"]
|
46
|
-
s.rubygems_version =
|
47
|
-
s.summary =
|
48
|
-
s.test_files = [
|
49
|
-
"test/helper.rb",
|
50
|
-
"test/test_soulmate.rb"
|
51
|
-
]
|
46
|
+
s.rubygems_version = "1.8.24"
|
47
|
+
s.summary = "Redis-backed service for fast autocompleting - extracted from SeatGeek"
|
52
48
|
|
53
49
|
if s.respond_to? :specification_version then
|
54
50
|
s.specification_version = 3
|
data/test/samples/venues.json
CHANGED
@@ -4,3 +4,4 @@
|
|
4
4
|
{"id":29,"term":"Sun Life Stadium","score":75,"data":{"url":"\/sun-life-stadium-tickets\/","subtitle":"Miami, FL"},"aliases":["Dolphins Stadium","Land Shark Stadium"]}
|
5
5
|
{"id":2,"term":"Turner Field","score":50,"data":{"url":"\/turner-field-tickets\/","subtitle":"Atlanta, GA"}}
|
6
6
|
{"id":3,"term":"Citi Field","score":92,"data":{"url":"\/citi-field-tickets\/","subtitle":"Atlanta, GA"},"aliases":["Shea Stadium"]}
|
7
|
+
{"id":8,"term":"中国佛山 李小龙","score":94,"data":{"url":"\/Bruce Lee\/","subtitle":"Chinese Foshan"},"aliases":["Li XiaoLong"]}
|
data/test/test_soulmate.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
require 'helper'
|
2
4
|
|
3
5
|
class TestSoulmate < Test::Unit::TestCase
|
@@ -10,7 +12,7 @@ class TestSoulmate < Test::Unit::TestCase
|
|
10
12
|
|
11
13
|
items_loaded = Soulmate::Loader.new('venues').load(items)
|
12
14
|
|
13
|
-
assert_equal
|
15
|
+
assert_equal 7, items_loaded.size
|
14
16
|
|
15
17
|
matcher = Soulmate::Matcher.new('venues')
|
16
18
|
results = matcher.matches_for_term('stad', :limit => 5)
|
@@ -28,7 +30,7 @@ class TestSoulmate < Test::Unit::TestCase
|
|
28
30
|
|
29
31
|
items_loaded = Soulmate::Loader.new('venues').load(items)
|
30
32
|
|
31
|
-
assert_equal
|
33
|
+
assert_equal 7, items_loaded.size
|
32
34
|
|
33
35
|
matcher = Soulmate::Matcher.new('venues')
|
34
36
|
results = matcher.matches_for_term('land shark stadium', :limit => 5)
|
@@ -36,6 +38,11 @@ class TestSoulmate < Test::Unit::TestCase
|
|
36
38
|
assert_equal 1, results.size
|
37
39
|
assert_equal 'Sun Life Stadium', results[0]['term']
|
38
40
|
|
41
|
+
# Test Chinese
|
42
|
+
results = matcher.matches_for_term('中国', :limit => 5)
|
43
|
+
assert_equal 1, results.size
|
44
|
+
assert_equal '中国佛山 李小龙', results[0]['term']
|
45
|
+
|
39
46
|
# Make sure we don't get dupes between aliases and the original term
|
40
47
|
# this shouldn't happen due to Redis doing an intersect, but just in case!
|
41
48
|
|
@@ -101,5 +108,7 @@ class TestSoulmate < Test::Unit::TestCase
|
|
101
108
|
assert_equal ["te", "tes", "test", "testi", "testin", "th", "thi", "this"], loader.prefixes_for_phrase("testin' this")
|
102
109
|
assert_equal ["te", "tes", "test"], loader.prefixes_for_phrase("test test")
|
103
110
|
assert_equal ["so", "sou", "soul", "soulm", "soulma", "soulmat", "soulmate"], loader.prefixes_for_phrase("SoUlmATE")
|
111
|
+
|
112
|
+
assert_equal ['测试', '测试中', '测试中文', 'te', 'tes', 'test'], loader.prefixes_for_phrase('测试中文 test')
|
104
113
|
end
|
105
114
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soulmate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: redis
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,10 +21,15 @@ dependencies:
|
|
22
21
|
version: '2.0'
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
26
30
|
- !ruby/object:Gem::Dependency
|
27
31
|
name: vegas
|
28
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
29
33
|
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
@@ -33,10 +37,15 @@ dependencies:
|
|
33
37
|
version: 0.1.0
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.1.0
|
37
46
|
- !ruby/object:Gem::Dependency
|
38
47
|
name: sinatra
|
39
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
40
49
|
none: false
|
41
50
|
requirements:
|
42
51
|
- - ! '>='
|
@@ -44,10 +53,15 @@ dependencies:
|
|
44
53
|
version: '1.0'
|
45
54
|
type: :runtime
|
46
55
|
prerelease: false
|
47
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
63
|
name: multi_json
|
50
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
51
65
|
none: false
|
52
66
|
requirements:
|
53
67
|
- - ! '>='
|
@@ -55,10 +69,15 @@ dependencies:
|
|
55
69
|
version: '1.0'
|
56
70
|
type: :runtime
|
57
71
|
prerelease: false
|
58
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.0'
|
59
78
|
- !ruby/object:Gem::Dependency
|
60
79
|
name: shoulda
|
61
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
62
81
|
none: false
|
63
82
|
requirements:
|
64
83
|
- - ! '>='
|
@@ -66,10 +85,15 @@ dependencies:
|
|
66
85
|
version: '0'
|
67
86
|
type: :development
|
68
87
|
prerelease: false
|
69
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
70
94
|
- !ruby/object:Gem::Dependency
|
71
95
|
name: bundler
|
72
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
73
97
|
none: false
|
74
98
|
requirements:
|
75
99
|
- - ~>
|
@@ -77,10 +101,15 @@ dependencies:
|
|
77
101
|
version: '1.0'
|
78
102
|
type: :development
|
79
103
|
prerelease: false
|
80
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.0'
|
81
110
|
- !ruby/object:Gem::Dependency
|
82
111
|
name: jeweler
|
83
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
84
113
|
none: false
|
85
114
|
requirements:
|
86
115
|
- - ~>
|
@@ -88,7 +117,12 @@ dependencies:
|
|
88
117
|
version: '1.5'
|
89
118
|
type: :development
|
90
119
|
prerelease: false
|
91
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.5'
|
92
126
|
description: Soulmate is a tool to help solve the common problem of developing a fast
|
93
127
|
autocomplete feature. It uses Redis's sorted sets to build an index of partial words
|
94
128
|
and corresponding top matches, and provides a simple sinatra app to query them.
|
@@ -123,7 +157,6 @@ files:
|
|
123
157
|
- test/samples/venues.json
|
124
158
|
- test/test.conf
|
125
159
|
- test/test_soulmate.rb
|
126
|
-
has_rdoc: true
|
127
160
|
homepage: http://github.com/seatgeek/soulmate
|
128
161
|
licenses:
|
129
162
|
- MIT
|
@@ -139,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
139
172
|
version: '0'
|
140
173
|
segments:
|
141
174
|
- 0
|
142
|
-
hash:
|
175
|
+
hash: 2119288237740455138
|
143
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
177
|
none: false
|
145
178
|
requirements:
|
@@ -148,10 +181,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
181
|
version: '0'
|
149
182
|
requirements: []
|
150
183
|
rubyforge_project:
|
151
|
-
rubygems_version: 1.
|
184
|
+
rubygems_version: 1.8.24
|
152
185
|
signing_key:
|
153
186
|
specification_version: 3
|
154
187
|
summary: Redis-backed service for fast autocompleting - extracted from SeatGeek
|
155
|
-
test_files:
|
156
|
-
- test/helper.rb
|
157
|
-
- test/test_soulmate.rb
|
188
|
+
test_files: []
|