Sha256: 5bdf31a268706a2b9a650ffac36abf4adc80bf59ffb6bdd3c1f4bc90ae6506a8

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 |value, index|
          width = value.to_s.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.4 lib/csv_query/outputter.rb
csv_query-1.0.3 lib/csv_query/outputter.rb