Skip to content
Browse files

split aggregates from association reflections to avoid is_a checks later

  • Loading branch information...
1 parent 0ee351b commit 9d79333140f290eba7c91c48302469e5f73e604d @tenderlove tenderlove committed Jun 12, 2013
Showing with 11 additions and 5 deletions.
  1. +11 −5 activerecord/lib/active_record/reflection.rb
View
16 activerecord/lib/active_record/reflection.rb
@@ -5,7 +5,9 @@ module Reflection # :nodoc:
included do
class_attribute :reflections
+ class_attribute :aggregate_reflections
self.reflections = {}
+ self.aggregate_reflections = {}
end
# \Reflection enables to interrogate Active Record classes and objects
@@ -27,22 +29,26 @@ def create_reflection(macro, name, scope, options, active_record)
reflection = klass.new(macro, name, scope, options, active_record)
- self.reflections = self.reflections.merge(name => reflection)
+ if klass == AggregateReflection
+ self.aggregate_reflections = self.aggregate_reflections.merge(name => reflection)
+ else
+ self.reflections = self.reflections.merge(name => reflection)
+ end
+
reflection
end
# Returns an array of AggregateReflection objects for all the aggregations in the class.
def reflect_on_all_aggregations
- reflections.values.grep(AggregateReflection)
+ aggregate_reflections.values
end
# Returns the AggregateReflection object for the named +aggregation+ (use the symbol).
#
# Account.reflect_on_aggregation(:balance) # => the balance AggregateReflection
#
def reflect_on_aggregation(aggregation)
- reflection = reflections[aggregation]
- reflection if reflection.is_a?(AggregateReflection)
+ aggregate_reflections[aggregation]
end
# Returns an array of AssociationReflection objects for all the
@@ -56,7 +62,7 @@ def reflect_on_aggregation(aggregation)
# Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations
#
def reflect_on_all_associations(macro = nil)
- association_reflections = reflections.values.grep(AssociationReflection)
+ association_reflections = reflections.values
macro ? association_reflections.select { |reflection| reflection.macro == macro } : association_reflections
end

0 comments on commit 9d79333

Please sign in to comment.
Something went wrong with that request. Please try again.