Packages
unleash_fresha
1.14.1-git-e754
5.1.4
5.1.3
5.1.2
5.1.1
5.1.0
5.0.0
4.0.0
4.0.0-git-bda3
3.0.1
3.0.0
2.1.0
2.0.1
2.0.0-git-75d8
2.0.0-git-67b2
2.0.0-git-4b61
2.0.0-git-49f4
1.16.0
1.15.0
1.14.1-git-e754
1.14.0
1.14.0-git-71e9
1.13.0
1.13.0-git-4ba6
1.12.0
1.11.0
1.11.0-git-1b62
1.10.2
1.10.2-git-b835
1.10.1
1.10.0
1.9.3-alpha0
1.9.2
1.9.1
1.9.0
An Unleash Feature Flag client for Elixir, forked from [unleash](https://gitlab.com/afontaine/unleash_ex)
Current section
Files
Jump to
Current section
Files
lib/unleash/features.ex
defmodule Unleash.Features do
@moduledoc false
alias Unleash.Feature
@derive Jason.Encoder
defstruct version: "1", features: []
def from_map!(%{"version" => version, "features" => features}) do
%__MODULE__{
version: version,
features: Enum.map(features, &Feature.from_map/1)
}
end
def from_map!(_) do
raise ArgumentError, "failed to construct state"
end
def from_map(%{"version" => version, "features" => features}) do
{:ok,
%__MODULE__{
version: version,
features: Enum.map(features, &Feature.from_map/1)
}}
end
def from_map(_), do: {:error, "failed to construct state"}
def get_feature(nil, _feat), do: nil
def get_feature(%__MODULE__{features: nil}, _feature), do: nil
def get_feature(%__MODULE__{}, nil), do: nil
def get_feature(%__MODULE__{features: features} = state, feat) when is_list(features) and is_atom(feat),
do: get_feature(state, Atom.to_string(feat))
def get_feature(%__MODULE__{features: features}, feat) when is_list(features) and is_binary(feat) do
Enum.find(features, fn feature -> compare(feature.name, feat) end)
end
def get_all_feature_names(nil), do: []
def get_all_feature_names(%__MODULE__{features: nil}), do: []
def get_all_feature_names(%__MODULE__{features: features}) do
Enum.map(features, fn %Feature{name: name} ->
name
end)
end
defp compare(n1, n2), do: String.downcase(n1) == String.downcase(n2)
end