mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added Inflector#parameterize for easy slug generation ("Donald E. Knuth".parameterize => "donald-e-knuth") #713 [Matt Darby]
This commit is contained in:
parent
b141624abb
commit
90366a1521
5 changed files with 51 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
*Edge*
|
||||
|
||||
* Added Inflector#parameterize for easy slug generation ("Donald E. Knuth".parameterize => "donald-e-knuth") #713 [Matt Darby]
|
||||
|
||||
* Changed cache benchmarking to be reported in milliseconds [DHH]
|
||||
|
||||
* Fix Ruby's Time marshaling bug in pre-1.9 versions of Ruby: utc instances are now correctly unmarshaled with a utc zone instead of the system local zone [#900 state:resolved] [Luca Guidi, Geoff Buesing]
|
||||
|
|
|
@ -87,6 +87,25 @@ module ActiveSupport #:nodoc:
|
|||
Inflector.demodulize(self)
|
||||
end
|
||||
|
||||
# Replaces special characters in a string so that it may be used as part of a 'pretty' URL.
|
||||
#
|
||||
# ==== Examples
|
||||
#
|
||||
# class Person
|
||||
# def to_param
|
||||
# "#{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
|
||||
Inflector.parameterize(self)
|
||||
end
|
||||
|
||||
# Creates the name of a table like Rails does for models to table names. This method
|
||||
# uses the +pluralize+ method on the last word in the string.
|
||||
#
|
||||
|
|
|
@ -240,6 +240,25 @@ 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
|
||||
# def to_param
|
||||
# "#{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.gsub(/[^a-z0-9]+/i, sep).downcase
|
||||
end
|
||||
|
||||
# Create the name of a table like Rails does for models to table names. This method
|
||||
# uses the +pluralize+ method on the last word in the string.
|
||||
|
|
|
@ -98,6 +98,12 @@ class InflectorTest < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_parameterize
|
||||
StringToParameterized.each do |some_string, parameterized_string|
|
||||
assert_equal(parameterized_string, 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))
|
||||
|
|
|
@ -142,6 +142,11 @@ module InflectorTestCases
|
|||
"NodeChild" => "node_children"
|
||||
}
|
||||
|
||||
StringToParameterized = {
|
||||
"Donald E. Knuth" => "donald-e-knuth",
|
||||
"Random text with *(bad)* characters" => "random-text-with-bad-characters"
|
||||
}
|
||||
|
||||
UnderscoreToHuman = {
|
||||
"employee_salary" => "Employee salary",
|
||||
"employee_id" => "Employee",
|
||||
|
|
Loading…
Reference in a new issue