aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/attribute_methods.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/lib/active_model/attribute_methods.rb')
-rw-r--r--activemodel/lib/active_model/attribute_methods.rb7
1 files changed, 5 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb
index 6ee5e04267..bb5c511a5e 100644
--- a/activemodel/lib/active_model/attribute_methods.rb
+++ b/activemodel/lib/active_model/attribute_methods.rb
@@ -410,13 +410,16 @@ module ActiveModel
private
# Returns a struct representing the matching attribute method.
# The struct's attributes are prefix, base and suffix.
+ @@match_attribute_method_cache = {}
def match_attribute_method?(method_name)
+ cache = @@match_attribute_method_cache[self.class] ||= {}
+ return cache[method_name] if cache.key?(method_name)
self.class.attribute_method_matchers.each do |method|
if (match = method.match(method_name)) && attribute_method?(match.attr_name)
- return match
+ return cache[method_name] = match
end
end
- nil
+ cache[method_name] = nil
end
# prevent method_missing from calling private methods with #send