Current section
Files
Jump to
Current section
Files
lib/types/release.ex
defmodule Overseer.Release do
@moduledoc """
Definition of the release struct
"""
alias Overseer.{Release, Utils}
alias GenExecutor.Ocb
@release_types [:module, :release]
@type release_type :: :module | :release
@type pairing_mfa :: {module, (Ocb -> any)}
@type t :: %__MODULE__{
type: release_type,
url: String.t(),
do_pair: pairing_mfa
}
defstruct type: :release,
url: nil,
do_pair: nil
def create({type, url}), do: create({type, url, nil})
def create({type, url, do_pair}) do
Utils.assert(type in @release_types, true, "Unsupported release type #{type}")
Utils.assert(ExLoader.valid_file?(url), true, "Release file #{url} cannot be loaded")
mfa =
case do_pair do
nil -> nil
m when is_atom(m) -> {m, :pair}
{m, f} -> {m, f}
_ -> raise ArgumentError, "do_pair is not a correct MFA: #{inspect(do_pair)}"
end
%Release{
type: type,
url: url,
do_pair: mfa
}
end
def create(args),
do: raise(ArgumentError, "args passed to Release.create is invalid: #{inspect(args)}")
end