PG
defp get_free_name(list, name), do: get_free_name(list, name, 2, name)
defp get_free_name(list, name, num, base_name) do
unless Enum.member?(list, name) do
name
else
get_free_name(list, "#{base_name} #{num}", num + 1, base_name)
end
end
Size: a a a
PG
defp get_free_name(list, name), do: get_free_name(list, name, 2, name)
defp get_free_name(list, name, num, base_name) do
unless Enum.member?(list, name) do
name
else
get_free_name(list, "#{base_name} #{num}", num + 1, base_name)
end
end
NM
NM
def get_project_name(list_names, name), do: get_project_name(list_names, name, name, 2)
def get_project_name(list_names, name, generated_name, idx) do
cond do
name not in list_names -> name
generated_name not in list_names -> generated_name
true -> get_project_name(list_names, name, "#{name} #{idx}", idx + 1)
end
end
ŹR
defmodule Foo do
defp construct_widget_name(widget, project) do
project
|> list_project_widgets_for_project()
|> Stream.map(& &1.name)
|> get_free_name(widget.name)
end
@spec get_free_name(
project_widgets_enum :: Enumerable.t(),
widget_base_name :: String.t(),
widget_number_to_try :: non_neg_integer()
) :: first_awailable_name :: String.t()
defp get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try \\ 0) do
name_on_current_iteration =
case widget_number_to_try do
0 -> "#{widget_name}"
ordinal_number -> "#{widget_name} #{widget_number_to_try}"
end
case Enum.member?(project_widgets_enum, name_on_current_iteration) do
true -> get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try + 1)
false -> name_on_current_iteration
end
end
end
ŹR
ŹR
jc
project
|> list_project_widgets_for_project()
jc
jc
AD
defmodule Foo do
defp construct_widget_name(widget, project) do
project
|> list_project_widgets_for_project()
|> Stream.map(& &1.name)
|> get_free_name(widget.name)
end
@spec get_free_name(
project_widgets_enum :: Enumerable.t(),
widget_base_name :: String.t(),
widget_number_to_try :: non_neg_integer()
) :: first_awailable_name :: String.t()
defp get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try \\ 0) do
name_on_current_iteration =
case widget_number_to_try do
0 -> "#{widget_name}"
ordinal_number -> "#{widget_name} #{widget_number_to_try}"
end
case Enum.member?(project_widgets_enum, name_on_current_iteration) do
true -> get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try + 1)
false -> name_on_current_iteration
end
end
end
NM
ŹR
AD
ŹR
AD
jc
jc
ŹR
ŹR
ŹR