Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fix pluralization of uncountables when given a locale
Previously apply_inflections would only use the :en uncountables
rather then the ones for the locale that was passed to pluralize or
singularize.
This changes apply_inflections to take a locale which it will use to
find the uncountables.
Loading branch information
@@ -1,3 +1,7 @@
* Fix Inflector#apply_inflections to use a locale for uncountables
*Eilis Hamilton*
* Add support for versioned cache entries. This enables the cache stores to recycle cache keys, greatly saving
on storage in cases with frequent churn. Works together with the separation of `#cache_key` and `#cache_version`
in Active Record and its use in Action Pack's fragment caching.
@@ -28,7 +28,7 @@ module Inflector
# pluralize('CamelOctopus') # => "CamelOctopi"
# pluralize('ley', :es) # => "leyes"
def pluralize ( word , locale = :en )
apply_inflections ( word , inflections ( locale ) . plurals )
apply_inflections ( word , inflections ( locale ) . plurals , locale )
end
# The reverse of #pluralize, returns the singular form of a word in a
@@ -45,7 +45,7 @@ def pluralize(word, locale = :en)
# singularize('CamelOctopi') # => "CamelOctopus"
# singularize('leyes', :es) # => "ley"
def singularize ( word , locale = :en )
apply_inflections ( word , inflections ( locale ) . singulars )
apply_inflections ( word , inflections ( locale ) . singulars , locale )
end
# Converts strings to UpperCamelCase.
@@ -387,12 +387,15 @@ def const_regexp(camel_cased_word)
# Applies inflection rules for +singularize+ and +pluralize+.
#
# apply_inflections('post', inflections.plurals) # => "posts"
# apply_inflections('posts', inflections.singulars) # => "post"
def apply_inflections ( word , rules )
# If passed an optional +locale+ parameter, the uncountables will be
# found for that locale.
#
# apply_inflections('post', inflections.plurals, :en) # => "posts"
# apply_inflections('posts', inflections.singulars, :en) # => "post"
def apply_inflections ( word , rules , locale = :en )
result = word . to_s . dup
if word . empty? || inflections . uncountables . uncountable? ( result )
if word . empty? || inflections ( locale ) . uncountables . uncountable? ( result )
result
else
rules . each { |( rule , replacement ) | break if result . sub! ( rule , replacement ) }
@@ -420,6 +420,8 @@ def test_inflector_locality
inflect . singular ( /es$/ , "" )
inflect . irregular ( "el" , "los" )
inflect . uncountable ( "agua" )
end
assert_equal ( "hijos" , "hijo" . pluralize ( :es ) )
@@ -432,12 +434,17 @@ def test_inflector_locality
assert_equal ( "los" , "el" . pluralize ( :es ) )
assert_equal ( "els" , "el" . pluralize )
assert_equal ( "agua" , "agua" . pluralize ( :es ) )
assert_equal ( "aguas" , "agua" . pluralize )
ActiveSupport ::Inflector . inflections ( :es ) { |inflect | inflect . clear }
assert ActiveSupport ::Inflector . inflections ( :es ) . plurals . empty?
assert ActiveSupport ::Inflector . inflections ( :es ) . singulars . empty?
assert ActiveSupport ::Inflector . inflections ( :es ) . uncountables . empty?
assert !ActiveSupport ::Inflector . inflections . plurals . empty?
assert !ActiveSupport ::Inflector . inflections . singulars . empty?
assert !ActiveSupport ::Inflector . inflections . uncountables . empty?
end
def test_clear_all
Toggle all file notes
Toggle all file annotations