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 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