Rename child#to_a

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Done
    • 2.4.0
    • Affects Version/s: None
    • Component/s: None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      I had written a custom to_a method on an embedded document, without realizing that Mongoid uses to_a internally and expects it to work a certain way.

      In this instance:

      module Mongoid #:nodoc
        module Hierarchy #:nodoc
          module InstanceMethods #:nodoc:
      
            # @return [ Array<Document> ] All child documents in the hierarchy.
            def _children
              @_children ||=
                [].tap do |children|
                  relations.each_pair do |name, metadata|
                    if metadata.embedded?
                      child = send(name)
                      child.to_a.each do |doc|
                        children.push(doc)
                        children.concat(doc._children) unless metadata.versioned?
                      end if child
                    end
                  end
                end
            end
      

      When child.to_a is called, it appears to expect a document to wrap itself in an array (e.g. calling to_a on #<SomeDocument> should return <SomeDocument>).

      If a document's to_a method returns any elements that can't respond to _children, Mongoid will raise an exception. Given that it's not that uncommon to write a custom to_a, wouldn't it be better to use a different method here?

              Assignee:
              Unassigned
              Reporter:
              Pete Nicholls [X]
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: