Sha256: 7023e4aa4e5cf7baa03a604569c8f22f057be6257ea07cdf2c938ec8a76bcab4

Contents?: true

Size: 1.36 KB

Versions: 6

Compression:

Stored size: 1.36 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module Associations
      class BelongsToProxy < Proxy
        def replace(doc)
          if doc
            doc.save if !doc.persisted?
            id = doc.id
          end

          reset
          proxy_owner[association.foreign_key] = id
          unless doc.nil?
            loaded
            @target = doc
          end
          @target
        end

        def build(attrs={}, &block)
          instantiate_target(:new, attrs, &block)
        end

        def create(attrs={}, &block)
          instantiate_target(:create, attrs, &block)
        end

        def create!(attrs={}, &block)
          instantiate_target(:create!, attrs, &block)
        end

        def save_to_collection(options={})
          @target.save(options) if @target
        end

      protected

        def find_target
          return nil if proxy_owner[association.foreign_key].nil?
          klass.find_by_id(proxy_owner[association.foreign_key])
        end

        def instantiate_target(instantiator, attrs={}, &block)
          @target = klass.send(instantiator, attrs, &block)
          proxy_owner[association.foreign_key] = @target.id
          loaded
          @target
        end

      private

        def stale_target?
          loaded? && proxy_owner[association.foreign_key] != @target&.id
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mongo_mapper-0.17.0 lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
mongo_mapper-0.16.0 lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
mongo_mapper-0.15.6 lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
mongo_mapper-0.15.5 lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
mongo_mapper-0.15.4 lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
mongo_mapper-0.15.3 lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb