Sha256: 217770f7303750ea5e6ea21a66053e8e9daed31a7e65440690626f664b6b2b69

Contents?: true

Size: 1.55 KB

Versions: 2

Compression:

Stored size: 1.55 KB

Contents

module ActiveRecord
  module Associations
    class AssociationCollection

      include Hobo::Scopes::ApplyScopes


      def hobo_association_collection?
        Hobo::Model.in?(@owner.class.included_modules)
      end


      def new_candidate(attributes = {})
        record = new
        @target.delete record
        set_reverse_association(record) if hobo_association_collection?
        record
      end


      def user_new_candidate(user, attributes = {})
        record = user_new(user, attributes)
        @target.delete record
        set_reverse_association(record) if hobo_association_collection?
        record
      end

      # DO NOT call super here - AssociationProxy's version loads the collection, and that's bad.
      # TODO: this really belongs in Rails; migrate it there ASAP
      def respond_to?(*args)
        proxy_respond_to?(*args) || Array.new.respond_to?(*args)
      end

      # TODO: send this patch into Rails. There's no reason to load the collection just to find out it acts like an array.
      def is_a?(klass)
        Array.is_a?(klass)
      end

      def member_class
        proxy_reflection.klass
      end

      private

        def set_reverse_association(object)
          if @owner.new_record? &&
              (refl = @owner.class.reverse_reflection(@reflection.name)) &&
              refl.macro == :belongs_to
            bta = ActiveRecord::Associations::BelongsToAssociation.new(object, refl)
            bta.replace(@owner)
            object.instance_variable_set("@#{refl.name}", bta)
          end
        end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hobo-0.9.105 lib/active_record/association_collection.rb
hobo-0.9.104 lib/active_record/association_collection.rb