提交 a4f2ba8f 编写于 作者: A Adam Cigánek 提交者: Michael Koziarski

Modified ActiveSupport::Inflector#parameterize with code from slugalizer...

Modified ActiveSupport::Inflector#parameterize with code from slugalizer (http://github.com/henrik/slugalizer)

Handles trailing and leading slashes, and squashes repeated separators into a single character.
Signed-off-by: NMichael Koziarski <michael@koziarski.com>
[#1034 state:committed]
上级 961e2b86
......@@ -240,9 +240,9 @@ def humanize(lower_case_and_underscored_word)
def demodulize(class_name_in_module)
class_name_in_module.to_s.gsub(/^.*::/, '')
end
# Replaces special characters in a string so that it may be used as part of a 'pretty' URL.
#
#
# ==== Examples
#
# class Person
......@@ -250,14 +250,20 @@ def demodulize(class_name_in_module)
# "#{id}-#{name.parameterize}"
# end
# end
#
#
# @person = Person.find(1)
# # => #<Person id: 1, name: "Donald E. Knuth">
#
#
# <%= link_to(@person.name, person_path %>
# # => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a>
def parameterize(string, sep = '-')
string.mb_chars.normalize(:kd).to_s.gsub(/[^\x00-\x7F]+/, '').gsub(/[^a-z0-9_\-]+/i, sep).downcase
re_sep = Regexp.escape(sep)
string.mb_chars.normalize(:kd). # Decompose accented characters
gsub(/[^\x00-\x7F]+/, ''). # Remove anything non-ASCII entirely (e.g. diacritics).
gsub(/[^a-z0-9\-_\+]+/i, sep). # Turn unwanted chars into the separator.
squeeze(sep). # No more than one of the separator in a row.
gsub(/^#{re_sep}|#{re_sep}$/i, ''). # Remove leading/trailing separator.
downcase
end
# Create the name of a table like Rails does for models to table names. This method
......
......@@ -104,6 +104,12 @@ def test_parameterize
end
end
def test_parameterize_with_custom_separator
StringToParameterized.each do |some_string, parameterized_string|
assert_equal(parameterized_string.gsub('-', '_'), ActiveSupport::Inflector.parameterize(some_string, '_'))
end
end
def test_classify
ClassNameToTableName.each do |class_name, table_name|
assert_equal(class_name, ActiveSupport::Inflector.classify(table_name))
......
......@@ -147,7 +147,10 @@ module InflectorTestCases
"Random text with *(bad)* characters" => "random-text-with-bad-characters",
"Malmö" => "malmo",
"Garçons" => "garcons",
"Allow_Under_Scores" => "allow_under_scores"
"Allow_Under_Scores" => "allow_under_scores",
"Trailing bad characters!@#" => "trailing-bad-characters",
"!@#Leading bad characters" => "leading-bad-characters",
"Squeeze separators" => "squeeze-separators"
}
UnderscoreToHuman = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册