Skip to content

Instantly share code, notes, and snippets.

@jeroenbourgois
Created December 17, 2024 20:26
Show Gist options
  • Save jeroenbourgois/c384cd75d889d30a1e887f055440040c to your computer and use it in GitHub Desktop.
Save jeroenbourgois/c384cd75d889d30a1e887f055440040c to your computer and use it in GitHub Desktop.
the_chain_gang
# 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