Update the generator to use options and support a string-based map.
This commit is contained in:
@@ -7,8 +7,28 @@ defmodule LinkShortener.Generators.LinkWithRandomShorten do
|
||||
|
||||
@doc """
|
||||
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
|
||||
Map.put(attrs, :shorten, generator.(length))
|
||||
@spec generate_one(map(), is_atom_based: boolean(), length: integer(), generator: function()) ::
|
||||
[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
|
||||
|
||||
@@ -10,9 +10,9 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
|
||||
|
||||
test "generate/1 returns random safe string with 10 as length" do
|
||||
assert %{
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} = LinkWithRandomShorten.generate_one(@attrs)
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} = LinkWithRandomShorten.generate_one(@attrs)
|
||||
|
||||
assert String.length(shorten) == 10
|
||||
end
|
||||
@@ -21,9 +21,13 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
|
||||
expected_length = 5
|
||||
|
||||
assert %{
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} = LinkWithRandomShorten.generate_one(@attrs, expected_length)
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} =
|
||||
LinkWithRandomShorten.generate_one(@attrs,
|
||||
is_atom_based: true,
|
||||
length: expected_length
|
||||
)
|
||||
|
||||
assert String.length(shorten) == expected_length
|
||||
end
|
||||
@@ -34,9 +38,15 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
|
||||
expected_length = expected_shorten |> String.length()
|
||||
|
||||
assert %{
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} = LinkWithRandomShorten.generate_one(@attrs, expected_length, random_generator)
|
||||
name: @name,
|
||||
shorten: shorten
|
||||
} =
|
||||
LinkWithRandomShorten.generate_one(
|
||||
@attrs,
|
||||
is_atom_based: true,
|
||||
length: expected_length,
|
||||
generator: random_generator
|
||||
)
|
||||
|
||||
assert String.length(shorten) == expected_length
|
||||
assert shorten == expected_shorten
|
||||
|
||||
Reference in New Issue
Block a user