Current section
Files
Jump to
Current section
Files
lib/edtf/humanize.ex
defmodule EDTF.Humanize do
@moduledoc """
Convert EDTF dates to human readable form
"""
alias EDTF.Humanize
def humanize({:ok, value}), do: humanize(value)
def humanize({:error, _} = arg), do: arg
def humanize(nil), do: "Unknown"
def humanize(%EDTF.Interval{start: start_date, end: end_date}) do
case [start_date, end_date] do
[value, %EDTF.Infinity{}] -> "from #{humanize(value)}"
[%EDTF.Infinity{}, value] -> "before #{humanize(value)}"
values -> values |> Enum.map_join(" to ", &humanize/1)
end
end
def humanize(%EDTF.Date{type: :season} = input), do: Humanize.Date.humanize(input)
def humanize(%EDTF.Date{type: :year} = input), do: Humanize.Date.humanize(input)
def humanize(%EDTF.Date{type: :decade} = input), do: Humanize.Date.humanize(input)
def humanize(%EDTF.Date{type: :century} = input), do: Humanize.Date.humanize(input)
def humanize(%EDTF.Aggregate{} = input), do: Humanize.Aggregate.humanize(input)
def humanize(%EDTF.Continuation{} = input), do: Humanize.Aggregate.humanize(input)
def humanize(%EDTF.Date{} = input), do: Humanize.Date.humanize(input)
end