Skip to content

Commit 3e86e20

Browse files
committed
Added conveinience-builder-methods.
1 parent b301b51 commit 3e86e20

4 files changed

Lines changed: 76 additions & 23 deletions

File tree

DemoApp/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
new DotsTableRenderer()
2121
};
2222

23-
var tablebuilder = new TableBuilder();
24-
tablebuilder.TypeHandlers.AddHandler<decimal>((v, f) => $"$ {v:N2}");
23+
var tablebuilder = new TableBuilder()
24+
.AddTypeHandler<decimal>((v, f) => $"$ {v:N2}");
2525

2626
foreach (var r in renderers)
2727
{

README.md

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ There are more [examples below](#examples).
4242
An easier, quicker way to add columns is to invoke `AddColumns()`. By passing an array of column names all columns can be specified in one call:
4343

4444
```c#
45-
var table = new Table();
46-
table.AddColumns(new[] { "No.", "Name", "Position", "^Salary^" })
45+
var table = new Table()
46+
.AddColumns(new[] { "No.", "Name", "Position", "^Salary^" })
4747
.AddRow(1, "Bill Gates", "Founder Microsoft", 10000)
4848
// etc...
4949
```
@@ -117,8 +117,8 @@ public class CurrencyTypeHandler : ITypeHandler
117117
So when we then specify our values as decimals (by adding the `m`-suffix)...
118118

119119
```c#
120-
var table = new Table();
121-
table.AddColumns(new[] { "No.", "Name", "Position", "^Salary^" })
120+
var table = new Table()
121+
.AddColumns(new[] { "No.", "Name", "Position", "^Salary^" })
122122
.AddRow(1, "Bill Gates", "Founder Microsoft", 10000m)
123123
// etc ...
124124
```
@@ -163,11 +163,16 @@ And still shorter:
163163
```c#
164164
tablebuilder.TypeHandlers.AddHandler<decimal>((value, formatProvider) => string.Format("$ {0:N2}", value));
165165
```
166+
And instead of the `TypeHandlers` property we can also use the `AddTypeHandler()` method:
167+
168+
```c#
169+
tablebuilder.AddTypeHandler<decimal>((value, formatProvider) => string.Format("$ {0:N2}", value));
170+
```
166171

167172
And for those about to point out this can be written even shorter:
168173

169174
```c#
170-
tablebuilder.TypeHandlers.AddHandler<decimal>((v, _) => $"$ {v:N2}");
175+
tablebuilder.AddTypeHandler<decimal>((v, _) => $"$ {v:N2}");
171176
```
172177

173178
A `TypeHandler` can also be passed to a `Column`'s constructor, in which case that `TypeHandler` is used for all values in that column.
@@ -200,8 +205,8 @@ var persons = new[]
200205
By default the TextTableBuilder outputs properties of objects in alfabetical order; for our example that just happens to work out:
201206

202207
```c#
203-
var table = new Table();
204-
table.AddColumns(new[] { "Name", "Position", "^Salary^" })
208+
var table = new Table()
209+
.AddColumns(new[] { "Name", "Position", "^Salary^" })
205210
.AddRows(persons);
206211

207212
var tablebuilder = new TableBuilder();
@@ -230,13 +235,18 @@ public class PersonHandler : IObjectHandler
230235
After that, building a table for this data is simple:
231236

232237
```c#
233-
var table = new Table();
234-
table.AddColumns(new[] { "Name", "Position", "^Salary^" })
238+
var table = new Table()
239+
.AddColumns(new[] { "Name", "Position", "^Salary^" })
235240
.AddRows(persons);
236241

237242
var tablebuilder = new TableBuilder();
243+
238244
// Specify object handler to use for persons
239245
tablebuilder.ObjectHandlers.AddHandler<Person>(new PersonHandler());
246+
// Or, alternatively:
247+
tablebuilder.AddObjectHandler<Person>(new PersonHandler());
248+
249+
240250
Console.WriteLine(tablebuilder.Build(table));
241251
```
242252

@@ -272,7 +282,7 @@ tablebuilder.ObjectHandlers.AddHandler<Person>(new DelegatingObjectHandler<decim
272282
Still shorter:
273283

274284
```c#
275-
tablebuilder.ObjectHandlers.AddHandler<Person>((person, columnCount) => new object[] { person.Name, person.Position, person.Salary });
285+
tablebuilder.AddObjectHandler<Person>((person, columnCount) => new object[] { person.Name, person.Position, person.Salary });
276286
```
277287

278288
When no handler for a specific object can be found then the `DefaultObjectHandler` is used which simply takes all readable properties and returns those in alfabetical order unless...
@@ -315,8 +325,8 @@ var persons = new[]
315325
// etc ...
316326
};
317327

318-
var table = new Table();
319-
table.AddColumns(new[] { "Position", "Name", "^Salary^" })
328+
var table = new Table()
329+
.AddColumns(new[] { "Position", "Name", "^Salary^" })
320330
.AddRows(persons);
321331

322332
var tablebuilder = new TableBuilder();
@@ -339,12 +349,12 @@ Note the DateOfBirth column is missing; this is because the `DefaultObjectHandle
339349
However, if we print the table like this:
340350

341351
```c#
342-
var table = new Table();
343-
table.AddColumns(new[] { "Position", "Name", "^Salary^", "Birthdate", "Alma mater", "Spouse" })
352+
var table = new Table()
353+
.AddColumns(new[] { "Position", "Name", "^Salary^", "Birthdate", "Alma mater", "Spouse" })
344354
.AddRows(persons);
345355

346356
var tablebuilder = new TableBuilder();
347-
tablebuilder.TypeHandlers.AddHandler<DateTime>(new DelegatingTypeHandler<DateTime>((date, formatprovider) => $"{date:yyyy-MM-dd}"));
357+
tablebuilder.AddTypeHandler<DateTime>(new DelegatingTypeHandler<DateTime>((date, formatprovider) => $"{date:yyyy-MM-dd}"));
348358
Console.WriteLine(tablebuilder.Build(table));
349359
```
350360

@@ -494,11 +504,10 @@ var table = new Table()
494504
.AddColumns(new[] { "Name", "Position", "^Salary^" })
495505
.AddRows(DBContext.Persons.Where(p => p.Salary > 100));
496506

497-
var tablebuilder = new TableBuilder();
498-
// Specify object handler to use for persons
499-
tablebuilder.ObjectHandlers.AddHandler<Person>(
500-
(person, columnCount) => new object[] { person.Name, person.Position, person.Salary }
501-
);
507+
var tablebuilder = new TableBuilder()
508+
.AddObjectHandler<Person>( // Specify object handler to use for persons
509+
(person, columnCount) => new object[] { person.Name, person.Position, person.Salary }
510+
);
502511
Console.WriteLine(tablebuilder.Build(table));
503512
```
504513

TextTableBuilder/TableBuilder.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,48 @@ public string Build(Table table, ITableRenderer tableRenderer, IFormatProvider f
9090
rows
9191
);
9292
}
93+
94+
#region Convenience methods
95+
public TableBuilder AddObjectHandler(Type type, IObjectHandler objectHandler)
96+
{
97+
ObjectHandlers.AddHandler(type, objectHandler);
98+
return this;
99+
}
100+
101+
public TableBuilder AddObjectHandler<T>(IObjectHandler objectHandler)
102+
{
103+
ObjectHandlers.AddHandler<T>(objectHandler);
104+
return this;
105+
}
106+
107+
public TableBuilder AddObjectHandler<T>(Func<T, int, object?[]> func)
108+
{
109+
ObjectHandlers.AddHandler<T>(func);
110+
return this;
111+
}
112+
113+
public TableBuilder AddTypeHandler(Type type, ITypeHandler typeHandler)
114+
{
115+
TypeHandlers.AddHandler(type, typeHandler);
116+
return this;
117+
}
118+
119+
public TableBuilder AddTypeHandler<T>(ITypeHandler typeHandler)
120+
{
121+
TypeHandlers.AddHandler<T>(typeHandler);
122+
return this;
123+
}
124+
125+
public TableBuilder AddTypeHandler<T>(Func<T, IFormatProvider, string> func)
126+
{
127+
TypeHandlers.AddHandler<T>(func);
128+
return this;
129+
}
130+
131+
public TableBuilder SetTypeHandlerNullValueHandler<T>(INullValueHandler nullValueHandler)
132+
{
133+
TypeHandlers.NullValueHandler = nullValueHandler ?? NullValueHandler.Default;
134+
return this;
135+
}
136+
#endregion
93137
}

TextTableBuilder/TextTableBuilder.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<PackageTags>text;table;simple</PackageTags>
1818
<PackageReadmeFile>README.md</PackageReadmeFile>
1919
<PackageLicenseExpression>MIT</PackageLicenseExpression>
20-
<Version>1.1.3</Version>
20+
<Version>1.2.0</Version>
2121
<PackageReleaseNotes>Added a bunch of new table renderers</PackageReleaseNotes>
2222
</PropertyGroup>
2323

0 commit comments

Comments
 (0)