Method: ActiveSupport::Inflector#parameterize
- Defined in:
- lib/active_support/inflector/transliterate.rb
#parameterize(string, separator: "-", preserve_case: false, locale: nil) ⇒ 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"
It preserves dashes and underscores unless they are used as separators:
parameterize("^très|Jolie__ ") # => "tres-jolie__"
parameterize("^très|Jolie-- ", separator: "_") # => "tres_jolie--"
parameterize("^très_Jolie-- ", separator: ".") # => "tres_jolie--"
If the optional parameter locale is specified, the word will be parameterized as a word of that language. By default, this parameter is set to nil and it will use the configured I18n.locale.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/active_support/inflector/transliterate.rb', line 123 def parameterize(string, separator: "-", preserve_case: false, locale: nil) # Replace accented chars with their ASCII equivalents. parameterized_string = transliterate(string, locale: locale) # Turn unwanted chars into the separator. parameterized_string.gsub!(/[^a-z0-9\-_]+/i, separator) unless separator.nil? || separator.empty? # No more than one of the separator in a row. if separator.length == 1 parameterized_string.squeeze!(separator) else re_sep = Regexp.escape(separator) parameterized_string.gsub!(/#{re_sep}{2,}/, separator) end # Remove leading/trailing separator. parameterized_string.delete_prefix!(separator) parameterized_string.delete_suffix!(separator) end parameterized_string.downcase! unless preserve_case parameterized_string end |