Sha256: 5c964d30f7a1fec890905f3c9d9ad0fed46fe62448542c90c7eb9c2326cc51b6

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

module Reflections
  module Remappers
    class HasAndBelongsToMany < Reflections::Remapper
      REMAPPERS << 'has_and_belongs_to_many'

      def remap(ar_classes, &block)
        ar_classes.each do |ar_class|
          associations_for_class(ar_class).each do |association|
            ar_class.includes(association.name).where("#{association.join_table}.#{association.foreign_key}").references(association.name).each do |record|
              update_record_or_yield record, association, &block
            end
          end
        end
      end

      private

      def filter_for_class(klass)
        ->(assoc) {
          assoc.name == klass.to_s.pluralize.underscore.to_sym || assoc.options[:class_name] == klass.model_name
        }
      end

      def update_record(record, association)
        association = record.send association.name
        association.delete(from_obj)
        association << to_obj
      end

      def associations(ar_class)
        ar_class.reflect_on_all_associations :has_and_belongs_to_many
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reflections-1.2.0 lib/reflections/remappers/has_and_belongs_to_many.rb