diff options
author | Henrik N <henrik@nyh.se> | 2009-03-10 21:36:46 +0000 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-03-10 21:36:46 +0000 |
commit | ea0e41d8fa5a132a2d2771e9785833b7663203ac (patch) | |
tree | 3cde4953b277d9977797ed1d5c21fc7fcacf8153 | |
parent | 4b4e7caffa361a1a3317586d8f498b4ba353adba (diff) | |
download | rails-ea0e41d8fa5a132a2d2771e9785833b7663203ac.tar.gz rails-ea0e41d8fa5a132a2d2771e9785833b7663203ac.tar.bz2 rails-ea0e41d8fa5a132a2d2771e9785833b7663203ac.zip |
Make Inflector#parameterize correctly squeeze multi-character separators [#1489 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
-rw-r--r-- | activesupport/lib/active_support/inflector.rb | 12 | ||||
-rw-r--r-- | activesupport/test/inflector_test.rb | 6 |
2 files changed, 13 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/inflector.rb b/activesupport/lib/active_support/inflector.rb index 5ff6f50fb3..3ed30bdf56 100644 --- a/activesupport/lib/active_support/inflector.rb +++ b/activesupport/lib/active_support/inflector.rb @@ -257,15 +257,17 @@ module ActiveSupport # <%= link_to(@person.name, person_path(@person)) %> # # => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a> def parameterize(string, sep = '-') - re_sep = Regexp.escape(sep) # replace accented chars with ther ascii equivalents parameterized_string = transliterate(string) # Turn unwanted chars into the seperator parameterized_string.gsub!(/[^a-z0-9\-_\+]+/i, sep) - # No more than one of the separator in a row. - parameterized_string.squeeze!(sep) - # Remove leading/trailing separator. - parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/i, '') + unless sep.blank? + re_sep = Regexp.escape(sep) + # No more than one of the separator in a row. + parameterized_string.gsub!(/#{re_sep}{2,}/, sep) + # Remove leading/trailing separator. + parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/i, '') + end parameterized_string.downcase end diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb index 948b6d9bb0..6b9fbd3156 100644 --- a/activesupport/test/inflector_test.rb +++ b/activesupport/test/inflector_test.rb @@ -116,6 +116,12 @@ class InflectorTest < Test::Unit::TestCase end end + def test_parameterize_with_multi_character_separator + StringToParameterized.each do |some_string, parameterized_string| + assert_equal(parameterized_string.gsub('-', '__sep__'), ActiveSupport::Inflector.parameterize(some_string, '__sep__')) + end + end + def test_classify ClassNameToTableName.each do |class_name, table_name| assert_equal(class_name, ActiveSupport::Inflector.classify(table_name)) |