Introduce Pleroma.Config.url/0 to bypass compile-time deps on Endpoint

This commit is contained in:
Alex Gleason 2021-06-08 14:04:46 -05:00
parent bed10ab2c7
commit d369142a8e
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
3 changed files with 45 additions and 2 deletions

View file

@ -103,4 +103,25 @@ defmodule Pleroma.Config do
def feature_enabled?(feature_name) do
get([:features, feature_name]) not in [nil, false, :disabled, :auto]
end
@doc """
Get the URI directly from application config, bypassing the Endpoint module.
"""
def uri do
# `Pleroma.Web.Endpoint` is only being used as a key here (for equality check),
# so it's okay to use `Module.concat/1` to have the compiler ignore it.
endpoint_key = Module.concat(["Pleroma.Web.Endpoint"])
url =
get([endpoint_key, :url])
|> Map.new()
struct(URI, url)
end
@doc """
Similar to `Pleroma.Web.Endpoint.url/0`.
May be used where needed to avoid a compile-time dep on Endpoint.
"""
def url, do: URI.to_string(uri())
end

View file

@ -6,7 +6,7 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContextID do
use Ecto.Type
alias Ecto.UUID
alias Pleroma.Web.Endpoint
alias Pleroma.Config
def type, do: :string
@ -19,6 +19,6 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContextID do
def load(data), do: {:ok, data}
def autogenerate do
"#{Endpoint.url()}/contexts/#{UUID.generate()}"
"#{Config.url()}/contexts/#{UUID.generate()}"
end
end

View file

@ -136,4 +136,26 @@ defmodule Pleroma.ConfigTest do
Pleroma.Config.delete([:lorem])
Pleroma.Config.delete([:ipsum])
end
describe "URI functions" do
setup do
url = [host: "lain.com", scheme: "https", port: 443]
clear_config([Pleroma.Web.Endpoint, :url], url)
end
test "uri/0" do
expected = %URI{
scheme: "https",
host: "lain.com",
port: 443
}
assert Pleroma.Config.uri() == expected
end
test "url/0" do
expected = "https://lain.com"
assert Pleroma.Config.url() == expected
end
end
end