From 2f3559148082af53e5a049c33aa65fded9eb8131 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Thu, 26 Sep 2024 12:59:21 -0500 Subject: [PATCH] patch from_dicts --- CHANGELOG.md | 3 +++ gleam.toml | 2 +- src/gsv.gleam | 9 +++++---- test/gsv_test.gleam | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 922fd4b..65f5b6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +## v2.0.1 - 26 September 2024 +- Patch to consider all headers in from_dicts. + ## v2.0.0 - 24 September 2024 - Now there are four public functions, `to_lists`, `to_dicts`, `from_lists` and `from_dicts`. diff --git a/gleam.toml b/gleam.toml index db96d1a..7f3d010 100644 --- a/gleam.toml +++ b/gleam.toml @@ -1,5 +1,5 @@ name = "gsv" -version = "2.0.0" +version = "2.0.1" gleam = ">= 0.32.0" description = "A simple csv parser and generator written in gleam " diff --git a/src/gsv.gleam b/src/gsv.gleam index 569caa5..0a3fb32 100644 --- a/src/gsv.gleam +++ b/src/gsv.gleam @@ -124,11 +124,12 @@ pub fn from_dicts( ) -> String { case input { [] -> "" - [first_row, ..] -> { + _ -> { let headers = - first_row - |> dict.to_list - |> list.map(pair.first) + input + |> list.map(dict.keys) + |> list.flatten + |> list.unique |> list.sort(string.compare) let rows = diff --git a/test/gsv_test.gleam b/test/gsv_test.gleam index ec579a4..693a089 100644 --- a/test/gsv_test.gleam +++ b/test/gsv_test.gleam @@ -219,3 +219,18 @@ pub fn dicts_with_empty_values_test() { dict.from_list([#("age", "27"), #("name", "Austin")]), ]) } + +pub fn dicts_with_missing_values_test() { + let data = [ + dict.from_list([#("name", "Lucy"), #("score", "100"), #("colour", "Pink")]), + dict.from_list([ + #("name", "Isaac"), + #("youtube", "@IsaacHarrisHolt"), + #("score", "99"), + ]), + ] + gsv.from_dicts(data, ",", gsv.Unix) + |> should.equal( + "colour,name,score,youtube\nPink,Lucy,100\nIsaac,99,@IsaacHarrisHolt", + ) +}