def run!
      trap(:INT) { @output.puts; exit 0; }

      sort_apps!

      @before_run_handler.each do |handler|
        @config.output.puts handler.call
      end

      loop do
        normal_text = @apps.map { |(name, options, callback)|
          if options[:cache]
            # TODO: implement the cache
            callback.call
          else
            callback.call
          end
        }.join(@config.delimiter)

        @config.output.send(@config.output_method, @config.start) if @config.start
        @config.output.print(normal_text)
        @config.output.send(@config.output_method, @config.ending) if @config.ending
        @config.output.flush
        sleep @config.interval
      end
    rescue Errno::EPIPE
    exit 0
  end
def run!
      trap(:INT) { @output.puts; exit 0; }

      sort_apps!

      @before_run_handler.each do |handler|
        @config.output.puts handler.call
      end

      loop do
        normal_text = @apps.map { |(name, options, callback)|
          if options[:cache]
            # TODO: implement the cache
            callback.call
          else
            callback.call
          end
        }.join(@config.delimiter)

        @config.output.send(@config.output_method, @config.start) if @config.start
        @config.output.print(normal_text)
        @config.output.send(@config.output_method, @config.ending) if @config.ending
        @config.output.flush
        sleep @config.interval
      end
    rescue Errno::EPIPE
    exit 0
  end
Public: Run the instance in an endless loop

 These endless loop may be stopped by sending it a SIGINT
 It runs the before_run handler first, then executes the
 defined app modules each interval