Sha256: d07161d476a73755e12558588fda60462907d9a348ca16df5703b4025b848f89

Contents?: true

Size: 1.53 KB

Versions: 16

Compression:

Stored size: 1.53 KB

Contents

#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
# Copyright Steffi Dorn <mail@muflax.com>, 2017
# License: GNU GPLv3 (or later) <http://www.gnu.org/copyleft/gpl.html>

class Table
  def initialize separator: "\t", alignment: :left
    @rows     	= []
    @lengths  	= []
    @separator	= separator
    @just     	= case alignment
                  when :left   ; :ljust
                  when :right  ; :rjust
                  when :center ; :center
                  else
                    raise "invalid alignment: #{alignment}"
                  end
  end

  def [](row)    	; @rows[row]    	; end
  def []=(row, x)	; @rows[row] = x	; end

  def <<(row)
    row.each.with_index do |x, i|
      l = @lengths[i] || 0
      s = x.str_length
      @lengths[i] = s if s > l
    end

    @rows << row
  end

  def render out
    @rows.each.with_index do |row, row_i|
      row.each.with_index do |elem, elem_i|
        len = @lengths[elem_i]
        next if len.nil?

        # align element based on how much it's internally longer than it appears
        aligned = if not elem.nil?
                    elem_diff = elem.to_s.length - elem.str_length
                    elem.send(@just, len + elem_diff)
                  else
                    " "*len
                  end

        if elem_i == (row.size - 1)
          out.write(aligned.rstrip)
        else
          out.write(aligned)
          out.write(@separator)
        end
      end
      out.write("\n") unless row_i == (@rows.size - 1)
    end
  end

  def to_s
    render(StringIO.new).string
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
muflax-0.3.14 lib/muflax/table.rb
muflax-0.3.13 lib/muflax/table.rb
muflax-0.3.12 lib/muflax/table.rb
muflax-0.3.11 lib/muflax/table.rb
muflax-0.3.10 lib/muflax/table.rb
muflax-0.3.9 lib/muflax/table.rb
muflax-0.3.8 lib/muflax/table.rb
muflax-0.3.7 lib/muflax/table.rb
muflax-0.3.6 lib/muflax/table.rb
muflax-0.3.5 lib/muflax/table.rb
muflax-0.3.4 lib/muflax/table.rb
muflax-0.3.3 lib/muflax/table.rb
muflax-0.3.2 lib/muflax/table.rb
muflax-0.3.1 lib/muflax/table.rb
muflax-0.3.0 lib/muflax/table.rb
muflax-0.2.6 lib/muflax/table.rb