fork download
  1. class TaskList
  2. def items
  3. @items ||= []
  4. end
  5.  
  6. def append(tree)
  7. items << tree
  8. tree.children.sort.each do |subtree|
  9. append subtree
  10. end
  11. end
  12. end
  13.  
  14. class Task
  15. attr_reader :name, :children
  16.  
  17. def initialize(name, children = [])
  18. @name = name
  19. @children = children
  20. end
  21.  
  22. def <=>(other)
  23. name <=> other.name
  24. end
  25. end
  26.  
  27. task_list = TaskList.new
  28.  
  29. task_list.append Task.new('Foo', [
  30. Task.new('Car', [
  31. Task.new('Ddd'),
  32. Task.new('Aaa'),
  33. Task.new('Ccc'),
  34. Task.new('Bbb'),
  35. ]),
  36. Task.new('Bar'),
  37. ])
  38.  
  39. puts task_list.items.map(&:name)
Success #stdin #stdout 0s 28688KB
stdin
Standard input is empty
stdout
Foo
Bar
Car
Aaa
Bbb
Ccc
Ddd