Sha256: 25a35fb3d62ae0d2503ed515aa0e56c13135c22120eda146bd321546c49e194e

Contents?: true

Size: 1.93 KB

Versions: 35

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true

module Bridgetown
  class LiquidRenderer
    # TODO: deprecate or move to a separate repo/plugin
    class Table
      GAUGES = [:count, :bytes, :time].freeze

      def initialize(stats)
        @stats = stats
      end

      def to_s(num_of_rows = 50)
        tabulate(data_for_table(num_of_rows))
      end

      private

      def tabulate(data)
        require "terminal-table"

        header = data.shift
        footer = data.pop
        output = +"\n"

        table = Terminal::Table.new do |t|
          t << header
          t << :separator
          data.each { |row| t << row }
          t << :separator
          t << footer
          t.style = { alignment: :right, border_top: false, border_bottom: false }
          t.align_column(0, :left)
        end

        output << table.to_s << "\n"
      end

      # rubocop:disable Metrics/AbcSize
      def data_for_table(num_of_rows)
        sorted = @stats.sort_by { |_, file_stats| -file_stats[:time] }
        sorted = sorted.slice(0, num_of_rows)

        table  = [header_labels]
        totals = Hash.new { |hash, key| hash[key] = 0 }

        sorted.each do |filename, file_stats|
          GAUGES.each { |gauge| totals[gauge] += file_stats[gauge] }
          row = []
          row << filename
          row << file_stats[:count].to_s
          row << format_bytes(file_stats[:bytes])
          row << format("%.3f", file_stats[:time])
          table << row
        end

        footer = []
        footer << "TOTAL (for #{sorted.size} files)"
        footer << totals[:count].to_s
        footer << format_bytes(totals[:bytes])
        footer << format("%.3f", totals[:time])
        table  << footer
      end
      # rubocop:enable Metrics/AbcSize

      def header_labels
        GAUGES.map { |gauge| gauge.to_s.capitalize }.unshift("Filename")
      end

      def format_bytes(bytes)
        bytes /= 1024.0
        format("%.2fK", bytes)
      end
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
bridgetown-core-1.2.0.beta5 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.2.0.beta4 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.2.0.beta3 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.2.0.beta2 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.2.0.beta1 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.1.0 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.1.0.beta3 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.1.0.beta2 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.1.0.beta1 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.beta3 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.beta2 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.beta1 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha11 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha10 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha9 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha8 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha7 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha6 lib/bridgetown-core/liquid_renderer/table.rb
bridgetown-core-1.0.0.alpha5 lib/bridgetown-core/liquid_renderer/table.rb