defmodule GrowthBook.Filter do
@moduledoc """
Object used for mutual exclusion and filtering users out of experiments based on random hashes. Has the following properties:
"""
alias GrowthBook.BucketRange
@typedoc """
Filter
A **Filter** has the follwing properties:
- **`seed`** (`t:String.t/0`) - Teh sedd used in the hash
- **`ranges`** (list of `t:GrowthBook.BucketRange.t/0`) - List of ranges that are included
- **`hash_version`** (`t:integer/0`) - The hash version to use (default to 2)
- **`attribute`** (`t:String.t/0`) - The attribute to use (default to "id")
"""
@type t() :: %__MODULE__{
seed: String.t(),
ranges: [BucketRange.t()],
hash_version: integer(),
attribute: String.t()
}
defstruct [
:seed,
:ranges,
hash_version: 2,
attribute: "id"
]
def from_json(map) when is_map(map) do
%__MODULE__{
seed: map["seed"] || "",
ranges: Enum.map(map["ranges"] || [], &BucketRange.from_json/1),
hash_version: map["hashVersion"] || 2,
attribute: map["attribute"] || "id"
}
end
end