diff options
author | Henrik Hodne <dvyjones@dvyjones.com> | 2011-11-06 11:13:51 +0100 |
---|---|---|
committer | Henrik Hodne <dvyjones@dvyjones.com> | 2011-11-06 11:13:51 +0100 |
commit | 52fa34faee76ca54b1b394ea3a25dfee42491c22 (patch) | |
tree | 974048052a3ee9d36127e3f31c3e1de1f97756be /activesupport | |
parent | b33232f1b2c3f92c7116adc4b4879a8afc07e70c (diff) | |
download | rails-52fa34faee76ca54b1b394ea3a25dfee42491c22.tar.gz rails-52fa34faee76ca54b1b394ea3a25dfee42491c22.tar.bz2 rails-52fa34faee76ca54b1b394ea3a25dfee42491c22.zip |
Refactored pluralize and singularize into a common method.
See diff discussion on rails/#3536.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/inflector/methods.rb | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/activesupport/lib/active_support/inflector/methods.rb b/activesupport/lib/active_support/inflector/methods.rb index e76ee60dd7..9eba02b6f0 100644 --- a/activesupport/lib/active_support/inflector/methods.rb +++ b/activesupport/lib/active_support/inflector/methods.rb @@ -21,14 +21,7 @@ module ActiveSupport # "words".pluralize # => "words" # "CamelOctopus".pluralize # => "CamelOctopi" def pluralize(word) - result = word.to_s.dup - - if word.empty? || inflections.uncountables.include?(result.downcase) - result - else - inflections.plurals.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } - result - end + apply_inflections(word, inflections.plurals) end # The reverse of +pluralize+, returns the singular form of a word in a string. @@ -40,14 +33,7 @@ module ActiveSupport # "word".singularize # => "word" # "CamelOctopi".singularize # => "CamelOctopus" def singularize(word) - result = word.to_s.dup - - if inflections.uncountables.any? { |inflection| result =~ /\b(#{inflection})\Z/i } - result - else - inflections.singulars.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } - result - end + apply_inflections(word, inflections.singulars) end # By default, +camelize+ converts strings to UpperCamelCase. If the argument to +camelize+ @@ -311,5 +297,21 @@ module ActiveSupport part.empty? ? acc : "#{part}(::#{acc})?" end end + + # Applies inflection rules for +singluralize+ and +pluralize+. + # + # Examples: + # apply_inflections("post", inflections.plurals) # => "posts" + # apply_inflections("posts", inflections.singulars) # => "post" + def apply_inflections(word, rules) + result = word.to_s.dup + + if word.empty? || inflections.uncountables.any? { |inflection| result =~ /\b#{inflection}\Z/i } + result + else + rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } + result + end + end end end |