formatTable method
Here we have something like:
{ (number;123), (password;ABC) }
{ (number;456), (password;XYZ) }
Implementation
String formatTable(BddConfig config) {
//
Map<String, int> sizes = {};
for (row _row in rows) {
//
for (val value in _row.values) {
int? maxValue1 = sizes[value.name];
int maxValue2 = max(value.name.length, value.toString(config).length);
int maxValue =
(maxValue1 == null) ? maxValue2 : max(maxValue1, maxValue2);
sizes[value.name] = maxValue;
}
}
var spaces = config.spaces;
var space = config.space;
var endOfLineChar = config.endOfLineChar;
var tableDivider = config.tableDivider;
String rightAlignPadding = spaces +
spaces +
spaces +
((config.rightAlignKeywords) ? config.padChar * 4 : '');
String header = rightAlignPadding +
'$tableDivider$space' +
rows.first.values.map((val) {
int length = sizes[val.name] ?? 50;
return val.name.padRight(length, space);
}).join('$space$tableDivider$space') +
'$space$tableDivider';
List<String> rowsStr = rows.map((row) {
return rightAlignPadding +
'$tableDivider$space' +
row.values.map((val) {
int length = sizes[val.name] ?? 50;
return val.toString(config).padRight(length, space);
}).join('$space$tableDivider$space') +
'$space$tableDivider';
}).toList();
var result = '$header$endOfLineChar'
'${rowsStr.join(endOfLineChar)}';
return result;
}