Don't forget to lycansubscribe
1class ImportReport 2 def initialize 3 @data = {} 4 @start = Time.now 5 end 6 7 def update(data) 8 deep_merge(@data, data) 9 render 10 end 11 12 def deep_merge(target, updates) 13 updates.each do |k, v| 14 if v.is_a?(Hash) 15 target[k] ||= {} 16 deep_merge(target[k], v) 17 else 18 target[k] = v 19 end 20 end 21 end 22 23 def render 24 print " " * 80 + "\r" 25 puts "Elapsed time: #{(Time.now - @start).to_i} s" 26 27 importers = @data[:importers] || {} 28 29 importers.each do |name, data| 30 print " " * 80 + "\r" 31 puts "#{name}: imported items = #{data[:imported_items] || 0} (until: #{data[:oldest_date]}) #{" (DONE)" if data[:finished]}" 32 end 33 34 print " " * 80 + "\r" 35 puts "Downloader: imported posts = #{@data.dig(:downloader, :downloaded_posts) || 0} (until: #{@data.dig(:downloader, :oldest_date)})" 36 37 print " " * 80 + "\r" 38 puts "Queue size: #{@data.dig(:queue, :length) || 0}" 39 40 print "\e[#{3 + importers.length}A" 41 end 42end