Sha256: 9f8e70d4ba351422b7030d0138bfb8ec1f544502e1aa93f9a4a4034e3e9cee73

Contents?: true

Size: 1.58 KB

Versions: 6

Compression:

Stored size: 1.58 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(reflection.finder_options.merge(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] || reflection.name.to_s.camelize).constantize
        end
        
        def foreign_key
          options[:foreign_key] || owner.class.name.foreign_key
        end
    end
  end
end

Version data entries

6 entries across 6 versions & 3 rubygems

Version Path
mrkurt-mongo_mapper-0.6.11 lib/mongo_mapper/associations/one_proxy.rb
mongo_mapper-unstable-2010.1.6 lib/mongo_mapper/associations/one_proxy.rb
mongo_mapper-unstable-2010.1.5 lib/mongo_mapper/associations/one_proxy.rb
mongo_mapper-unstable-2010.1.4 lib/mongo_mapper/associations/one_proxy.rb
tpitale-mongo_mapper-0.6.10 lib/mongo_mapper/associations/one_proxy.rb
mrkurt-mongo_mapper-0.6.10 lib/mongo_mapper/associations/one_proxy.rb