From 74136c7fa747225364bc1b8b92a3064678e86532 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Thu, 5 Sep 2024 12:10:27 +0300 Subject: [PATCH] Update the Links.create_one to support options for the generator. --- lib/link_shortener/links/links.ex | 24 ++++++++++++++++++++++-- test/link_shortener/links_test.exs | 2 +- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/link_shortener/links/links.ex b/lib/link_shortener/links/links.ex index 7a7a48c..2af21e5 100644 --- a/lib/link_shortener/links/links.ex +++ b/lib/link_shortener/links/links.ex @@ -9,8 +9,28 @@ defmodule LinkShortener.Links do def new_one(), do: Link.changeset(%Link{}, %{}) - def create_one(attrs, length \\ 10, generator \\ &LinkGenerator.generate_one/2) do - generator.(attrs, length) + @doc """ + Create 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.LinkWithRandomShorten.generate_one/2 by + default. + """ + @spec create_one(map(), [is_atom_based: boolean(), length: integer(), generator: function()]) :: + [map()] + def create_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, &LinkGenerator.generate_one/2) + + generator.(attrs, is_atom_based: is_atom_based, length: length) |> insert_one() end diff --git a/test/link_shortener/links_test.exs b/test/link_shortener/links_test.exs index 3fefac2..7b73dc8 100644 --- a/test/link_shortener/links_test.exs +++ b/test/link_shortener/links_test.exs @@ -50,7 +50,7 @@ defmodule LinkShortener.LinksTest do test "create_one/2 with valid data creates a link", %{user: user} do assert {:ok, %Link{} = link} = with_user(@create_generated_attrs, user) - |> Links.create_one(5) + |> Links.create_one(length: 5) assert link.name == "some link name" assert link.url == "https://gitlab.com/KKlochko/link_shortener"