def <<(row)
      cells = if row_mapper
                row_mapper.map(row)
              else
                row
              end

      if @columns.nil? || @columns.empty?
        @columns = Tabular::Columns.new(self, cells, column_mapper)
        return columns unless cells.respond_to?(:keys)
      end

      new_row = Tabular::Row.new(self, cells, row)
      new_row.each_key do |key|
        columns << key
      end
      rows << new_row
      new_row
    end
def <<(row)
      cells = if row_mapper
                row_mapper.map(row)
              else
                row
              end

      if @columns.nil? || @columns.empty?
        @columns = Tabular::Columns.new(self, cells, column_mapper)
        return columns unless cells.respond_to?(:keys)
      end

      new_row = Tabular::Row.new(self, cells, row)
      new_row.each_key do |key|
        columns << key
      end
      rows << new_row
      new_row
    end
Add row to end of table. Create missing columns and link the source row to Row#source.
 To control how source data is added to the Table, use Table#mapper= to set a class that
 implements map(row) and returns a Hash.