diff --git a/farmbot_celery_script/lib/farmbot_celery_script/dot_props.ex b/farmbot_celery_script/lib/farmbot_celery_script/dot_props.ex index ecaa07e7..e927d307 100644 --- a/farmbot_celery_script/lib/farmbot_celery_script/dot_props.ex +++ b/farmbot_celery_script/lib/farmbot_celery_script/dot_props.ex @@ -1,13 +1,22 @@ defmodule FarmbotCeleryScript.DotProps do - def create(key, val) do - if String.contains?(key, ".") do - recurse(key, val, %{}) - else - %{key => val} - end - end + @dot "." + @doc ~S""" + Takes a "dotted" key and val. + Returns deeply nested hash. - def recurse(_key, _val, acc) do - acc + ## Examples + + iex> create("foo.bar.baz", 321) + %{"foo" => %{"bar" => %{"baz" => 321}}} + + iex> create("foo", "bar") + %{"foo" => "bar"} + """ + def create(dotted, val) do + [key | list] = dotted |> String.split(@dot) |> Enum.reverse() + + Enum.reduce(list, %{key => val}, fn next_key, acc -> + %{next_key => acc} + end) end end diff --git a/farmbot_celery_script/test/dot_props_test.exs b/farmbot_celery_script/test/dot_props_test.exs index 80da82c0..0ff67e43 100644 --- a/farmbot_celery_script/test/dot_props_test.exs +++ b/farmbot_celery_script/test/dot_props_test.exs @@ -1,8 +1,4 @@ defmodule FarmbotCeleryScript.DotPropsTest do use ExUnit.Case - alias FarmbotCeleryScript.DotProps - - test "converts dotted props to real nested maps" do - assert %{"foo" => "bar"} == DotProps.create("foo", "bar") - end + doctest FarmbotCeleryScript.DotProps, import: true end