def merge_attributes(other, attributes=nil, matches=nil, &filter)
      if Hash === other then
        # take the transitive closure of the specimens
        spcs = other.delete(:specimens)
        if spcs then
          spcs = [spcs] if CaTissue::Specimen === spcs
          # take the transitive closure of the root specimens in the hierarchy
          other[:specimens] = spcs.select { |spc| spc.parent.nil? }.transitive_closure(:children)
        end
      end
      # delegate to Collectible
      super
    end
def merge_attributes(other, attributes=nil, matches=nil, &filter)
      if Hash === other then
        # take the transitive closure of the specimens
        spcs = other.delete(:specimens)
        if spcs then
          spcs = [spcs] if CaTissue::Specimen === spcs
          # take the transitive closure of the root specimens in the hierarchy
          other[:specimens] = spcs.select { |spc| spc.parent.nil? }.transitive_closure(:children)
        end
      end
      # delegate to Collectible
      super
    end
Merges the other object into this SpecimenCollectionGroup. This method augments
 {CaTissue::Collectible#merge_attributes} as follows:
 * Adds the transitive closure of each non-derived Specimen in the source.

 @param (see CaTissue::Collectible#merge_attributes)
 @option (see CaTissue::Collectible#merge_attributes)