mirror of
https://github.com/codeninjasllc/discourse.git
synced 2025-02-24 23:44:09 -05:00
Merge pull request #130 from danneu/slug-refactoring
Lean on Inflector for slug transliteration.
This commit is contained in:
commit
6e74b4fb0c
2 changed files with 20 additions and 15 deletions
23
lib/slug.rb
23
lib/slug.rb
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue