Operand

_

gram: source

> ./lib/source.ex

# A generic module able to read change-logged sources;
# can be rendered as machine-compilable code,
# essay pages, or in numerous unique schemas.
defmodule Source do
@doc "
Read module configs.
"
def call(param), do: (
case Application.fetch_env(:source, param) do
{:ok, response} -> response
:error -> nil
end)
@doc "
[migration] Needs to move to `Source.Changes`.
"
def changes(base) do
log = Git.new(base.locus) |> Git.log([
"--format=format:%h (%ai) %aN: %s",
]) |> elem(1) |> String.trim |> String.split("\n")
# parse!
log |> Enum.map(fn ln ->
[hash, "("<>day, clock, zone, _composer | message ] = ln |> String.split(" ")
zone = zone |> String.replace(~r/\)$/, "")
# composer = composer |> String.replace(~r/:$/, "")
message = message |> Enum.join(" ")
## Oh no! Parens inside a changelog mess up labels.
# [message, labels] = if (message |> String.ends_with?(")")) do
# [ message | [labels] ] = message |> String.split("(")
# [message, labels |> String.trim_trailing(")") |> String.split(",") |> Enum.map(&String.trim/1) ]
# else [message, labels] end
labels = []
[ hash, day, clock, zone, labels, message ]
end)
end
@doc "
[migration] Needs to move to `Source.Changes`.
"
def changes_by_day(base) do
changes(base)
|> Enum.group_by(fn [_, day | _] -> day end)
|> Enum.sort(:desc)
end
end