Current section
Files
Jump to
Current section
Files
lib/friendlyid.ex
defmodule FriendlyID do
@moduledoc """
Documentation for `FriendlyID`.
"""
@predicates Path.join(:code.priv_dir(:friendlyid), "predicates.txt") |> File.read!() |> String.split("\n", trim: true)
@objects Path.join(:code.priv_dir(:friendlyid), "objects.txt") |> File.read!() |> String.split("\n", trim: true)
@doc """
Generates a friendly ID of a given length.
Takes an optional options:
{
:transform: true
:separator: ""
}
## Examples
iex> :rand.seed(:exsplus, {101, 102, 103})
iex> FriendlyID.generate(2)
"SugaredYear"
iex> FriendlyID.generate(3, separator: "-")
"Mountainous-Quintessential-Wealth"
iex> FriendlyID.generate(3, separator: "-", transform: &:string.uppercase/1)
"GLEAMING-FAINT-PHILOSOPHY"
"""
@spec generate(pos_integer, keyword) :: binary
def generate(size, options \\ []) when is_integer(size) and size > 0 do
default = [transform: &:string.titlecase/1, separator: ""]
options = Keyword.merge(default, options)
Enum.take_random(@predicates, size-1) ++ Enum.take_random(@objects, 1)
|> Enum.map(options[:transform])
|> Enum.join(options[:separator])
end
end