Skip to content

Commit 4abb7aa

Browse files
committed
F!! MarkdownTable allows consistent width
1 parent 925ce7f commit 4abb7aa

File tree

6 files changed

+60
-4
lines changed

6 files changed

+60
-4
lines changed

approvaltests-util/src/main/java/com/spun/util/MarkdownTable.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
public class MarkdownTable implements MarkdownCompatible
77
{
88
public Queryable<MarkdownTableElement> markdown = new Queryable<MarkdownTableElement>(MarkdownTableElement.class);
9+
private boolean fixedWidth = false;
10+
11+
public void setColumnsConsistentWidth(boolean setting) {
12+
fixedWidth = setting;
13+
}
914
public static <I, O> MarkdownTable create(I[] inputs, Function1<I, O> o, String column1, String column2)
1015
{
1116
MarkdownTable table = new MarkdownTable().withColumnHeaders(column1, column2);
@@ -48,8 +53,23 @@ public String toString()
4853
@Override
4954
public String toMarkdown()
5055
{
56+
handleFixedWidth();
5157
return render(markdown);
5258
}
59+
60+
private void handleFixedWidth() {
61+
if (!fixedWidth) { return; }
62+
Queryable<Queryable<MarkdownTableElement>> rows = markdown.split(e -> e == MarkdownTableElement.NEWLINE);
63+
for (int column = 0; column < rows.get(0).size(); column++) {
64+
int col = column;
65+
if (rows.get(0).get(column) instanceof MarkdownTableContents) {
66+
Queryable<MarkdownTableContents> select = rows.select(e -> e.get(col)).where(e -> e instanceof MarkdownTableContents).select(e -> (MarkdownTableContents) e);
67+
int length = select.max(e -> e.getLength()).getLength();
68+
select.forEach(e -> e.setPadding(length));
69+
}
70+
}
71+
}
72+
5373
public static String printColumnHeaders(String... headers)
5474
{
5575
return render(constructColumnHeaders(headers));
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
package com.spun.util;
22

3-
public class MarkdownTableContents {
3+
public class MarkdownTableContents implements MarkdownTableElement {
44
private String contents;
5+
private int padUntil;
56

67
public MarkdownTableContents(String contents) {
78
this.contents = contents;
89
}
910

1011
@Override
1112
public String toString() {
12-
return " " + contents + " ";
13+
return " " + StringUtils.pad(contents, padUntil) + " ";
14+
}
15+
16+
public int getLength() {
17+
return contents.length();
18+
}
19+
20+
public void setPadding(int length) {
21+
padUntil = length;
1322
}
1423
}

approvaltests-util/src/main/java/com/spun/util/StringUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,4 +603,14 @@ public static String replaceAll(String input, Pattern pattern, Function1<String,
603603
}
604604
return input;
605605
}
606+
607+
public static String pad(String contents, int targetLength) {
608+
while(contents.length() < targetLength) {
609+
contents += " ";
610+
if (contents.length() < targetLength) {
611+
contents = " " + contents;
612+
}
613+
}
614+
return contents;
615+
}
606616
}

approvaltests-util/src/main/java/org/lambda/query/Queryable.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lambda.query;
22

33
import com.spun.util.ClassUtils;
4+
import com.spun.util.MarkdownTableContents;
45
import com.spun.util.ObjectUtils;
56
import org.lambda.Extendable;
67
import org.lambda.functions.Function1;
@@ -172,4 +173,19 @@ public <Out> String join(String joinCharacter, Function1<In, Out> transformer)
172173
{
173174
return String.join(joinCharacter, this.select(t -> "" + transformer.call(t)));
174175
}
176+
177+
public Queryable<Queryable<In>> split(Function1<In, Boolean> function) {
178+
Queryable<Queryable<In>> results = new Queryable<>();
179+
Queryable<In> part = new Queryable<>();
180+
for (In in : this) {
181+
if (function.call(in)) {
182+
results.add(part);
183+
part = new Queryable<>();
184+
}
185+
else {
186+
part.add(in);
187+
}
188+
}
189+
return results;
190+
}
175191
}

approvaltests-util/src/main/java/org/lambda/utils/Grid.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ public static String printMarkdown(int width, int height, Function2<Integer, Int
2929
{
3030
Queryable<Integer> numbers = Range.getAsQueryable(0, width - 1);
3131
Queryable<String> asQueryable = numbers.select(i -> "" + i);
32-
asQueryable.add(0, " ");
32+
asQueryable.add(0, " ");
3333
MarkdownTable table = MarkdownTable.withHeaders(asQueryable.asArray());
34+
table.setColumnsConsistentWidth(true);
3435
for (int y = 0; y < height; y++) {
3536
int y2 = y;
3637
Queryable<String> row = numbers.select(x -> f2.call(x, y2)).select(c -> c == null ? "" : c);

todo.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Code
2-
* Refactor Grid to use MarkdownTables
2+
* Change MarkdownTable to have a header element which expands with dashes
33
* Refactor PairwiseTest to use MarkdownTables
44
* Consider splitting MarkdownTables into VerifiableMarkdownTables (or generally handle the allowing of MarkdownTables in production code)
55
* Update koans

0 commit comments

Comments
 (0)