DataMapper equivalent of ActiveRecord's reflect_on_all_associations method, but only so far as my particular use needed it
def reflect_on_all_associations
# Datamapper, you're crazy...
relationships.map { |name, relationship|
if relationship.options[:min].nil?
macro = :belongs_to
if relationship.options[:class_name]
# In a belongs_to, the side with the class name uses
# the parent model, but child key for the foreign key...
class_name = relationship.parent_model.to_s
primary_key_name = relationship.child_key.entries.first.name
else
class_name = relationship.child_model.to_s
primary_key_name = relationship.parent_key.entries.first.name
end
else
macro = :has_one
if relationship.options[:class_name]
# but on the has_one side, it's the *child* model that
# uses the child key for the foreign key. Weirdness.
class_name = relationship.child_model.to_s
primary_key_name = relationship.child_key.entries.first.name
else
class_name = relationship.parent_model.to_s
primary_key_name = relationship.parent_key.entries.first.name
end
end
OpenStruct.new(
:name => name,
:class_name => class_name,
:primary_key_name => primary_key_name,
:macro => macro
)
}
end