Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge pull request #29097 from EilisHamilton/fix_uncountable_pluraliz…
…ation_locale
Fix pluralization of uncountables when given a locale
- Loading branch information
|
|
@@ -1,3 +1,7 @@ |
|
|
* `#singularize` and `#pluralize` now respect uncountables for the specified locale. |
|
|
|
|
|
*Eilis Hamilton* |
|
|
|
|
|
* Add ActiveSupport::CurrentAttributes to provide a thread-isolated attributes singleton. |
|
|
Primary use case is keeping all the per-request attributes easily available to the whole system. |
|
|
|
|
|
|
@@ -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 |
|
|