module HaveAPI::Fs::Components
  class ComponentList < File
    def read
      str = component_list.map do |c|
        sprintf('%-50s %s', c.class.name, c.path)
      end.join("\n")
      str += "\n" unless str.empty?
      str
    end

    protected
    def component_list(component = nil)
      component ||= parent
      ret = []

      component.send(:children).each do |_, c|
        ret << c
        ret.concat(component_list(c))
      end

      ret
    end
  end
end