Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add Inflection test (and fixes) to ensure singularizing a singular ac…

…tually give you the correct singular in more cases
  • Loading branch information...
commit 532cd49530bd1acca96c1c615b6b328bce42103a 1 parent faaf694
@markmcspadden markmcspadden authored
View
13 activesupport/lib/active_support/inflections.rb
@@ -23,10 +23,11 @@ module ActiveSupport
inflect.plural(/(quiz)$/i, '\1zes')
inflect.singular(/s$/i, '')
+ inflect.singular(/(ss)$/i, '\1')
inflect.singular(/(n)ews$/i, '\1ews')
inflect.singular(/([ti])a$/i, '\1um')
- inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis')
- inflect.singular(/(^analy)ses$/i, '\1sis')
+ inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, '\1\2sis')
+ inflect.singular(/(^analy)(sis|ses)$/i, '\1sis')
inflect.singular(/([^f])ves$/i, '\1fe')
inflect.singular(/(hive)s$/i, '\1')
inflect.singular(/(tive)s$/i, '\1')
@@ -36,12 +37,12 @@ module ActiveSupport
inflect.singular(/(m)ovies$/i, '\1ovie')
inflect.singular(/(x|ch|ss|sh)es$/i, '\1')
inflect.singular(/(m|l)ice$/i, '\1ouse')
- inflect.singular(/(bus)es$/i, '\1')
+ inflect.singular(/(bus)(es)?$/i, '\1')
inflect.singular(/(o)es$/i, '\1')
inflect.singular(/(shoe)s$/i, '\1')
- inflect.singular(/(cris|ax|test)es$/i, '\1is')
- inflect.singular(/(octop|vir)i$/i, '\1us')
- inflect.singular(/(alias|status)es$/i, '\1')
+ inflect.singular(/(cris|ax|test)(is|es)$/i, '\1is')
+ inflect.singular(/(octop|vir)(us|i)$/i, '\1us')
+ inflect.singular(/(alias|status)(es)?$/i, '\1')
inflect.singular(/^(ox)en/i, '\1')
inflect.singular(/(vert|ind)ices$/i, '\1ex')
inflect.singular(/(matr)ices$/i, '\1ix')
View
8 activesupport/test/inflector_test.rb
@@ -65,6 +65,14 @@ def test_uncountable_word_is_not_greedy
assert_equal(plural.capitalize, ActiveSupport::Inflector.pluralize(plural.capitalize))
end
end
+
+ SingularToPlural.each do |singular, plural|
+ define_method "test_singularize_singular_#{singular}" do
+ assert_equal(singular, ActiveSupport::Inflector.singularize(singular))
+ assert_equal(singular.capitalize, ActiveSupport::Inflector.singularize(singular.capitalize))
+ end
+ end
+
def test_overwrite_previous_inflectors
assert_equal("series", ActiveSupport::Inflector.singularize("series"))

6 comments on commit 532cd49

@tenderlove
Owner

This commit breaks the action pack tests, specifically:

ruby -I lib:test test/dispatch/routing_test.rb -n test_resources_are_not_pluralized

/cc @fxn

@fxn
Owner

I see the culprit is the ax in

inflect.singular(/(cris|ax|test)(is|es)$/i, '\1is')

Working on it.

@markmcspadden

Thanks @fxn

(totally prepared for a "this is why inflections are frozen" to follow)

@fxn
Owner

Haha.

@fxn
Owner

The good news is that the regression uncovered a bogus test in AP, fixed everything in fd5d9b3.

@markmcspadden

Thanks for hunting it down and fixing it up.

Please sign in to comment.
Something went wrong with that request. Please try again.