diff options
| author | Adam Cigánek <adam.ciganek@gmail.com> | 2008-09-12 14:45:11 +0200 | 
|---|---|---|
| committer | Michael Koziarski <michael@koziarski.com> | 2008-09-23 08:08:21 +0200 | 
| commit | a4f2ba8fb3c46ef9f7e31725849efdcb1a22c72d (patch) | |
| tree | 7213d54c6b58397392c697e3f9e15d53a889ee77 | |
| parent | 961e2b861096c67573f3ddd2c9e55bb0658d6d88 (diff) | |
| download | rails-a4f2ba8fb3c46ef9f7e31725849efdcb1a22c72d.tar.gz rails-a4f2ba8fb3c46ef9f7e31725849efdcb1a22c72d.tar.bz2 rails-a4f2ba8fb3c46ef9f7e31725849efdcb1a22c72d.zip | |
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: Michael Koziarski <michael@koziarski.com>
[#1034 state:committed]
| -rw-r--r-- | activesupport/lib/active_support/inflector.rb | 16 | ||||
| -rw-r--r-- | activesupport/test/inflector_test.rb | 6 | ||||
| -rw-r--r-- | activesupport/test/inflector_test_cases.rb | 5 | 
3 files changed, 21 insertions, 6 deletions
| diff --git a/activesupport/lib/active_support/inflector.rb b/activesupport/lib/active_support/inflector.rb index b2046f26de..89a93f4a5f 100644 --- a/activesupport/lib/active_support/inflector.rb +++ b/activesupport/lib/active_support/inflector.rb @@ -240,9 +240,9 @@ module ActiveSupport      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 @@ module ActiveSupport      #       "#{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 diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb index f304844e82..d30852c013 100644 --- a/activesupport/test/inflector_test.rb +++ b/activesupport/test/inflector_test.rb @@ -104,6 +104,12 @@ class InflectorTest < Test::Unit::TestCase      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)) diff --git a/activesupport/test/inflector_test_cases.rb b/activesupport/test/inflector_test_cases.rb index 8057809dbd..fc7a35f859 100644 --- a/activesupport/test/inflector_test_cases.rb +++ b/activesupport/test/inflector_test_cases.rb @@ -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 = { | 
