Sha256: ca2a6bb32cfccdfd2f40e45c0cd3eb32ed9b8fdc6ea819e94f76874163a32304

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module MongoMapper
  module Associations
    class OneProxy < Proxy
      def build(attrs={})
        instantiate_target(:new, attrs)
      end
      
      def create(attrs={})
        instantiate_target(:create, attrs)
      end
      
      def create!(attrs={})
        instantiate_target(:create!, attrs)
      end
      
      def replace(doc)
        load_target
        
        if !target.nil? && target != doc
          if options[:dependent] && !target.new?
            case options[:dependent]
              when :delete
                target.delete
              when :destroy
                target.destroy
              when :nullify
                target[foreign_key] = nil
                target.save
            end
          end
        end
        
        reset
        
        unless doc.nil?
          owner.save if owner.new?
          doc[foreign_key] = owner.id
          doc.save if doc.new?
          loaded
          @target = doc
        end
      end

      protected
        def find_target
          target_class.first(foreign_key => owner.id)
        end
        
        def instantiate_target(instantiator, attrs={})
          @target = target_class.send(instantiator, attrs.update(foreign_key => owner.id))
          loaded
          @target
        end
        
        def target_class
          @target_class ||= options[:class] || (options[:class_name] || association.name.to_s.camelize).constantize
        end
        
        def foreign_key
          options[:foreign_key] || owner.class.name.foreign_key
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongo_mapper-0.6.10 lib/mongo_mapper/associations/one_proxy.rb