From 5864b9a894a784aea3500d7b72ab78b6f23c6fe9 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Wed, 2 Oct 2013 16:03:45 -0700
Subject: remove HABTM associations

---
 activerecord/lib/active_record/associations.rb     |  7 ---
 .../lib/active_record/associations/association.rb  |  1 -
 .../associations/builder/association.rb            |  1 -
 .../associations/collection_association.rb         |  1 -
 .../has_and_belongs_to_many_association.rb         | 56 ----------------------
 5 files changed, 66 deletions(-)
 delete mode 100644 activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb

(limited to 'activerecord/lib')

diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index 7c393d9028..74e2774626 100644
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -73,12 +73,6 @@ module ActiveRecord
     end
   end
 
-  class HasAndBelongsToManyAssociationForeignKeyNeeded < ActiveRecordError #:nodoc:
-    def initialize(reflection)
-      super("Cannot create self referential has_and_belongs_to_many association on '#{reflection.class_name rescue nil}##{reflection.name rescue nil}'. :association_foreign_key cannot be the same as the :foreign_key.")
-    end
-  end
-
   class EagerLoadPolymorphicError < ActiveRecordError #:nodoc:
     def initialize(reflection)
       super("Can not eagerly load the polymorphic association #{reflection.name.inspect}")
@@ -114,7 +108,6 @@ module ActiveRecord
 
     autoload :BelongsToAssociation,            'active_record/associations/belongs_to_association'
     autoload :BelongsToPolymorphicAssociation, 'active_record/associations/belongs_to_polymorphic_association'
-    autoload :HasAndBelongsToManyAssociation,  'active_record/associations/has_and_belongs_to_many_association'
     autoload :HasManyAssociation,              'active_record/associations/has_many_association'
     autoload :HasManyThroughAssociation,       'active_record/associations/has_many_through_association'
     autoload :HasOneAssociation,               'active_record/associations/has_one_association'
diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb
index 67d24b35d1..04c36d5740 100644
--- a/activerecord/lib/active_record/associations/association.rb
+++ b/activerecord/lib/active_record/associations/association.rb
@@ -13,7 +13,6 @@ module ActiveRecord
     #       BelongsToAssociation
     #         BelongsToPolymorphicAssociation
     #     CollectionAssociation
-    #       HasAndBelongsToManyAssociation
     #       HasManyAssociation
     #         HasManyThroughAssociation + ThroughAssociation
     class Association #:nodoc:
diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb
index 783a86d4a3..a8cde62642 100644
--- a/activerecord/lib/active_record/associations/builder/association.rb
+++ b/activerecord/lib/active_record/associations/builder/association.rb
@@ -8,7 +8,6 @@
 #      - HasOneAssociation
 #    - CollectionAssociation
 #      - HasManyAssociation
-#      - HasAndBelongsToManyAssociation
 
 module ActiveRecord::Associations::Builder
   class Association #:nodoc:
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index b9199f62b9..75f8990cf0 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -7,7 +7,6 @@ module ActiveRecord
     # collections. See the class hierarchy in AssociationProxy.
     #
     #   CollectionAssociation:
-    #     HasAndBelongsToManyAssociation => has_and_belongs_to_many
     #     HasManyAssociation => has_many
     #       HasManyThroughAssociation + ThroughAssociation => has_many :through
     #
diff --git a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb b/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
deleted file mode 100644
index b2e6c708bf..0000000000
--- a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module ActiveRecord
-  # = Active Record Has And Belongs To Many Association
-  module Associations
-    class HasAndBelongsToManyAssociation < CollectionAssociation #:nodoc:
-      attr_reader :join_table
-
-      def initialize(owner, reflection)
-        @join_table = Arel::Table.new(reflection.join_table)
-        super
-      end
-
-      def insert_record(record, validate = true, raise = false)
-        if record.new_record?
-          if raise
-            record.save!(:validate => validate)
-          else
-            return unless record.save(:validate => validate)
-          end
-        end
-
-        stmt = join_table.compile_insert(
-          join_table[reflection.foreign_key]             => owner.id,
-          join_table[reflection.association_foreign_key] => record.id
-        )
-
-        owner.class.connection.insert stmt
-
-        record
-      end
-
-      private
-
-        def count_records
-          load_target.size
-        end
-
-        def delete_records(records, method)
-          relation  = join_table
-          condition = relation[reflection.foreign_key].eq(owner.id)
-
-          unless records == :all
-            condition = condition.and(
-              relation[reflection.association_foreign_key]
-                .in(records.map { |x| x.id }.compact)
-            )
-          end
-
-          owner.class.connection.delete(relation.where(condition).compile_delete)
-        end
-
-        def invertible_for?(record)
-          false
-        end
-    end
-  end
-end
-- 
cgit v1.2.3