You've already forked tribes-plugin-new
8fa8b5c10a
Generate canonical plugin ids, slugs, display names, vendor-prefixed OTP apps, and fully-qualified capability ids in new plugin projects.
50 lines
1.3 KiB
Elixir
50 lines
1.3 KiB
Elixir
defmodule TribesPlugin.Options do
|
|
@moduledoc false
|
|
|
|
@capability_regex ~r/\A[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+@[1-9][0-9]*\z/
|
|
|
|
def parse_capabilities(value) when value in [nil, ""], do: []
|
|
|
|
def parse_capabilities(value) when is_binary(value) do
|
|
value
|
|
|> String.split(",", trim: true)
|
|
|> Enum.map(&String.trim/1)
|
|
|> Enum.reject(&(&1 == ""))
|
|
|> Enum.map(&validate_capability!/1)
|
|
end
|
|
|
|
def parse_capabilities(values) when is_list(values) do
|
|
values
|
|
|> Enum.flat_map(&parse_capabilities/1)
|
|
|> Enum.uniq()
|
|
end
|
|
|
|
def with_default_requires(opts) do
|
|
live_view? = Keyword.get(opts, :live_view?, true)
|
|
|
|
requires =
|
|
opts
|
|
|> Keyword.get(:requires, [])
|
|
|> parse_capabilities()
|
|
|> maybe_ensure_ui(live_view?)
|
|
|
|
Keyword.put(opts, :requires, requires)
|
|
end
|
|
|
|
defp maybe_ensure_ui(requires, true), do: ensure_capability(requires, "org.tribe-one.caps.ui@1")
|
|
defp maybe_ensure_ui(requires, false), do: requires
|
|
|
|
defp ensure_capability(caps, cap) do
|
|
if cap in caps, do: caps, else: caps ++ [cap]
|
|
end
|
|
|
|
defp validate_capability!(value) do
|
|
if Regex.match?(@capability_regex, value) do
|
|
value
|
|
else
|
|
raise ArgumentError,
|
|
"capability must be fully-qualified name@version, got: #{inspect(value)}"
|
|
end
|
|
end
|
|
end
|