|
|
@ -7,8 +7,28 @@ defmodule LinkShortener.Generators.LinkWithRandomShorten do
|
|
|
|
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
@doc """
|
|
|
|
Generate a Link with random shorten with the length.
|
|
|
|
Generate a Link with random shorten with the length.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Options
|
|
|
|
|
|
|
|
• :is_atom_based (boolean, true by default) - if a map is
|
|
|
|
|
|
|
|
atom-based, then a key for shorten will be :shorten, else
|
|
|
|
|
|
|
|
"shorten".
|
|
|
|
|
|
|
|
• :length (integer, 10 by default) - the length for
|
|
|
|
|
|
|
|
the shorten.
|
|
|
|
|
|
|
|
• :generator (function) - the shorten is generated by the
|
|
|
|
|
|
|
|
generator function.
|
|
|
|
|
|
|
|
LinkShortener.Generators.SafeString.generate/1 by default.
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
def generate_one(attrs, length \\ 10, generator \\ &SafeString.generate/1) do
|
|
|
|
@spec generate_one(map(), is_atom_based: boolean(), length: integer(), generator: function()) ::
|
|
|
|
Map.put(attrs, :shorten, generator.(length))
|
|
|
|
[map()]
|
|
|
|
|
|
|
|
def generate_one(attrs, opts \\ []) do
|
|
|
|
|
|
|
|
is_atom_based = Keyword.get(opts, :is_atom_based, true)
|
|
|
|
|
|
|
|
length = Keyword.get(opts, :length, 10)
|
|
|
|
|
|
|
|
generator = Keyword.get(opts, :generator, &SafeString.generate/1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if is_atom_based do
|
|
|
|
|
|
|
|
Map.put(attrs, :shorten, generator.(length))
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
Map.put(attrs, "shorten", generator.(length))
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|