Packages
moar
1.20.0
5.0.0
4.3.0
4.2.0
4.1.0
4.0.0
3.2.0
3.1.0
3.0.0
2.7.0
2.6.0
2.5.0
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.1
2.0.0
1.64.0
1.63.1
1.63.0
1.62.0
1.61.2
1.61.1
1.61.0
1.60.0
1.59.2
1.59.1
1.59.0
1.58.0
1.57.0
1.56.2
1.56.1
1.56.0
1.55.0
1.54.0
1.53.0
1.52.1
1.52.0
1.51.0
1.50.0
1.49.0
1.48.0
1.47.0
1.46.0
1.45.1
1.45.0
1.44.0
1.43.0
1.42.0
1.41.0
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.0
1.30.0
1.29.0
1.28.0
1.27.0
1.26.0
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.3
1.19.2
1.19.1
1.19.0
1.18.1
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.0
A dependency-free utility library containing 100+ useful functions.
Current section
Files
Jump to
Current section
Files
lib/random.ex
defmodule Moar.Random do
# @related [test](/test/random_test.exs)
@moduledoc "Generates random data."
@type encoding() :: :base32 | :base64
@doc "Returns a random integer between `0` and `max`."
@spec integer(max :: pos_integer()) :: pos_integer()
def integer(max \\ 1_000_000_000),
do: 0..max |> Enum.random()
@doc """
Returns a base64- or base32-encoded random string of 32 characters.
See `Moar.Random.string/2`.
"""
@spec string(encoding :: encoding()) :: binary()
def string(:base32), do: string(32, :base32)
def string(:base64), do: string(32, :base64)
@doc """
Returns a base64- or base32-encoded random string of given length.
```elixir
iex> Moar.Random.string()
"Sr/y4m/YiVSJcIgI5lG+76vMfaZ7KZ7c"
iex> Moar.Random.string(5)
"9pJrK"
iex> Moar.Random.string(5, :base32)
"AC53Z"
```
"""
@spec string(character_count :: pos_integer(), encoding :: encoding()) :: binary()
def string(character_count \\ 32, encoding \\ :base64) when is_number(32) and encoding in [:base32, :base64] do
character_count
|> :crypto.strong_rand_bytes()
|> encode(encoding)
|> binary_part(0, character_count)
end
# # #
defp encode(bytes, :base32), do: Base.encode32(bytes, padding: false)
defp encode(bytes, :base64), do: Base.encode64(bytes, padding: false)
end