diff options
author | Lawrence Pit <lawrence.pit@gmail.com> | 2011-07-17 14:51:34 +1000 |
---|---|---|
committer | Lawrence Pit <lawrence.pit@gmail.com> | 2011-07-17 14:51:34 +1000 |
commit | 52a096275a32c0c5d5125280f144e1e0d893d1f3 (patch) | |
tree | 5dab9eb706947bc21ac1e91f4d1b17abc2209447 /activemodel | |
parent | c3dd4c653d0a83b3fbb5c05eb93ee824eb66c944 (diff) | |
download | rails-52a096275a32c0c5d5125280f144e1e0d893d1f3.tar.gz rails-52a096275a32c0c5d5125280f144e1e0d893d1f3.tar.bz2 rails-52a096275a32c0c5d5125280f144e1e0d893d1f3.zip |
Made attribute_method_matchers_cache private + doc
Diffstat (limited to 'activemodel')
-rw-r--r-- | activemodel/lib/active_model/attribute_methods.rb | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb index 15abab87d7..bdc0eb4a0d 100644 --- a/activemodel/lib/active_model/attribute_methods.rb +++ b/activemodel/lib/active_model/attribute_methods.rb @@ -61,9 +61,6 @@ module ActiveModel included do class_attribute :attribute_method_matchers, :instance_writer => false self.attribute_method_matchers = [] - - class_attribute :attribute_method_matchers_cache, :instance_writer => false - self.attribute_method_matchers_cache = {} end module ClassMethods @@ -343,6 +340,19 @@ module ActiveModel end private + # The methods +method_missing+ and +respond_to?+ of this module are + # invoked often in a typical rails, both of which invoke the method + # +match_attribute_method?+. The latter method iterates through an + # array doing regular expression matches, which results in a lot of + # object creations. Most of the times it returns a +nil+ match. As the + # match result is always the same given a +method_name+, this cache is + # used to alleviate the GC, which ultimately also speeds up the app + # significantly (in our case our test suite finishes 10% faster with + # this cache). + def attribute_method_matchers_cache + @attribute_method_matchers_cache ||= {} + end + def attribute_method_matcher(method_name) if attribute_method_matchers_cache.key?(method_name) attribute_method_matchers_cache[method_name] |