From 33cf8f162e1ea2c10e6ba253b333f256802c3250 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 17 Jul 2005 10:02:23 +0000 Subject: 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 --- activesupport/CHANGELOG | 5 +++ .../active_support/core_ext/fixnum/inflections.rb | 15 +++++++++ activesupport/lib/active_support/inflector.rb | 15 ++++++++- activesupport/test/inflector_test.rb | 39 +++++++++++++++++++++- 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 activesupport/lib/active_support/core_ext/fixnum/inflections.rb (limited to 'activesupport') 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 -- cgit v1.2.3