aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Dupret <robin.dupret@gmail.com>2014-03-02 18:30:54 +0100
committerRobin Dupret <robin.dupret@gmail.com>2014-06-26 14:03:56 +0200
commit643409dcb04e7ac6a6c7b09edfb9606563e9aa21 (patch)
treea4b92cf8ea1c6b83d50a8df41fdcbff52107391b
parent6099b643e6388c23fab40f645544ed4dc478e763 (diff)
downloadrails-643409dcb04e7ac6a6c7b09edfb9606563e9aa21.tar.gz
rails-643409dcb04e7ac6a6c7b09edfb9606563e9aa21.tar.bz2
rails-643409dcb04e7ac6a6c7b09edfb9606563e9aa21.zip
Make the apply_inflections method case-sensitive
Since d3071db1, the apply_inflections method check if the downcased version of a string is contained inside the "whitelist" of uncountable words. However, if the word is composed of capital letters, it won't be matched in the list while it should. We can't simply revert to the previous behavior as there is a performance concern (benchmarked over /usr/share/dict/words): Before d3071db1 135.610000 0.290000 135.900000 (137.807081) Since d3071db1 22.170000 0.020000 22.190000 ( 22.530005) With the patch 22.060000 0.020000 22.080000 ( 22.125771) Benchmarked with http://git.io/aFnWig This way, the solution is to put the down-case version of words inside the @uncountables array.
-rw-r--r--activesupport/CHANGELOG.md13
-rw-r--r--activesupport/lib/active_support/inflector/inflections.rb2
-rw-r--r--activesupport/test/inflector_test.rb8
3 files changed, 18 insertions, 5 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index d0a5ddcc1e..f8e8544e72 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,8 +1,13 @@
+* Make the `apply_inflections` method case-insensitive when checking
+ whether a word is uncountable or not.
+
+ *Robin Dupret*
+
* Make Dependencies pass a name to NameError error.
*arthurnn*
* Fixed `ActiveSupport::Cache::FileStore` exploding with long paths.
- *Adam Panzer / Michael Grosser*
+ *Adam Panzer / Michael Grosser*
* Fixed `ActiveSupport::TimeWithZone#-` so precision is not unnecessarily lost
when working with objects with a nanosecond component.
@@ -27,12 +32,12 @@
* Fixed precision error in NumberHelper when using Rationals.
Before:
-
+
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "330.00"
-
+
After:
-
+
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "333.33"
diff --git a/activesupport/lib/active_support/inflector/inflections.rb b/activesupport/lib/active_support/inflector/inflections.rb
index eda0edff28..97401ccec7 100644
--- a/activesupport/lib/active_support/inflector/inflections.rb
+++ b/activesupport/lib/active_support/inflector/inflections.rb
@@ -160,7 +160,7 @@ module ActiveSupport
# uncountable 'money', 'information'
# uncountable %w( money information rice )
def uncountable(*words)
- (@uncountables << words).flatten!
+ @uncountables += words.flatten.map(&:downcase)
end
# Specifies a humanized form of a string by a regular expression rule or
diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb
index eb8b0d878e..58fdea0972 100644
--- a/activesupport/test/inflector_test.rb
+++ b/activesupport/test/inflector_test.rb
@@ -509,6 +509,14 @@ class InflectorTest < ActiveSupport::TestCase
end
end
+ def test_inflections_with_uncountable_words
+ ActiveSupport::Inflector.inflections do |inflect|
+ inflect.uncountable "HTTP"
+ end
+
+ assert_equal "HTTP", ActiveSupport::Inflector.pluralize("HTTP")
+ end
+
# Dups the singleton and yields, restoring the original inflections later.
# Use this in tests what modify the state of the singleton.
#