Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions lib/open_feature.ex
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ defmodule OpenFeature do
@spec set_provider(domain :: Types.domain(), provider :: Provider.t()) :: {:ok, Provider.t()} | {:error, atom}
def set_provider(domain \\ "default", provider) do
with {:ok, provider} <- Provider.validate_provider(provider),
{:not_set, old_provider} <- check_if_already_set(domain, provider),
{:replace, old_provider} <- check_if_already_set(domain, provider),
context = get_global_context(),
{:ok, provider} <- Provider.initialize(domain, provider, context) do
Store.set_provider(domain, provider)
Expand Down Expand Up @@ -79,19 +79,19 @@ defmodule OpenFeature do
@spec shutdown() :: :ok
def shutdown, do: Enum.each(Store.list_providers(), &Provider.shutdown/1)

defp check_if_already_set(domain, %provider_module{} = provider) do
case Store.get_provider(domain) do
%^provider_module{} = domain_provider -> {:ok, domain_provider}
_provider -> {:not_set, provider}
defp check_if_already_set(domain, provider) do
domain_provider = Store.get_provider(domain)

if Provider.equal?(domain_provider, provider) do
{:ok, domain_provider}
else
{:replace, domain_provider}
end
end

defp maybe_shutdown_old_provider(%old_provider_module{} = old_provider) do
defp maybe_shutdown_old_provider(old_provider) do
Store.list_providers()
|> Enum.any?(fn
%^old_provider_module{} = _provider -> true
_provider -> false
end)
|> Enum.any?(&Provider.equal?(&1, old_provider))
|> then(fn
false -> Provider.shutdown(old_provider)
true -> :ok
Expand Down
8 changes: 2 additions & 6 deletions lib/open_feature/provider.ex
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,12 @@ defmodule OpenFeature.Provider do
end

@doc """
Checks if two providers are equal based on their name, domain, and state.
Checks if two providers are equal based on their module and name.
"""
@doc since: "0.1.0"
@doc deprecated: "This function will be removed in the next major version."
@spec equal?(t, t) :: boolean
def equal?(%module1{} = provider1, %module2{} = provider2) do
module1 == module2 &&
provider1.name == provider2.name &&
provider1.domain == provider2.domain &&
provider1.state == provider2.state
module1 == module2 && provider1.name == provider2.name
end

def equal?(_, _), do: false
Expand Down
2 changes: 1 addition & 1 deletion test/unit/open_feature/provider_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ defmodule OpenFeature.ProviderTest do
test "should return false if the provided providers are not equal" do
refute Provider.equal?(@no_op_provider, @in_memory_provider)

different_no_op = Map.put(@no_op_provider, :domain, "some_domain")
different_no_op = Map.put(@no_op_provider, :name, "some_name")
refute Provider.equal?(@no_op_provider, different_no_op)
end
end
Expand Down