wulffeld_slug 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/lib/wulffeld_slug/prepare_string.rb +31 -5
- data/spec/lib/prepare_string_spec.rb +8 -2
- data/spec/lib/slug_spec.rb +2 -2
- data/wulffeld_slug.gemspec +85 -1
- metadata +560 -252
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.23
|
@@ -3,6 +3,8 @@ module WulffeldSlug
|
|
3
3
|
attr_accessor :words,
|
4
4
|
:options,
|
5
5
|
:slug
|
6
|
+
|
7
|
+
VALID_WORD_REGEX = /^[\sa-zA-Z0-9-]+$/i
|
6
8
|
|
7
9
|
def initialize(words, options = {})
|
8
10
|
# Original words. Will not be touched.
|
@@ -14,7 +16,7 @@ module WulffeldSlug
|
|
14
16
|
@options = options
|
15
17
|
@options[:max] ||= 239
|
16
18
|
@options[:case] ||= :downcase
|
17
|
-
@options[:kinds] ||= [:latin, :
|
19
|
+
@options[:kinds] ||= [:latin, :danish, :norwegian, :german, :swedish, :spanish, :russian, :bulgarian, :cyrillic, :greek, :macedonian, :romanian, :serbian, :ukrainian]
|
18
20
|
|
19
21
|
@slug = ''
|
20
22
|
|
@@ -30,21 +32,45 @@ module WulffeldSlug
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def prepare_word(word)
|
35
|
+
word = word.dup
|
33
36
|
# Blow away apostrophes
|
34
|
-
word.gsub! /['
|
37
|
+
word.gsub! /['`´]/, ''
|
35
38
|
|
36
39
|
# @ --> at, and & --> and
|
37
40
|
word.gsub! /\s*@\s*/, " at "
|
38
41
|
word.gsub! /\s*&\s*/, " and "
|
39
42
|
|
43
|
+
# First see if transliteration produces something worthwhile.
|
40
44
|
options[:kinds].each do |kind|
|
41
|
-
|
42
|
-
|
45
|
+
w = Babosa::Identifier.new(word).transliterate!(kind)
|
46
|
+
if w =~ VALID_WORD_REGEX && word.length - w.length < 10
|
47
|
+
word = w
|
48
|
+
break
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# More brutality needed.
|
53
|
+
if word !~ VALID_WORD_REGEX
|
54
|
+
potential = []
|
55
|
+
options[:kinds].each do |kind|
|
56
|
+
potential << Babosa::Identifier.new(word).transliterate!(kind).gsub(/[^\sa-zA-Z0-9]+/i, '-').split('-').map(&:strip).reject(&:blank?).join('-')
|
57
|
+
end
|
58
|
+
|
59
|
+
potential.sort {|a,b| b.length <=> a.length }.each do |w|
|
60
|
+
if w =~ VALID_WORD_REGEX
|
61
|
+
word = w
|
62
|
+
break
|
63
|
+
end
|
64
|
+
end
|
43
65
|
end
|
66
|
+
|
44
67
|
word.strip!
|
45
68
|
|
46
69
|
# Convert spaces to dashes.
|
47
|
-
word.gsub!(/[
|
70
|
+
word.gsub!(/[\s]+/i, '-')
|
71
|
+
|
72
|
+
# Remove non-alpha/num.
|
73
|
+
word.gsub!(/[^a-zA-Z0-9-]+/i, '')
|
48
74
|
|
49
75
|
# Remove dashes at start and end of word.
|
50
76
|
word.gsub!(/^\-+/, '')
|
@@ -12,8 +12,14 @@ describe 'WulffeldSlug::PrepareString' do
|
|
12
12
|
describe "preparing various words" do
|
13
13
|
[
|
14
14
|
[["This", "PLACE"], "this-place"],
|
15
|
-
["«Огни Уфы»", "
|
16
|
-
["Развлекательный Комплекс «Огни Уфы», «Колизео»", "razvlekatelinyi-
|
15
|
+
["«Огни Уфы»", "ogny-ufy"],
|
16
|
+
["Развлекательный Комплекс «Огни Уфы», «Колизео»", "razvlekatelinyi-kompleks-ogni-ufy-kolizeo"],
|
17
|
+
["Rider´s Cafe", "riders-cafe"],
|
18
|
+
["Rider`s Cafe", "riders-cafe"],
|
19
|
+
["Rider's Cafe", "riders-cafe"],
|
20
|
+
["o|∞", "o"],
|
21
|
+
["рок клуб (Привокзальна, Залізнична 1 а), Львов", 'rok-klub-privokzalina-zal-znichna-1-a-livov'],
|
22
|
+
["рок клуб 'Старушка' (Привокзальна, Залізнична 1 а)", 'aaa']
|
17
23
|
].each do |orig, result|
|
18
24
|
it "should convert '#{orig}' to '#{result}" do
|
19
25
|
WulffeldSlug::PrepareString.new([*orig]).slug.should == result
|
data/spec/lib/slug_spec.rb
CHANGED
@@ -88,13 +88,13 @@ describe 'WulffeldSlug' do
|
|
88
88
|
it "should transliterate Russian" do
|
89
89
|
article = Article.new(:title => "Дворец Спорта")
|
90
90
|
article.valid?
|
91
|
-
article.slug.should == "
|
91
|
+
article.slug.should == "dvorets-sporta"
|
92
92
|
end
|
93
93
|
|
94
94
|
it "should transliterate all parts" do
|
95
95
|
venue = Venue.new(:name => "Дворец Спорта", :country => "Russia")
|
96
96
|
venue.valid?
|
97
|
-
venue.slug.should == "
|
97
|
+
venue.slug.should == "dvorets-sporta-russia"
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
data/wulffeld_slug.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wulffeld_slug"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.23"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Martin Moen Wulffeld"]
|
@@ -167,6 +167,34 @@ Gem::Specification.new do |s|
|
|
167
167
|
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
168
168
|
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
169
169
|
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
170
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
171
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
172
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
173
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
174
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
175
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
176
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
177
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
178
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
179
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
180
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
181
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
182
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
183
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
184
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
185
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
186
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
187
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
188
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
189
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
190
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
191
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
192
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
193
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
194
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
195
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
196
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
197
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
170
198
|
s.add_runtime_dependency(%q<babosa>, [">= 0.3.7"])
|
171
199
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.1.0"])
|
172
200
|
else
|
@@ -293,6 +321,34 @@ Gem::Specification.new do |s|
|
|
293
321
|
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
294
322
|
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
295
323
|
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
324
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
325
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
326
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
327
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
328
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
329
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
330
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
331
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
332
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
333
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
334
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
335
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
336
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
337
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
338
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
339
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
340
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
341
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
342
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
343
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
344
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
345
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
346
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
347
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
348
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
349
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
350
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
351
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
296
352
|
s.add_dependency(%q<babosa>, [">= 0.3.7"])
|
297
353
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
298
354
|
end
|
@@ -420,6 +476,34 @@ Gem::Specification.new do |s|
|
|
420
476
|
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
421
477
|
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
422
478
|
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
479
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
480
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
481
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
482
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
483
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
484
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
485
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
486
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
487
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
488
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
489
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
490
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
491
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
492
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
493
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
494
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
495
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
496
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
497
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
498
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
499
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
500
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
501
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
502
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
503
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
504
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
505
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
506
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
423
507
|
s.add_dependency(%q<babosa>, [">= 0.3.7"])
|
424
508
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
425
509
|
end
|