Permalink
Browse files

Optimization of ActiveModel's match_attribute_method?

  • Loading branch information...
1 parent f88e9d8 commit f04c5d640d5703a66193690d1b5948f9f04d4018 @lawrencepit lawrencepit committed Jul 14, 2011
Showing with 5 additions and 2 deletions.
  1. +5 −2 activemodel/lib/active_model/attribute_methods.rb
@@ -410,13 +410,16 @@ def attribute_method?(attr_name)
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

0 comments on commit f04c5d6

Please sign in to comment.