public bool IsParentOf(DocumentHeader header)
        {
            if (header == null) throw new ArgumentNullException(nameof(header));

            var parentPath = string.Join("/", header._parts.Take(header._parts.Length - 2));

            return _path == parentPath;
        }
 private void Verify(DocumentHeader[] list, int index, string id, string name)
 {
     list.Length.ShouldBeGreaterThanOrEqualTo(index);
     var item = list[index];
     item.ShouldNotBeNull(name);
     item.Id.ShouldBe(id);
     item.Name.ShouldBe(name);
 }
        public bool IsParentOf(DocumentHeader header)
        {
            if (header == null)
            {
                throw new ArgumentNullException(nameof(header));
            }

            var parentPath = string.Join("/", header._parts.Take(header._parts.Length - 2));

            return(_path == parentPath);
        }
        private DocumentHeader(string id, string[] parts, DocumentHeader[] children = null)
        {
            if (parts == null) throw new ArgumentNullException(nameof(parts));
            
            Id = id;
            Children = children ?? new DocumentHeader[0];

            _parts = parts;
            _path = string.Join("/", parts);

            Order = parts.Skip(parts.Length - 2).FirstOrDefault();
            Name = parts.Last();
        }
        private DocumentHeader AddChildren(DocumentHeader parent, IEnumerable <DocumentHeader> headers)
        {
            var children = headers.Where(parent.IsParentOf);

            return(parent.AddChildren(children));
        }