def propagate_delete( object, editing_context )
object.to_one_relationship_keys.each do |key|
delete_rule = object.delete_rule(key)
if delete_rule == Relationship::DELETE_RULE_DENY then
next
end
if related = object.retrieve_stored_value(key) then
related.will_read
else
next
end
case delete_rule
when Relationship::DELETE_RULE_NULLIFY
object.remove_object_from_both_sides_of_relationship(related, key)
when Relationship::DELETE_RULE_CASCADE
object.remove_object_from_both_sides_of_relationship(related, key)
editing_context.delete related
end
end
object.to_many_relationship_keys.each do |key|
delete_rule = object.delete_rule(key)
if delete_rule == Relationship::DELETE_RULE_DENY then
next
end
related_objects = object.retrieve_stored_value key
related_objects.size
copied_objects = []
related_objects.each do |related_object|
copied_objects << related_object
end
case delete_rule
when Relationship::DELETE_RULE_NULLIFY
copied_objects.each do |related_object|
object.remove_object_from_both_sides_of_relationship(
related_object, key)
end
when Relationship::DELETE_RULE_CASCADE
copied_objects.each do |related_object|
object.remove_object_from_both_sides_of_relationship(
related_object, key)
editing_context.delete related_object
end
end
end
end