Sha256: 176c3bedf48cbbfd734fd512b4ed7a8cd35aecbb847b29423426b740711cdf5a

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module EmbeddedDocument
      extend ActiveSupport::Concern

      included do
        attr_accessor :_parent_document
      end

      module ClassMethods
        def embeddable?
          true
        end

        def embedded_in(owner_name)
          alias_method owner_name, :_parent_document
        end
      end

      module InstanceMethods
        def new?
          _root_document.try(:new?) || @_new
        end

        def destroyed?
          !!_root_document.try(:destroyed?)
        end

        def save(options={})
          _root_document.try(:save, options).tap do |result|
            persist(options) if result
          end
        end

        def save!(options={})
          valid? || raise(DocumentNotValid.new(self))
          _root_document.try(:save!, options).tap do |result|
            persist(options) if result
          end
        end

        def persist(options={})
          @_new = false
          clear_changes if respond_to?(:clear_changes)
          save_to_collection(options)
        end

        def _root_document
          @_root_document ||= _parent_document.try(:_root_document)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mongo_mapper-0.10.1 lib/mongo_mapper/plugins/embedded_document.rb
mongo_mapper-0.10.0 lib/mongo_mapper/plugins/embedded_document.rb
mongo_mapper-0.9.2 lib/mongo_mapper/plugins/embedded_document.rb
mongo_mapper-0.9.1 lib/mongo_mapper/plugins/embedded_document.rb
mongo_mapper-0.9.0 lib/mongo_mapper/plugins/embedded_document.rb