Sha256: 3a8691e89639fd281902a362f96b005cd0db9a0c410fb96c0c4f8fdd1edb1ae9

Contents?: true

Size: 1.42 KB

Versions: 37

Compression:

Stored size: 1.42 KB

Contents

module MongoDoc
  module Associations
    class DocumentProxy
      include ProxyBase

      attr_reader :document

      delegate :to_bson, :id, :to => :document

      %w(_modifier_path _selector_path).each do |setter|
        class_eval(<<-RUBY, __FILE__, __LINE__)
          def #{setter}=(path)
            super
            document.#{setter} = #{setter} if ProxyBase.is_document?(document)
          end
        RUBY
      end

      def _root=(value)
        @_root = value
        document._root = value if ProxyBase.is_document?(document)
      end

      def ==(other)
        if self.class === other
          document == other.document
        else
          document == other
        end
      end

      def build(attrs)
        item = _assoc_class.new(attrs)
        self.document = item
      end

      def document=(doc)
        attach(doc)
        @document = doc
      end

      def valid?
        if ProxyBase.is_document?(document)
          document.valid?
        else
          true
        end
      end

      private

      def method_missing(method, *args)
        unless document.respond_to?(method)
          raise NoMethodError, "undefined method `#{method.to_s}' for proxied \"#{document}\":#{document.class.to_s}"
        end

        if block_given?
          document.send(method, *args)  { |*block_args| yield(*block_args) }
        else
          document.send(method, *args)
        end
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 2 rubygems

Version Path
mongo_doc-0.6.34 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.33 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.32 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.31 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.30 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.29 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.28 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.27 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.26 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.25 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.23 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.22 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.21 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.20 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.19 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.18 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.17 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.16 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.15 lib/mongo_doc/associations/document_proxy.rb
mongo_doc-0.6.14 lib/mongo_doc/associations/document_proxy.rb