Sha256: 6ede1c99acddd5d877df5e0a3455a619711f4dc67c304cc3a691fc8c8f11c732

Contents?: true

Size: 1011 Bytes

Versions: 1

Compression:

Stored size: 1011 Bytes

Contents

module Termtable
  class Table
    def initialize(*args)
      if args.first.is_a?(Array) && args.depth == 1
        raise Termtable::Error::InitializationError, '2d array required for initialization'
      end

      if args.empty?
        @rows = []

        yield(self) if block_given?
      else
        if args.first.is_a?(Hash)
          headers = args.first.delete(:headers)
          @rows = args.first.delete(:rows)
        elsif args.size == 2
          headers, @rows = args
        else
          @rows = args.first
        end

        buffer_jagged_array!

        @rows = @rows.map { |row| Row.new(row) }
        @rows.unshift(Header.new(headers)) unless headers.nil?
      end
    end

    def buffer_jagged_array!
      max = @rows.map(&:size).max
      @rows.map { |row| (max - row.size).times { row << ' ' } }
    end

    def row_count
      @rows.size
    end

    def <<(row)
      @rows << Row.new(row)
    end

    def render(**opts)
      Render.new(@rows, opts).exec
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
termtable-0.1.0 lib/termtable/table.rb