class NSWTopo::TreeIndenter
def initialize(items, parts = nil, &block)
def initialize(items, parts = nil, &block) @enum = Enumerator.new do |yielder| next unless items grouped = block_given? ? block.call(items) : items grouped.each.with_index do |(item, group), index| *new_parts, last_part = parts case last_part when "├─ " then new_parts << "│ " when "└─ " then new_parts << " " end new_parts << case index when grouped.size - 1 then "└─ " else "├─ " end if parts yielder << [new_parts, item] TreeIndenter.new(group, new_parts, &block).each(&yielder) end end end