diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index a40c9457219..2f9948eb0e0 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,6 +1,6 @@ *SVN* -* Added new rules to the Inflector to deal with more unusual plurals mouse/louse => mice/lice, information => information, ox => oxen, photo => photos, archive => archives #1571, #1583, #1490 [foamdino@gmail.com/others] +* Added new rules to the Inflector to deal with more unusual plurals mouse/louse => mice/lice, information => information, ox => oxen, virus => viri, archive => archives #1571, #1583, #1490, #1599 [foamdino@gmail.com/others] * Fixed memory leak with Object#remove_subclasses_of, which inflicted a Rails application running in development mode with a ~20KB leak per request #1289 [c.r.mcgrath@gmail.com] diff --git a/activesupport/lib/active_support/inflector.rb b/activesupport/lib/active_support/inflector.rb index 1940cfd0ca1..2ff9d92b932 100644 --- a/activesupport/lib/active_support/inflector.rb +++ b/activesupport/lib/active_support/inflector.rb @@ -58,7 +58,7 @@ module Inflector def plural_rules #:doc: [ [/(fish)$/i, '\1\2'], # fish - [/(information)$/i, '\1'], # information (plural noun) + [/(information|equipment|money)$/i, '\1'], # plural nouns [/^(ox)$/i, '\1\2en'], # ox [/([m|l])ouse/i, '\1ice'], # mouse, louse [/(x|ch|ss|sh)$/i, '\1es'], # search, switch, fix, box, process, address @@ -73,8 +73,10 @@ module Inflector [/(m)an$/i, '\1\2en'], # man, woman, spokesman [/(c)hild$/i, '\1\2hildren'], # child [/(photo)$/i, '\1s'], - [/(o)$/i, '\1\2es'], # buffalo, tomato + [/(buffal|tomat)o$/i, '\1\2oes'], # buffalo, tomato [/(bu)s$/i, '\1\2ses'], # bus + [/(alias)/i, '\1es'], # alias + [/([octop|vir])us$/i, '\1i'], # octopus, virus - virus has no defined plural (according to Latin/dictionary.com), but viri is better than viruses/viruss [/s$/i, 's'], # no change (compatibility) [/$/, 's'] ] @@ -84,7 +86,8 @@ module Inflector [ [/(f)ish$/i, '\1\2ish'], [/^(ox)en/i, '\1'], - [/(photo)s$/i, '\1'], + [/(alias)es$/i, '\1'], + [/([octop|vir])i$/i, '\1us'], [/(o)es/i, '\1'], [/(bus)es$/i, '\1'], [/([m|l])ice/i, '\1ouse'], diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb index 6f088c9c20c..310dfa5a223 100644 --- a/activesupport/test/inflector_test.rb +++ b/activesupport/test/inflector_test.rb @@ -71,9 +71,15 @@ class InflectorTest < Test::Unit::TestCase "dwarf" => "dwarves", "elf" => "elves", "information" => "information", + "equipment" => "equipment", "bus" => "buses", "mouse" => "mice", - "louse" => "lice" + "louse" => "lice", + "house" => "houses", + "octopus" => "octopi", + "virus" => "viri", + "alias" => "aliases", + "portfolio" => "portfolios" } CamelToUnderscore = {