module ActiveFedora::Associations

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?
    reflection  = self.class._reflect_on_association(name)
    association = reflection.association_class.new(self, reflection) if reflection
    association_instance_set(name, association) if association
  end
  association
end

def association_instance_get(name)

Returns the specified association instance if it responds to :loaded?, nil otherwise.
def association_instance_get(name)
  raise "use a symbol" if name.is_a? String
  @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 clear_association_cache # :nodoc:

:nodoc:
Clears out the association cache.
def clear_association_cache # :nodoc:
  @association_cache.clear if persisted?
end

def delete(*)

def delete(*)
  reflections.each_pair do |name, reflection|
    association(name.to_sym).delete_all if reflection.macro == :has_many
  end
  super
end