module ActiveRecord::Associations

def self.eager_load!

def self.eager_load!
  super
  Preloader.eager_load!
  JoinDependency.eager_load!
end

def association(name) # :nodoc:

:nodoc:
Returns the association instance for the given name, instantiating it if it doesn't already exist
def association(name) # :nodoc:
  association = association_instance_get(name)
  if association.nil?
    unless reflection = self.class._reflect_on_association(name)
      raise AssociationNotFoundError.new(self, name)
    end
    association = reflection.association_class.new(self, reflection)
    association_instance_set(name, association)
  end
  association
end

def association_cached?(name) # :nodoc:

:nodoc:
def association_cached?(name) # :nodoc:
  @association_cache.key?(name)
end

def association_instance_get(name)

Returns the specified association instance if it exists, +nil+ otherwise.
def association_instance_get(name)
  @association_cache[name]
end

def association_instance_set(name, association)

Set the specified association instance.
def association_instance_set(name, association)
  @association_cache[name] = association
end

def init_internals

def init_internals
  super
  @association_cache = {}
end

def initialize_dup(*) # :nodoc:

:nodoc:
def initialize_dup(*) # :nodoc:
  @association_cache = {}
  super
end