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 CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wulffeld_slug (0.0.22)
4
+ wulffeld_slug (0.0.23)
5
5
  activesupport (>= 3.1.0)
6
6
  babosa (>= 0.3.7)
7
7
  wulffeld_slug
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.22
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, :bulgarian, :cyrillic, :danish, :german, :greek, :macedonian, :norwegian, :romanian, :russian, :serbian, :spanish, :swedish, :ukrainian]
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
- word = Babosa::Identifier.new(word).transliterate!(kind)
42
- break if word =~ /^[[:ascii:]]+$/
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!(/[^a-zA-Z0-9]+/i, '-')
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
- ["«Огни Уфы»", "ogni-ufy"],
16
- ["Развлекательный Комплекс «Огни Уфы», «Колизео»", "razvlekatelinyi-komplekz-ogni-ufy-kolizeo"]
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
@@ -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 == "dvorec-sporta"
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 == "dvorec-sporta-russia"
97
+ venue.slug.should == "dvorets-sporta-russia"
98
98
  end
99
99
  end
100
100
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wulffeld_slug"
8
- s.version = "0.0.22"
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