Sha256: fff2e7d6eeb9e9d4c659eb61e759209b850d7c62340e1834e486f86efeb459b2

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

module CsvQuery
  class Outputter
    attr_reader :results

    def self.output(results)
      new(results).output
    end

    def initialize(results)
      @results = results
    end

    def output
      results.each_with_index do |result, index|
        puts format_string % result
        if index == 0
          puts separator_line
        end
      end
    end

    private

    def column_widths
      return @column_widths if @column_widths
      num_columns = if results.first
        results.first.size
      else
        0
      end

      column_widths = [0] * num_columns
      results.collect { |row|
        row.each_with_index do |column, index|
          width = column.size
          column_widths[index] = width if width > column_widths[index]
        end
      }
      return column_widths
    end

    def format_string
      return @format_string if @format_string

      format_strings = column_widths.collect { |width|
        "%#{width}s"
      }
      @format_string = format_strings.join(" | ")
    end

    def separator_line
      column_widths.collect { |width| '-' * width }.join('-+-')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
csv_query-1.0.2 lib/csv_query/outputter.rb
csv_query-1.0.1 lib/csv_query/outputter.rb