wulffeld_slug 0.0.22 → 0.0.23
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/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
|