lib/unleash/strategy/active_for_users_with_id.ex

defmodule Unleash.Strategy.ActiveForUsersWithId do
  @moduledoc """
  Requires `:user_id` in `t:Unleash.context/0`

  Based on the
  [`userWithId`](https://unleash.github.io/docs/activation_strategy#userwithid)
  strategy.
  """

  use Unleash.Strategy, name: "ActiveForUsersWithId"
  alias Unleash.Strategy.Utils

  @impl Strategy
  @doc false
  def enabled?(%{"userIds" => list}, %{user_id: user_id})
      when is_binary(list) and is_binary(user_id) do
    {Utils.in_list?(list, user_id), %{user_id_list: list, user_id: user_id}}
  end

  @impl Strategy
  @doc false
  def enabled?(%{"userIds" => list}, %{user_id: user_id})
      when is_binary(list) and is_integer(user_id) do
    {Utils.in_list?(list, user_id, &Utils.parse_int/1), %{user_id_list: list, user_id: user_id}}
  end

  @impl Strategy
  @doc false
  def enabled?(_params, _context), do: false
end