## 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