Current section
Files
Jump to
Current section
Files
lib/jacob/signature/argument.ex
defmodule Jacob.Signature.Argument do
import String, only: [trim: 1]
alias Jacob.Errors.Signature.MalformedArgument
@argument_regex ~r/^\s*([a-z0-9-]+)\s*(#\s*(.*))?\s*$/
@moduledoc false
defstruct [:name, :desc]
@doc "Create a new argument from the given raw argument definition"
def new(raw_argument) do
raw_argument
|> validate_argument!()
|> create_argument()
end
defp validate_argument!(raw_argument) do
if Regex.match?(@argument_regex, raw_argument) do
raw_argument
else
raise MalformedArgument, raw_argument: raw_argument
end
end
def create_argument(definition) when is_binary(definition) do
case String.split(definition, "#", parts: 2) do
[name, desc] -> %__MODULE__{name: trim(name), desc: trim(desc)}
[name] -> %__MODULE__{name: trim(name)}
end
end
end