fonetica 0.2.0 → 0.3.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/.gitignore +1 -0
- data/Gemfile.lock +4 -45
- data/fonetica.gemspec +1 -3
- data/lib/fonetica.rb +43 -2
- data/lib/fonetica/core_ext/string.rb +2 -37
- data/lib/fonetica/version.rb +1 -1
- data/spec/fonetica_spec.rb +72 -72
- data/spec/spec_helper.rb +0 -19
- metadata +11 -47
- data/lib/fonetica/active_record.rb +0 -28
- data/lib/fonetica/railtie.rb +0 -9
- data/spec/active_record_spec.rb +0 -36
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,52 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fonetica (0.
|
5
|
-
activerecord (>= 3.0.0)
|
4
|
+
fonetica (0.3.0)
|
6
5
|
activesupport (>= 3.0.0)
|
6
|
+
i18n (>= 0.4.1)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
-
abstract (1.0.0)
|
12
|
-
actionpack (3.0.1)
|
13
|
-
activemodel (= 3.0.1)
|
14
|
-
activesupport (= 3.0.1)
|
15
|
-
builder (~> 2.1.2)
|
16
|
-
erubis (~> 2.6.6)
|
17
|
-
i18n (~> 0.4.1)
|
18
|
-
rack (~> 1.2.1)
|
19
|
-
rack-mount (~> 0.6.12)
|
20
|
-
rack-test (~> 0.5.4)
|
21
|
-
tzinfo (~> 0.3.23)
|
22
|
-
activemodel (3.0.1)
|
23
|
-
activesupport (= 3.0.1)
|
24
|
-
builder (~> 2.1.2)
|
25
|
-
i18n (~> 0.4.1)
|
26
|
-
activerecord (3.0.1)
|
27
|
-
activemodel (= 3.0.1)
|
28
|
-
activesupport (= 3.0.1)
|
29
|
-
arel (~> 1.0.0)
|
30
|
-
tzinfo (~> 0.3.23)
|
31
11
|
activesupport (3.0.1)
|
32
|
-
arel (1.0.1)
|
33
|
-
activesupport (~> 3.0.0)
|
34
|
-
builder (2.1.2)
|
35
12
|
diff-lcs (1.1.2)
|
36
|
-
|
37
|
-
abstract (>= 1.0.0)
|
38
|
-
i18n (0.4.1)
|
39
|
-
rack (1.2.1)
|
40
|
-
rack-mount (0.6.13)
|
41
|
-
rack (>= 1.0.0)
|
42
|
-
rack-test (0.5.6)
|
43
|
-
rack (>= 1.0)
|
44
|
-
railties (3.0.1)
|
45
|
-
actionpack (= 3.0.1)
|
46
|
-
activesupport (= 3.0.1)
|
47
|
-
rake (>= 0.8.4)
|
48
|
-
thor (~> 0.14.0)
|
49
|
-
rake (0.8.7)
|
13
|
+
i18n (0.4.2)
|
50
14
|
rspec (2.0.0)
|
51
15
|
rspec-core (= 2.0.0)
|
52
16
|
rspec-expectations (= 2.0.0)
|
@@ -57,17 +21,12 @@ GEM
|
|
57
21
|
rspec-mocks (2.0.0)
|
58
22
|
rspec-core (= 2.0.0)
|
59
23
|
rspec-expectations (= 2.0.0)
|
60
|
-
sqlite3-ruby (1.3.1)
|
61
|
-
thor (0.14.3)
|
62
|
-
tzinfo (0.3.23)
|
63
24
|
|
64
25
|
PLATFORMS
|
65
26
|
ruby
|
66
27
|
|
67
28
|
DEPENDENCIES
|
68
|
-
activerecord (>= 3.0.0)
|
69
29
|
activesupport (>= 3.0.0)
|
70
30
|
fonetica!
|
71
|
-
|
31
|
+
i18n (>= 0.4.1)
|
72
32
|
rspec (>= 2.0.0)
|
73
|
-
sqlite3-ruby (>= 1.3.1)
|
data/fonetica.gemspec
CHANGED
@@ -15,8 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
18
|
-
s.add_dependency(%q<
|
19
|
-
s.add_development_dependency(%q<railties>, [">= 3.0.0"])
|
18
|
+
s.add_dependency(%q<i18n>, [">= 0.4.1"])
|
20
19
|
s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
|
21
|
-
s.add_development_dependency(%q<sqlite3-ruby>, [">= 1.3.1"])
|
22
20
|
end
|
data/lib/fonetica.rb
CHANGED
@@ -1,6 +1,47 @@
|
|
1
|
+
require 'i18n'
|
2
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
3
|
+
require 'active_support/inflector/transliterate'
|
1
4
|
require 'fonetica/core_ext/string'
|
2
|
-
require 'fonetica/railtie' if defined?(Rails)
|
3
5
|
|
4
6
|
module Fonetica
|
5
|
-
|
7
|
+
extend self
|
8
|
+
|
9
|
+
mattr_accessor :replacements, :instance_writer => false
|
10
|
+
|
11
|
+
self.replacements = [
|
12
|
+
['Y', 'I'],
|
13
|
+
[/BR|BL/, 'B'],
|
14
|
+
['PH', 'F'],
|
15
|
+
[/MG|NG|RG/, 'G'],
|
16
|
+
[/GE|GI|RJ|MJ|NJ/, 'J'],
|
17
|
+
[/GR|GL/, 'G'],
|
18
|
+
[/CE|CI|CH/, 'S'],
|
19
|
+
[/PT|CT/, 'T'],
|
20
|
+
['CS', 'S'],
|
21
|
+
[/Q|C|CA|CO|CU|CK/, 'K'],
|
22
|
+
['LH', 'L'],
|
23
|
+
['RM', 'SM'],
|
24
|
+
['N', 'M'],
|
25
|
+
[/MD|GM|AO\b/, 'M'],
|
26
|
+
['NH', 'N'],
|
27
|
+
['PR', 'P'],
|
28
|
+
[/X|TS|C|Z|RS/, 'S'],
|
29
|
+
[/TR|TL/, 'T'],
|
30
|
+
[/LT|RT|ST/, 'T'],
|
31
|
+
['W', 'V'],
|
32
|
+
[/[SZRMNL]\b/, ''],
|
33
|
+
['L', 'R'],
|
34
|
+
[/[AEIOUH]/, '']
|
35
|
+
]
|
36
|
+
|
37
|
+
def foneticalize(word)
|
38
|
+
result = word.to_s.gsub(/ç/i, 's')
|
39
|
+
result = I18n.transliterate(result).upcase
|
40
|
+
|
41
|
+
replacements.each do |search, replace|
|
42
|
+
result.gsub!(search, replace)
|
43
|
+
end
|
44
|
+
|
45
|
+
result.squeeze
|
46
|
+
end
|
6
47
|
end
|
@@ -1,40 +1,5 @@
|
|
1
|
-
require 'active_support'
|
2
|
-
|
3
1
|
class String
|
4
|
-
|
5
|
-
|
6
|
-
[/B[RL]/, 'B'],
|
7
|
-
[/PH/, 'F'],
|
8
|
-
[/[MNR]G/, 'G'],
|
9
|
-
[/G[EI]|[RMN]J/, 'J'],
|
10
|
-
[/G[RL]/, 'G'],
|
11
|
-
[/C[EIH]/, 'S'],
|
12
|
-
[/[PC]T/, 'T'],
|
13
|
-
[/CS/, 'S'],
|
14
|
-
[/Q|C[AOUK]?/, 'K'],
|
15
|
-
[/LH/, 'L'],
|
16
|
-
[/RM/, 'SM'],
|
17
|
-
[/N/, 'M'],
|
18
|
-
[/MD|GM|AO\b/, 'M'],
|
19
|
-
[/NH/, 'N'],
|
20
|
-
[/PR/, 'P'],
|
21
|
-
[/X|TS|C|Z|RS/, 'S'],
|
22
|
-
[/T[RL]/, 'T'],
|
23
|
-
[/[LRS]T/, 'T'],
|
24
|
-
[/W/, 'V'],
|
25
|
-
[/[SZRMNL]\b/, ''],
|
26
|
-
[/L/, 'R'],
|
27
|
-
[/[AEIOUH]/, '']
|
28
|
-
]
|
29
|
-
|
30
|
-
def fonetica
|
31
|
-
word = self.gsub(/ç/i, 's') # special case
|
32
|
-
word = I18n.transliterate(word).upcase
|
33
|
-
|
34
|
-
FONETICA.each do |search, replace|
|
35
|
-
word.gsub!(search, replace)
|
36
|
-
end
|
37
|
-
|
38
|
-
word.squeeze
|
2
|
+
def foneticalize
|
3
|
+
Fonetica.foneticalize(self)
|
39
4
|
end
|
40
5
|
end
|
data/lib/fonetica/version.rb
CHANGED
data/spec/fonetica_spec.rb
CHANGED
@@ -3,242 +3,242 @@ require 'spec_helper'
|
|
3
3
|
describe 'Fonetica' do
|
4
4
|
context 'BR = BL = B' do
|
5
5
|
it '"broco" and "bloco" should fonetica to "BK"' do
|
6
|
-
'broco'.
|
7
|
-
'bloco'.
|
6
|
+
'broco'.foneticalize.should == 'BK'
|
7
|
+
'bloco'.foneticalize.should == 'BK'
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'CA = CO = CU = CK = K' do
|
12
12
|
it '"casa" and "kasa" should fonetica to "KS"' do
|
13
|
-
'casa'.
|
14
|
-
'kasa'.
|
13
|
+
'casa'.foneticalize.should == 'KS'
|
14
|
+
'kasa'.foneticalize.should == 'KS'
|
15
15
|
end
|
16
16
|
|
17
17
|
it '"coroar" and "koroar" should fonetica to "KR"' do
|
18
|
-
'coroar'.
|
19
|
-
'koroar'.
|
18
|
+
'coroar'.foneticalize.should == 'KR'
|
19
|
+
'koroar'.foneticalize.should == 'KR'
|
20
20
|
end
|
21
21
|
|
22
22
|
it '"cuba" and "kuba" should fonetica to "KB"' do
|
23
|
-
'cuba'.
|
24
|
-
'kuba'.
|
23
|
+
'cuba'.foneticalize.should == 'KB'
|
24
|
+
'kuba'.foneticalize.should == 'KB'
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'CE = CI = Ç = S' do
|
29
29
|
it '"cela" and "sela" should fonetica to "SR"' do
|
30
|
-
'cela'.
|
31
|
-
'sela'.
|
30
|
+
'cela'.foneticalize.should == 'SR'
|
31
|
+
'sela'.foneticalize.should == 'SR'
|
32
32
|
end
|
33
33
|
|
34
34
|
it '"circo" and "sirco" should fonetica to "SRK"' do
|
35
|
-
'circo'.
|
36
|
-
'sirco'.
|
35
|
+
'circo'.foneticalize.should == 'SRK'
|
36
|
+
'sirco'.foneticalize.should == 'SRK'
|
37
37
|
end
|
38
38
|
|
39
39
|
it '"roça" and "rosa" should fonetica to "RS"' do
|
40
|
-
'roça'.
|
41
|
-
'rosa'.
|
40
|
+
'roça'.foneticalize.should == 'RS'
|
41
|
+
'rosa'.foneticalize.should == 'RS'
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
context 'CH = X = S' do
|
46
46
|
it '"ameixa" and "ameicha" should fonetica to "MS"' do
|
47
|
-
'ameixa'.
|
48
|
-
'ameicha'.
|
47
|
+
'ameixa'.foneticalize.should == 'MS'
|
48
|
+
'ameicha'.foneticalize.should == 'MS'
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'CS = S' do
|
53
53
|
it '"toracs" and "torax" should fonetica to "TR"' do
|
54
|
-
'toracs'.
|
55
|
-
'torax'.
|
54
|
+
'toracs'.foneticalize.should == 'TR'
|
55
|
+
'torax'.foneticalize.should == 'TR'
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
context 'CT = T' do
|
60
60
|
it '"compactar" and "compatar" should fonetica to "KMPT"' do
|
61
|
-
'compactar'.
|
62
|
-
'compatar'.
|
61
|
+
'compactar'.foneticalize.should == 'KMPT'
|
62
|
+
'compatar'.foneticalize.should == 'KMPT'
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
context 'BT = T' do
|
67
67
|
it '"batista" and "baptista" should fonetica to "BT"' do
|
68
|
-
'batista'.
|
69
|
-
'baptista'.
|
68
|
+
'batista'.foneticalize.should == 'BT'
|
69
|
+
'baptista'.foneticalize.should == 'BT'
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
context 'GA = GO = GU = GL = GR = G' do
|
74
74
|
it '"gana" should fonetica to "KMPT"' do
|
75
|
-
'gana'.
|
75
|
+
'gana'.foneticalize.should == 'GM'
|
76
76
|
end
|
77
77
|
|
78
78
|
it '"gostar" should fonetica to "GT"' do
|
79
|
-
'gostar'.
|
79
|
+
'gostar'.foneticalize.should == 'GT'
|
80
80
|
end
|
81
81
|
|
82
82
|
it '"guabiru" should fonetica to "GBR"' do
|
83
|
-
'guabiru'.
|
83
|
+
'guabiru'.foneticalize.should == 'GBR'
|
84
84
|
end
|
85
85
|
|
86
86
|
it '"negro" and "nego" should fonetica to "MG"' do
|
87
|
-
'negro'.
|
88
|
-
'nego'.
|
87
|
+
'negro'.foneticalize.should == 'MG'
|
88
|
+
'nego'.foneticalize.should == 'MG'
|
89
89
|
end
|
90
90
|
|
91
91
|
it '"hieróglifo" and "hierógrifo" should fonetica to "RGF"' do
|
92
|
-
'hieróglifo'.
|
93
|
-
'hierógrifo'.
|
92
|
+
'hieróglifo'.foneticalize.should == 'RGF'
|
93
|
+
'hierógrifo'.foneticalize.should == 'RGF'
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
97
|
context 'GE = GI = J' do
|
98
98
|
it '"gene" should fonetica to "JM"' do
|
99
|
-
'gene'.
|
99
|
+
'gene'.foneticalize.should == 'JM'
|
100
100
|
end
|
101
101
|
|
102
102
|
it '"gibi" should fonetica to "JB"' do
|
103
|
-
'gibi'.
|
103
|
+
'gibi'.foneticalize.should == 'JB'
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
107
|
context 'GM = M' do
|
108
108
|
it '"fleugma" should fonetica to "FRM"' do
|
109
|
-
'fleugma'.
|
109
|
+
'fleugma'.foneticalize.should == 'FRM'
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
113
|
context 'L = R' do
|
114
114
|
it '"luminar" and "ruminar" should fonetica to "RM"' do
|
115
|
-
'luminar'.
|
116
|
-
'ruminar'.
|
115
|
+
'luminar'.foneticalize.should == 'RM'
|
116
|
+
'ruminar'.foneticalize.should == 'RM'
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
120
|
context 'N = M' do
|
121
121
|
it '"mudez" and "nudez" should fonetica to "MD"' do
|
122
|
-
'mudez'.
|
123
|
-
'nudez'.
|
122
|
+
'mudez'.foneticalize.should == 'MD'
|
123
|
+
'nudez'.foneticalize.should == 'MD'
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
127
|
context 'MD = D' do
|
128
128
|
it '"comendo" and "comeno" should fonetica to "KM"' do
|
129
|
-
'comendo'.
|
130
|
-
'comeno'.
|
129
|
+
'comendo'.foneticalize.should == 'KM'
|
130
|
+
'comeno'.foneticalize.should == 'KM'
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
context 'MG = G and MJ = J' do
|
135
135
|
it '"bunginganga" and "bugiganga" should fonetica to "BJG"' do
|
136
|
-
'bunginganga'.
|
137
|
-
'bugiganga'.
|
136
|
+
'bunginganga'.foneticalize.should == 'BJG'
|
137
|
+
'bugiganga'.foneticalize.should == 'BJG'
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
141
|
context 'PH = F' do
|
142
142
|
it '"philipe" and "felipe" should fonetica to "FRP"' do
|
143
|
-
'philipe'.
|
144
|
-
'felipe'.
|
143
|
+
'philipe'.foneticalize.should == 'FRP'
|
144
|
+
'felipe'.foneticalize.should == 'FRP'
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
context 'PR = P' do
|
149
149
|
it '"estupro" and "estrupo" should fonetica to "TP"' do
|
150
|
-
'estupro'.
|
151
|
-
'estrupo'.
|
150
|
+
'estupro'.foneticalize.should == 'TP'
|
151
|
+
'estrupo'.foneticalize.should == 'TP'
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
155
|
context 'Q = K' do
|
156
156
|
it '"queijo" and "keijo" should fonetica to "KJ"' do
|
157
|
-
'queijo'.
|
158
|
-
'keijo'.
|
157
|
+
'queijo'.foneticalize.should == 'KJ'
|
158
|
+
'keijo'.foneticalize.should == 'KJ'
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
162
|
context 'RG = G, RS = S, and RT = T' do
|
163
163
|
it '"lagarto" and "largato" should fonetica to "RGT"' do
|
164
|
-
'lagarto'.
|
165
|
-
'largato'.
|
164
|
+
'lagarto'.foneticalize.should == 'RGT'
|
165
|
+
'largato'.foneticalize.should == 'RGT'
|
166
166
|
end
|
167
167
|
|
168
168
|
it '"perspectiva" and "pespectiva" should fonetica to "PSPTV"' do
|
169
|
-
'perspectiva'.
|
170
|
-
'pespectiva'.
|
169
|
+
'perspectiva'.foneticalize.should == 'PSPTV'
|
170
|
+
'pespectiva'.foneticalize.should == 'PSPTV'
|
171
171
|
end
|
172
172
|
|
173
173
|
it '"lagartixa" and "largatixa" should fonetica to "RGTS"' do
|
174
|
-
'lagartixa'.
|
175
|
-
'largatixa'.
|
174
|
+
'lagartixa'.foneticalize.should == 'RGTS'
|
175
|
+
'largatixa'.foneticalize.should == 'RGTS'
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
179
179
|
context 'RM = SM' do
|
180
180
|
it '"mesmo" and "mermo" should fonetica to "MSM"' do
|
181
|
-
'mesmo'.
|
182
|
-
'mermo'.
|
181
|
+
'mesmo'.foneticalize.should == 'MSM'
|
182
|
+
'mermo'.foneticalize.should == 'MSM'
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
186
|
context 'RJ = J' do
|
187
187
|
it '"virgem" and "vige" should fonetica to "VJ"' do
|
188
|
-
'virgem'.
|
189
|
-
'vige'.
|
188
|
+
'virgem'.foneticalize.should == 'VJ'
|
189
|
+
'vige'.foneticalize.should == 'VJ'
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
193
|
context 'ST = T' do
|
194
194
|
it '"superstição" and "supertição" should fonetica to "SPTS"' do
|
195
|
-
'superstição'.
|
196
|
-
'supertição'.
|
195
|
+
'superstição'.foneticalize.should == 'SPTS'
|
196
|
+
'supertição'.foneticalize.should == 'SPTS'
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
200
|
context 'TR = T, TL = T, and TS = T' do
|
201
201
|
it '"estupro" and "estrupo" should fonetica to "TP"' do
|
202
|
-
'estupro'.
|
203
|
-
'estrupo'.
|
202
|
+
'estupro'.foneticalize.should == 'TP'
|
203
|
+
'estrupo'.foneticalize.should == 'TP'
|
204
204
|
end
|
205
205
|
|
206
206
|
it '"contrato" and "contlato" should fonetica to "KMT"' do
|
207
|
-
'contrato'.
|
208
|
-
'contlato'.
|
207
|
+
'contrato'.foneticalize.should == 'KMT'
|
208
|
+
'contlato'.foneticalize.should == 'KMT'
|
209
209
|
end
|
210
210
|
|
211
211
|
it '"kubitscheck" and "kubixeque" should fonetica to "KBSK"' do
|
212
|
-
'kubitscheck'.
|
213
|
-
'kubixeque'.
|
212
|
+
'kubitscheck'.foneticalize.should == 'KBSK'
|
213
|
+
'kubixeque'.foneticalize.should == 'KBSK'
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
217
217
|
context 'W = V' do
|
218
218
|
it '"walter" and "valter" should fonetica to "VT"' do
|
219
|
-
'walter'.
|
220
|
-
'valter'.
|
219
|
+
'walter'.foneticalize.should == 'VT'
|
220
|
+
'valter'.foneticalize.should == 'VT'
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
224
224
|
context 'X = S' do
|
225
225
|
it '"exceder" and "esceder" should fonetica to "SD"' do
|
226
|
-
'exceder'.
|
227
|
-
'esceder'.
|
226
|
+
'exceder'.foneticalize.should == 'SD'
|
227
|
+
'esceder'.foneticalize.should == 'SD'
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
231
231
|
context 'Y = I' do
|
232
232
|
it '"yara" and "iara" should fonetica to "R"' do
|
233
|
-
'yara'.
|
234
|
-
'iara'.
|
233
|
+
'yara'.foneticalize.should == 'R'
|
234
|
+
'iara'.foneticalize.should == 'R'
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
238
238
|
context 'Z = S' do
|
239
239
|
it '"casa" and "caza" should fonetica to "KS"' do
|
240
|
-
'casa'.
|
241
|
-
'caza'.
|
240
|
+
'casa'.foneticalize.should == 'KS'
|
241
|
+
'caza'.foneticalize.should == 'KS'
|
242
242
|
end
|
243
243
|
end
|
244
244
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,3 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
|
-
require 'active_record'
|
4
3
|
require 'fonetica'
|
5
|
-
require 'fonetica/active_record'
|
6
|
-
|
7
|
-
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
8
|
-
ActiveRecord::Migration.verbose = false
|
9
|
-
|
10
|
-
ActiveRecord::Schema.define(:version => 0) do
|
11
|
-
create_table :people do |t|
|
12
|
-
t.string :name
|
13
|
-
t.string :fonetica_name
|
14
|
-
end
|
15
|
-
|
16
|
-
add_index :people, :fonetica_name
|
17
|
-
end
|
18
|
-
|
19
|
-
class Person < ActiveRecord::Base
|
20
|
-
end
|
21
|
-
|
22
|
-
ActiveRecord::Base.send(:include, Fonetica::ActiveRecord)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fonetica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gabriel Sobrinho
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-12-22 00:00:00 -02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -36,41 +36,25 @@ dependencies:
|
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id001
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: i18n
|
40
40
|
prerelease: false
|
41
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
hash:
|
46
|
+
hash: 13
|
47
47
|
segments:
|
48
|
-
- 3
|
49
|
-
- 0
|
50
48
|
- 0
|
51
|
-
|
49
|
+
- 4
|
50
|
+
- 1
|
51
|
+
version: 0.4.1
|
52
52
|
type: :runtime
|
53
53
|
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: railties
|
56
|
-
prerelease: false
|
57
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
hash: 7
|
63
|
-
segments:
|
64
|
-
- 3
|
65
|
-
- 0
|
66
|
-
- 0
|
67
|
-
version: 3.0.0
|
68
|
-
type: :development
|
69
|
-
version_requirements: *id003
|
70
54
|
- !ruby/object:Gem::Dependency
|
71
55
|
name: rspec
|
72
56
|
prerelease: false
|
73
|
-
requirement: &
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
74
58
|
none: false
|
75
59
|
requirements:
|
76
60
|
- - ">="
|
@@ -82,23 +66,7 @@ dependencies:
|
|
82
66
|
- 0
|
83
67
|
version: 2.0.0
|
84
68
|
type: :development
|
85
|
-
version_requirements: *
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: sqlite3-ruby
|
88
|
-
prerelease: false
|
89
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
|
-
requirements:
|
92
|
-
- - ">="
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
hash: 25
|
95
|
-
segments:
|
96
|
-
- 1
|
97
|
-
- 3
|
98
|
-
- 1
|
99
|
-
version: 1.3.1
|
100
|
-
type: :development
|
101
|
-
version_requirements: *id005
|
69
|
+
version_requirements: *id003
|
102
70
|
description:
|
103
71
|
email:
|
104
72
|
- gabriel.sobrinho@gmail.com
|
@@ -119,11 +87,8 @@ files:
|
|
119
87
|
- autotest/discover.rb
|
120
88
|
- fonetica.gemspec
|
121
89
|
- lib/fonetica.rb
|
122
|
-
- lib/fonetica/active_record.rb
|
123
90
|
- lib/fonetica/core_ext/string.rb
|
124
|
-
- lib/fonetica/railtie.rb
|
125
91
|
- lib/fonetica/version.rb
|
126
|
-
- spec/active_record_spec.rb
|
127
92
|
- spec/fonetica_spec.rb
|
128
93
|
- spec/spec_helper.rb
|
129
94
|
has_rdoc: true
|
@@ -161,6 +126,5 @@ signing_key:
|
|
161
126
|
specification_version: 3
|
162
127
|
summary: Phonetic finder for ActiveRecord using BUSCABR algorithm
|
163
128
|
test_files:
|
164
|
-
- spec/active_record_spec.rb
|
165
129
|
- spec/fonetica_spec.rb
|
166
130
|
- spec/spec_helper.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Fonetica
|
2
|
-
module ActiveRecord
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
module ClassMethods
|
6
|
-
def has_fonetica_for(column)
|
7
|
-
cattr_accessor :fonetica_column, :fonetica_cache_column
|
8
|
-
|
9
|
-
self.fonetica_column = column
|
10
|
-
self.fonetica_cache_column = :"fonetica_#{column}"
|
11
|
-
|
12
|
-
scope :fonetica, lambda { |fonetica|
|
13
|
-
{
|
14
|
-
:conditions => ["#{quoted_table_name}.#{fonetica_cache_column} LIKE ?", "#{fonetica.to_s.fonetica}%"]
|
15
|
-
}
|
16
|
-
}
|
17
|
-
|
18
|
-
before_save :update_fonetica
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
module InstanceMethods
|
23
|
-
def update_fonetica
|
24
|
-
write_attribute(fonetica_cache_column, read_attribute(fonetica_column).to_s.fonetica)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/lib/fonetica/railtie.rb
DELETED
data/spec/active_record_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'ActiveRecord' do
|
4
|
-
it 'should respond to has_fonetica_for' do
|
5
|
-
Person.should respond_to :has_fonetica_for
|
6
|
-
end
|
7
|
-
|
8
|
-
context 'with fonetica' do
|
9
|
-
before do
|
10
|
-
Person.has_fonetica_for :name
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should create a scope named fonetica' do
|
14
|
-
Person.should respond_to :fonetica
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should set fonetica_column and fonetica_cache_column' do
|
18
|
-
Person.fonetica_column.should == :name
|
19
|
-
Person.fonetica_cache_column.should == :fonetica_name
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should find records using first name' do
|
23
|
-
Person.create(:name => 'iara santos')
|
24
|
-
Person.create(:name => 'yara santos')
|
25
|
-
|
26
|
-
Person.fonetica('iara').should have(2).records
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should find records using first and last name' do
|
30
|
-
Person.create(:name => 'joao baptista')
|
31
|
-
Person.create(:name => 'joao batista')
|
32
|
-
|
33
|
-
Person.fonetica('joao batista').should have(2).records
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|