<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -42,7 +42,7 @@ module DataMapper
         opts[:child_model]              ||= opts.delete(:class_name)  || Extlib::Inflection.classify(name)
         opts[:parent_model]             =   model
         opts[:repository_name]          =   repository_name
-        opts[:remote_relationship_name] ||= opts.delete(:remote_name) || name
+        opts[:remote_relationship_name] ||= opts.delete(:remote_name) || Extlib::Inflection.tableize(opts[:child_model])
         opts[:parent_key]               =   opts[:parent_key]
         opts[:child_key]                =   opts[:child_key]
         opts[:mutable]                  =   true</diff>
      <filename>lib/dm-core/associations/many_to_many.rb</filename>
    </modified>
    <modified>
      <diff>@@ -294,4 +294,156 @@ describe DataMapper::Associations::ManyToMany::Proxy do
     end
   end
 
+  describe &quot;with renamed associations&quot; do
+    before :all do
+      class Singer
+        include DataMapper::Resource
+
+        def self.default_repository_name; ADAPTER end
+
+        property :id, Serial
+        property :name, String
+
+        has n, :tunes, :through =&gt; Resource, :class_name =&gt; 'Song'
+      end
+
+      class Song
+        include DataMapper::Resource
+
+        def self.default_repository_name; ADAPTER end
+
+        property :id, Serial
+        property :title, String
+
+        has n, :performers, :through =&gt; Resource, :class_name =&gt; 'Singer'
+      end
+    end
+
+    before do
+      [ Singer, Song, SingerSong ].each { |k| k.auto_migrate! }
+
+      song_1 = Song.create(:title =&gt; &quot;Dubliners&quot;)
+      song_2 = Song.create(:title =&gt; &quot;Portrait of the Artist as a Young Man&quot;)
+      song_3 = Song.create(:title =&gt; &quot;Ulysses&quot;)
+
+      singer_1 = Singer.create(:name =&gt; &quot;Jon Doe&quot;)
+      singer_2 = Singer.create(:name =&gt; &quot;Jane Doe&quot;)
+
+      SingerSong.create(:song =&gt; song_1, :singer =&gt; singer_1)
+      SingerSong.create(:song =&gt; song_2, :singer =&gt; singer_1)
+      SingerSong.create(:song =&gt; song_1, :singer =&gt; singer_2)
+
+      @parent      = song_3
+      @association = @parent.performers
+      @other       = [ singer_1 ]
+    end
+
+    it &quot;should provide #replace&quot; do
+      @association.should respond_to(:replace)
+    end
+
+    it &quot;should correctly link records&quot; do
+      Song.get(1).should have(2).performers
+      Song.get(2).should have(1).performers
+      Song.get(3).should have(0).performers
+      Singer.get(1).should have(2).tunes
+      Singer.get(2).should have(1).tunes
+    end
+
+    it &quot;should be able to have associated objects manually added&quot; do
+      song = Song.get(3)
+      song.should have(0).performers
+
+      be = SingerSong.new(:song_id =&gt; song.id, :singer_id =&gt; 2)
+      song.singer_songs &lt;&lt; be
+      song.save
+
+      song.reload.should have(1).performers
+    end
+
+    it &quot;should automatically added necessary through class&quot; do
+      song = Song.get(3)
+      song.should have(0).performers
+
+      song.performers &lt;&lt; Singer.get(1)
+      song.performers &lt;&lt; Singer.new(:name =&gt; &quot;Jimmy John&quot;)
+      song.save
+
+      song.reload.should have(2).performers
+    end
+
+    it &quot;should react correctly to a new record&quot; do
+      song = Song.new(:title =&gt; &quot;Finnegan's Wake&quot;)
+      singer = Singer.get(2)
+      song.should have(0).performers
+      singer.should have(1).tunes
+
+      song.performers &lt;&lt; singer
+      song.save
+
+      song.reload.should have(1).performers
+      singer.reload.should have(2).tunes
+    end
+
+    it &quot;should be able to delete intermediate model&quot; do
+      song = Song.get(1)
+      song.should have(2).singer_songs
+      song.should have(2).performers
+
+      be = SingerSong.get(1,1)
+      song.singer_songs.delete(be)
+      song.save
+
+      song.reload
+      song.should have(1).singer_songs
+      song.should have(1).performers
+    end
+
+    it &quot;should be clearable&quot; do
+      repository(ADAPTER) do
+        song = Song.get(2)
+        song.should have(1).singer_songs
+        song.should have(1).performers
+
+        song.performers.clear
+        song.save
+
+        song.reload
+        song.should have(0).singer_songs
+        song.should have(0).performers
+      end
+      repository(ADAPTER) do
+        Song.get(2).should have(0).performers
+      end
+    end
+
+    it &quot;should be able to delete one object&quot; do
+      song = Song.get(1)
+      song.should have(2).singer_songs
+      song.should have(2).performers
+
+      editor = song.performers.first
+      song.performers.delete(editor)
+      song.save
+
+      song.reload
+      song.should have(1).singer_songs
+      song.should have(1).performers
+      editor.reload.tunes.should_not include(song)
+    end
+
+    it &quot;should be destroyable&quot; do
+      pending &quot;cannot destroy a collection yet&quot; do
+        song = Song.get(2)
+        song.should have(1).performers
+
+        song.performers.destroy
+        song.save
+
+        song.reload
+        song.should have(0).performers
+      end
+    end
+  end
+
 end</diff>
      <filename>spec/integration/associations/many_to_many_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3938f0f9755c417ef3560839ff15227f701ccfa6</id>
    </parent>
  </parents>
  <author>
    <name>Bernerd Schaefer</name>
    <email>bj.schaefer@gmail.com</email>
  </author>
  <url>http://github.com/sam/dm-core/commit/8ec812f88bf54c456913f9156c71a09d134abc81</url>
  <id>8ec812f88bf54c456913f9156c71a09d134abc81</id>
  <committed-date>2008-09-11T10:13:55-07:00</committed-date>
  <authored-date>2008-09-11T10:13:55-07:00</authored-date>
  <message>Sensible default :remote_name for ManyToMany.

Applied patch by lobo_tuerto to set you change the :class_name of a
many to many relationship without needing to set the :remote_name.

This closes out #560.</message>
  <tree>9acbfa69553785ab0028737703f3d0abd1dc6608</tree>
  <committer>
    <name>Bernerd Schaefer</name>
    <email>bj.schaefer@gmail.com</email>
  </committer>
</commit>
