Created
December 17, 2024 20:26
-
-
Save jeroenbourgois/c384cd75d889d30a1e887f055440040c to your computer and use it in GitHub Desktop.
the_chain_gang
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Wat verkies je? Output is in beide een map %{} | |
# A, ketting, cleaner, iets meer code in submethods | |
def parse(rr_transform) do | |
rr_transform | |
|> new() | |
|> add_address() | |
|> add_names() | |
|> add_birthdate() | |
|> save() | |
end | |
def new(rr_transform), do: {rr_transform, %{}} | |
def add_address({rr_transform, output}) do | |
address = %{ | |
city: city(rr_transform) | |
} | |
{rr_transform, Map.put(data, :address, address)} | |
end | |
def add_names({rr_transform, data}) do | |
{rr_transform, Map.merge(data, name(rr_transform))} | |
end | |
def add_birthdate({rr_transform, data}) do | |
{rr_transform, Map.put(data, :birthdate, maybe_date(rr_transform, "100"))} | |
end | |
def save({_rr_transform, data}) do | |
data | |
end | |
def city(rr_transform) do | |
city = maybe_input(rr_transform, "001") | |
case String.split(city, "(") do | |
[city] -> city | |
[city, _] -> String.trim(city) | |
end | |
end | |
def name(rr_transform) do | |
name = maybe_input(rr_transform, "010") | |
if String.contains?(name, ",") do | |
[lastname, firstname] = String.split(name, ",") | |
%{firstname: String.trim(firstname), lastname: String.trim(lastname), name: name} | |
else | |
%{firstname: "", lastname: "", name: name} | |
end | |
end | |
# B, Map merge/put in `parse/1`, cleanere submethods | |
def parse(rr_transform) do | |
%{} | |
|> Map.put(:address, address(rr_transform)) | |
|> Map.put(:birthdate, birthdate(rr_transform)) | |
|> Map.merge(name(rr_transform)) | |
end | |
def address(rr_transform) do | |
street_nbr_box = maybe_input(rr_transform, "020") | |
%{ | |
city: city(rr_transform) | |
} | |
end | |
def name(rr_transform) do | |
name = maybe_input(rr_transform, "010") | |
if String.contains?(name, ",") do | |
[lastname, firstname] = String.split(name, ",") | |
%{firstname: String.trim(firstname), lastname: String.trim(lastname), name: name} | |
else | |
%{firstname: "", lastname: "", name: name} | |
end | |
end | |
def birthdate(rr_transform), do: maybe_date(rr_transform, "100") | |
def city(rr_transform) do | |
city = maybe_input(rr_transform, "001") | |
case String.split(city, "(") do | |
[city] -> city | |
[city, _] -> String.trim(city) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment