Sha256: 8ffa4a42b30f4154cd1269c0c7ab52f643e88a4437c499b0ba88184722eda976

Contents?: true

Size: 1.68 KB

Versions: 5

Compression:

Stored size: 1.68 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module Associations
      class ManyAssociation < Base

        def class_name
          @class_name ||= options[:class_name] || name.to_s.singularize.camelize
        end

        # hate this, need to revisit
        def proxy_class
          @proxy_class ||= if klass.embeddable?
            polymorphic? ? ManyEmbeddedPolymorphicProxy : ManyEmbeddedProxy
          else
            if polymorphic?
              ManyPolymorphicProxy
            elsif as?
              ManyDocumentsAsProxy
            elsif in_foreign_array?
              InForeignArrayProxy
            elsif in_array?
              InArrayProxy
            else
              ManyDocumentsProxy
            end
          end
        end

        def setup(model)
          model.associations_module.module_eval(<<-end_eval, __FILE__, __LINE__ + 1)
            def #{name}
              get_proxy(associations[#{name.inspect}]).read
            end

            def #{name}=(value)
              get_proxy(associations[#{name.inspect}]).write(value)
            end
          end_eval

          association = self
          options = self.options

          model.before_destroy do
            if !association.embeddable?
              case options[:dependent]
                when :destroy
                  self.get_proxy(association).destroy_all
                when :delete_all
                  self.get_proxy(association).delete_all
                when :nullify
                  self.get_proxy(association).nullify
              end
            end
          end
        end

        def autosave?
          options.fetch(:autosave, true)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mongo_mapper-0.17.0 lib/mongo_mapper/plugins/associations/many_association.rb
mongo_mapper-0.16.0 lib/mongo_mapper/plugins/associations/many_association.rb
mongo_mapper-0.15.6 lib/mongo_mapper/plugins/associations/many_association.rb
mongo_mapper-0.15.5 lib/mongo_mapper/plugins/associations/many_association.rb
mongo_mapper-0.15.4 lib/mongo_mapper/plugins/associations/many_association.rb