1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Added Fixnum#ordinalize to turn 1.ordinalize to "1st", 3.ordinalize to "3rd", and 10.ordinalize to "10th" and so on #1724 [paul@cnt.org]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1852 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-07-17 10:02:23 +00:00
parent 80cfa76f7d
commit 33cf8f162e
4 changed files with 72 additions and 2 deletions

View file

@ -1,3 +1,8 @@
*SVN*
* Added Fixnum#ordinalize to turn 1.ordinalize to "1st", 3.ordinalize to "3rd", and 10.ordinalize to "10th" and so on #1724 [paul@cnt.org]
*1.1.1* (11 July, 2005)
* Added more efficient implementation of the development mode reset of classes #1638 [Chris McGrath]

View file

@ -0,0 +1,15 @@
require File.dirname(__FILE__) + '/../../inflector'
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Fixnum #:nodoc:
module Inflections
# 1.ordinalize # => "1st"
# 3.ordinalize # => "3rd"
# 10.ordinalize # => "10th"
def ordinalize
Inflector.ordinalize(self)
end
end
end
end
end

View file

@ -60,6 +60,19 @@ module Inflector
end
end
def ordinalize(number)
if (11..13).include?(number.to_i % 100)
"#{number}th"
else
case number.to_i % 10
when 1: "#{number}st"
when 2: "#{number}nd"
when 3: "#{number}rd"
else "#{number}th"
end
end
end
private
def uncountable_words #:doc
%w( equipment information rice money species series fish )
@ -121,4 +134,4 @@ module Inflector
[/s$/i, '']
]
end
end
end

View file

@ -131,6 +131,37 @@ class InflectorTest < Test::Unit::TestCase
"underground" => "Underground"
}
OrdinalNumbers = {
"0" => "0th",
"1" => "1st",
"2" => "2nd",
"3" => "3rd",
"4" => "4th",
"5" => "5th",
"6" => "6th",
"7" => "7th",
"8" => "8th",
"9" => "9th",
"10" => "10th",
"11" => "11th",
"12" => "12th",
"13" => "13th",
"14" => "14th",
"20" => "20th",
"21" => "21st",
"22" => "22nd",
"23" => "23rd",
"24" => "24th",
"100" => "100th",
"101" => "101st",
"102" => "102nd",
"103" => "103rd",
"104" => "104th",
"110" => "110th",
"1000" => "1000th",
"1001" => "1001st"
}
def test_pluralize_plurals
assert_equal "plurals", Inflector.pluralize("plurals")
assert_equal "Plurals", Inflector.pluralize("Plurals")
@ -214,4 +245,10 @@ class InflectorTest < Test::Unit::TestCase
assert_equal InflectorTest, Inflector.constantize("InflectorTest")
assert_raises(NameError) { Inflector.constantize("UnknownClass") }
end
end
def test_ordinal
OrdinalNumbers.each do |number, ordinalized|
assert_equal(ordinalized, Inflector.ordinalize(number))
end
end
end