Permalink
Browse files

Added Fixnum#ordinalize to turn 1.ordinalize to "1st", 3.ordinalize t…

…o "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
  • Loading branch information...
1 parent 80cfa76 commit 33cf8f162e1ea2c10e6ba253b333f256802c3250 @dhh dhh committed Jul 17, 2005
View
@@ -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]
@@ -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
@@ -60,6 +60,19 @@ def constantize(camel_cased_word)
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 @@ def singular_rules #:doc:
[/s$/i, '']
]
end
-end
+end
@@ -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 @@ def test_constantize
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

0 comments on commit 33cf8f1

Please sign in to comment.