dbg()
is one of my favorite Elixir features: placing it somewhere in a pipe of function calls outputs all the intermediate results. It’s great for debugging parsing code. Like this:
meta_date =
document
|> Floki.find("meta[property='article:published_time']")
|> Floki.attribute("content")
|> List.first()
|> parse_date_text()
|> dbg()
Well, now I’m starting to use with
instead of |>
. Is it possible to get that dbg()
behavior? I haven’t figured it out. For example:
@spec parse_human_date_string(binary) :: nil | Date.t
def parse_human_date_string(text) when is_binary(text) do
with [_, raw_month, raw_day, year] <- Regex.run(~r/^(.+) (.+), (\d\d\d\d)$/, text),
day <- String.pad_leading(raw_day, 2, "0"),
month_num <- Integer.to_string(Enum.find_index(@months, &(&1 == raw_month)) + 1),
month <- String.pad_leading(month_num, 2, "0"),
{:ok, date} <- Date.from_iso8601("#{year}-#{month}-#{day}"),
dbg() do ### THIS IS WHAT I'D LIKE TO DO ###
date
else
_ -> nil
end
end
Then I’d get the results of each “line” of the with
.