Skip to content

Commit 4659b6f

Browse files
authored
Merge pull request #91 from Quafadas/copilot/fix-90
Fix ptbln and ptbl methods to support finite collections (Array, ArraySeq, Vector)
2 parents c89d401 + 25455c5 commit 4659b6f

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

scautable/src/consoleFormat.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import scala.util.NotGiven
1010

1111
object ConsoleFormat:
1212

13-
extension (s: Seq[Product])
14-
inline def consoleFormat(fancy: Boolean): String = consoleFormat_(s, fancy)
15-
inline def consoleFormat: String = consoleFormat_(s, true)
16-
inline def ptbl: Unit = println(consoleFormat_(s, true))
13+
extension [C <: IterableOnce[Product]](s: C)
14+
inline def consoleFormat(fancy: Boolean): String = consoleFormat_(s.iterator.toSeq, fancy)
15+
inline def consoleFormat: String = consoleFormat_(s.iterator.toSeq, true)
16+
inline def ptbl: Unit = println(consoleFormat_(s.iterator.toSeq, true))
1717
end extension
1818

1919
private val colours: List[EscapeAttr] = List(
@@ -37,7 +37,7 @@ object ConsoleFormat:
3737
String.format(java.util.Locale.ROOT, "%.2f%%", a100)
3838
end extension
3939

40-
extension [K <: Tuple, V <: Tuple](nt: Seq[NamedTuple[K, V]])
40+
extension [K <: Tuple, V <: Tuple, C <: IterableOnce[NamedTuple[K, V]]](nt: C)
4141

4242
inline def consoleFormatNt: String =
4343
consoleFormatNt(None, true)
@@ -47,7 +47,7 @@ object ConsoleFormat:
4747

4848
inline def consoleFormatNt(headers: Option[List[String]] = None, fansi: Boolean = true): String =
4949
val foundHeaders = constValueTuple[K].toList.map(_.toString())
50-
val values = nt.map(_.toTuple)
50+
val values = nt.iterator.map(_.toTuple).toSeq
5151
ConsoleFormat.consoleFormat_(values, fansi, headers.getOrElse(foundHeaders))
5252
end consoleFormatNt
5353
end extension
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.github.quafadas.scautable
2+
3+
import munit.FunSuite
4+
5+
class ConsoleFormatFiniteCollectionSuite extends FunSuite:
6+
7+
test("ptbl should work with Array") {
8+
val arrayData = Array(("Alice", 25), ("Bob", 30))
9+
import io.github.quafadas.scautable.ConsoleFormat._
10+
11+
arrayData.ptbl
12+
val formatted = arrayData.consoleFormat
13+
assert(formatted.contains("Alice"))
14+
assert(formatted.contains("Bob"))
15+
}
16+
17+
test("ptbln should work with Array of NamedTuple") {
18+
val namedTupleArray = Array((name = "Alice", age = 25), (name = "Bob", age = 30))
19+
import io.github.quafadas.scautable.ConsoleFormat._
20+
21+
namedTupleArray.ptbln
22+
val formatted = namedTupleArray.consoleFormatNt
23+
assert(formatted.contains("Alice"))
24+
assert(formatted.contains("name"))
25+
}
26+
27+
test("existing Seq functionality still works") {
28+
val seqData = Seq(("Alice", 25), ("Bob", 30))
29+
val namedTupleSeq = Seq((name = "Alice", age = 25), (name = "Bob", age = 30))
30+
import io.github.quafadas.scautable.ConsoleFormat._
31+
32+
seqData.ptbl
33+
namedTupleSeq.ptbln
34+
35+
val formatted1 = seqData.consoleFormat
36+
val formatted2 = namedTupleSeq.consoleFormatNt
37+
assert(formatted1.contains("Alice"))
38+
assert(formatted2.contains("Alice"))
39+
}
40+
41+
end ConsoleFormatFiniteCollectionSuite

0 commit comments

Comments
 (0)