Current section
Files
Jump to
Current section
Files
lib/pathex/builder/setters/simple_setter.ex
defmodule Pathex.Builder.SimpleSetter do
@moduledoc """
Setter which simply sets new value in given path
"""
import Pathex.Builder.Setter
@behaviour Pathex.Builder.Setter
@first_arg {:first_arg, [], Elixir}
@initial {:value_to_set, [], Elixir}
def build(combination) do
combination
|> Enum.reverse()
|> Enum.reduce(initial(), &reduce_into/2)
|> wrap_to_code(@first_arg, @initial)
end
defp reduce_into(path_items, acc) do
setters = Enum.flat_map(path_items, & create_setter(&1, acc))
{:case, [], [[do: setters ++ fallback()]]}
end
defp initial do
quote do
(fn _ -> unquote(@initial) end).()
end
end
end