aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-07-17 10:02:23 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-07-17 10:02:23 +0000
commit33cf8f162e1ea2c10e6ba253b333f256802c3250 (patch)
tree2c4fca502c8afe64ead7fa9bc7849dab4f1fdc0d /activesupport
parent80cfa76f7de298b5eb3e2b971766c676e9e147b1 (diff)
downloadrails-33cf8f162e1ea2c10e6ba253b333f256802c3250.tar.gz
rails-33cf8f162e1ea2c10e6ba253b333f256802c3250.tar.bz2
rails-33cf8f162e1ea2c10e6ba253b333f256802c3250.zip
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
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/CHANGELOG5
-rw-r--r--activesupport/lib/active_support/core_ext/fixnum/inflections.rb15
-rw-r--r--activesupport/lib/active_support/inflector.rb15
-rw-r--r--activesupport/test/inflector_test.rb39
4 files changed, 72 insertions, 2 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 7c2b000a1d..b8abb21a88 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -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]
diff --git a/activesupport/lib/active_support/core_ext/fixnum/inflections.rb b/activesupport/lib/active_support/core_ext/fixnum/inflections.rb
new file mode 100644
index 0000000000..13c4f1130a
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/fixnum/inflections.rb
@@ -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
diff --git a/activesupport/lib/active_support/inflector.rb b/activesupport/lib/active_support/inflector.rb
index 88f56403c8..be25a93687 100644
--- a/activesupport/lib/active_support/inflector.rb
+++ b/activesupport/lib/active_support/inflector.rb
@@ -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 \ No newline at end of file
+end
diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb
index 533879cbc2..2d69431cd4 100644
--- a/activesupport/test/inflector_test.rb
+++ b/activesupport/test/inflector_test.rb
@@ -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 \ No newline at end of file
+
+ def test_ordinal
+ OrdinalNumbers.each do |number, ordinalized|
+ assert_equal(ordinalized, Inflector.ordinalize(number))
+ end
+ end
+end