Sha256: f2cea075a12d6ea69a23d43ab92146b6c32d93886f93259a21372e35c39f990a

Contents?: true

Size: 1.22 KB

Versions: 57

Compression:

Stored size: 1.22 KB

Contents

require 'json'
require 'csv'

module BooticCli
  module Formatters

    class Table
      CELL_PADDING = 5.freeze

      def format(array_of_arrays, headings = true)
        array_of_arrays = array_of_arrays.dup

        # [122, 23, 45, 66]
        cell_sizes = array_of_arrays.each.with_object([]) do |row, memo|
          row.each.with_index do |cell, idx|
            if !memo[idx] || memo[idx] < cell.size
              memo[idx] = cell.size
            end
          end
        end

        data = array_of_arrays.map do |row|
          row.map.with_index{|e, idx|
            e.to_s.ljust(cell_sizes[idx] + CELL_PADDING)
          }.join(' | ')
        end

        if headings
          sep = cell_sizes.map{|i| '-' * (i + CELL_PADDING)}.join('-|-')
          data.insert(1, sep)
        end

        data.join("\r\n")

      end

    end

    class Json
      def format(data)
        JSON.dump data
      end
    end

    class Csv
      def format(data)
        CSV.generate do |csv|
          data.each do |row|
            csv << row
          end
        end
      end
    end

    FMTS = {
      table: Table,
      json: Json,
      csv: Csv
    }

    def self.format(k, data)
      FMTS[k.to_sym].new.format(data)
    end
  end
end

Version data entries

57 entries across 57 versions & 1 rubygems

Version Path
bootic_cli-1.2.0 lib/bootic_cli/formatters.rb
bootic_cli-1.1.0 lib/bootic_cli/formatters.rb
bootic_cli-1.0.0 lib/bootic_cli/formatters.rb
bootic_cli-0.9.6 lib/bootic_cli/formatters.rb
bootic_cli-0.9.5 lib/bootic_cli/formatters.rb
bootic_cli-0.9.4 lib/bootic_cli/formatters.rb
bootic_cli-0.9.3 lib/bootic_cli/formatters.rb
bootic_cli-0.9.2 lib/bootic_cli/formatters.rb
bootic_cli-0.9.1 lib/bootic_cli/formatters.rb
bootic_cli-0.9.0 lib/bootic_cli/formatters.rb
bootic_cli-0.8.2 lib/bootic_cli/formatters.rb
bootic_cli-0.8.1 lib/bootic_cli/formatters.rb
bootic_cli-0.8.0 lib/bootic_cli/formatters.rb
bootic_cli-0.7.3 lib/bootic_cli/formatters.rb
bootic_cli-0.7.2 lib/bootic_cli/formatters.rb
bootic_cli-0.7.1 lib/bootic_cli/formatters.rb
bootic_cli-0.7.0 lib/bootic_cli/formatters.rb
bootic_cli-0.6.7 lib/bootic_cli/formatters.rb
bootic_cli-0.6.6 lib/bootic_cli/formatters.rb
bootic_cli-0.6.5 lib/bootic_cli/formatters.rb