Merge pull request #130 from danneu/slug-refactoring

Lean on Inflector for slug transliteration.
This commit is contained in:
Sam 2013-02-11 19:31:16 -08:00
commit 6e74b4fb0c
2 changed files with 20 additions and 15 deletions

View file

@ -6,23 +6,24 @@
module Slug module Slug
def self.for(string) def self.for(string)
str = string.dup.strip.downcase
str = string.dup # The characters we want to replace with a hyphen
str.gsub!(/^\s+|\s+$/, '') str.tr!("·/_,:;.", "\-")
str.downcase!
from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;." # Convert to ASCII or remove if transliteration is unknown.
to = "aaaaeeeeiiiioooouuuunc-------" str = ActiveSupport::Inflector.transliterate(str, '')
idx = 0
from.each_char do |c|
str.gsub!(c, to[idx])
idx += 1
end
# Remove everything except alphanumberic, space, and hyphen characters.
str.gsub!(/[^a-z0-9 -]/, '') str.gsub!(/[^a-z0-9 -]/, '')
# Replace multiple spaces with one hyphen.
str.gsub!(/\s+/, '-') str.gsub!(/\s+/, '-')
# Replace multiple hyphens with one hyphen.
str.gsub!(/\-+/, '-') str.gsub!(/\-+/, '-')
# Remove leading and trailing hyphens
str.gsub!(/^-|-$/, '') str.gsub!(/^-|-$/, '')
str str

View file

@ -1,12 +1,10 @@
# encoding: utf-8 # encoding: utf-8
require 'spec_helper' require 'spec_helper'
require 'slug' require 'slug'
describe Slug do describe Slug do
it 'replaces spaces with hyphens' do it 'replaces spaces with hyphens' do
Slug.for("hello world").should == 'hello-world' Slug.for("hello world").should == 'hello-world'
end end
@ -35,5 +33,11 @@ describe Slug do
Slug.for("...hello").should == "hello" Slug.for("...hello").should == "hello"
end end
it 'handles our initial transliteration' do
from = "àáäâčďèéëěêìíïîľĺňòóöôŕřšťůùúüûýžñç"
to = "aaaacdeeeeeiiiillnoooorrstuuuuuyznc"
Slug.for(from).should == to
end
end end