Method: ActiveSupport::Inflector#parameterize
- Defined in:
- lib/active_support/inflector/transliterate.rb
#parameterize(string, sep = :unused, separator: '-', preserve_case: false) ⇒ Object
Replaces special characters in a string so that it may be used as part of a ‘pretty’ URL.
parameterize("Donald E. Knuth") # => "donald-e-knuth"
parameterize("^trés|Jolie-- ") # => "tres-jolie"
To use a custom separator, override the ‘separator` argument.
parameterize("Donald E. Knuth", separator: '_') # => "donald_e_knuth"
parameterize("^trés|Jolie-- ", separator: '_') # => "tres_jolie"
To preserve the case of the characters in a string, use the ‘preserve_case` argument.
parameterize("Donald E. Knuth", preserve_case: true) # => "Donald-E-Knuth"
parameterize("^trés|Jolie-- ", preserve_case: true) # => "tres-Jolie"
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/active_support/inflector/transliterate.rb', line 82 def parameterize(string, sep = :unused, separator: '-', preserve_case: false) unless sep == :unused ActiveSupport::Deprecation.warn("Passing the separator argument as a positional parameter is deprecated and will soon be removed. Use `separator: '#{sep}'` instead.") separator = sep end # Replace accented chars with their ASCII equivalents. parameterized_string = transliterate(string) # Turn unwanted chars into the separator. parameterized_string.gsub!(/[^a-z0-9\-_]+/i, separator) unless separator.nil? || separator.empty? if separator == "-".freeze re_duplicate_separator = /-{2,}/ re_leading_trailing_separator = /^-|-$/i else re_sep = Regexp.escape(separator) re_duplicate_separator = /#{re_sep}{2,}/ re_leading_trailing_separator = /^#{re_sep}|#{re_sep}$/i end # No more than one of the separator in a row. parameterized_string.gsub!(re_duplicate_separator, separator) # Remove leading/trailing separator. parameterized_string.gsub!(re_leading_trailing_separator, ''.freeze) end parameterized_string.downcase! unless preserve_case parameterized_string end |