Finish FarmbotCeleryScript.DotProps. TODO: Add `meta.*` attr support to `update_resource` RPC.
parent
e2696cd93b
commit
3b66b164a7
|
@ -1,13 +1,22 @@
|
||||||
defmodule FarmbotCeleryScript.DotProps do
|
defmodule FarmbotCeleryScript.DotProps do
|
||||||
def create(key, val) do
|
@dot "."
|
||||||
if String.contains?(key, ".") do
|
@doc ~S"""
|
||||||
recurse(key, val, %{})
|
Takes a "dotted" key and val.
|
||||||
else
|
Returns deeply nested hash.
|
||||||
%{key => val}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def recurse(_key, _val, acc) do
|
## Examples
|
||||||
acc
|
|
||||||
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
defmodule FarmbotCeleryScript.DotPropsTest do
|
defmodule FarmbotCeleryScript.DotPropsTest do
|
||||||
use ExUnit.Case
|
use ExUnit.Case
|
||||||
alias FarmbotCeleryScript.DotProps
|
doctest FarmbotCeleryScript.DotProps, import: true
|
||||||
|
|
||||||
test "converts dotted props to real nested maps" do
|
|
||||||
assert %{"foo" => "bar"} == DotProps.create("foo", "bar")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue