Current section
Files
Jump to
Current section
Files
lib/formula/actions/get_fields.ex
defmodule Formula.Actions.GetFields do
@moduledoc """
Return the fields given a formula
"""
alias Formula.Function
alias Formula.Symbol
@spec call(String.t()) :: list(String.t())
def call(formula) do
case Formula.parse_formula(formula) do
%Function{arguments: arguments} ->
arguments
|> Enum.map(&get_arguments/1)
|> List.flatten()
|> Enum.reject(&is_nil/1)
|> Enum.uniq()
{:error, error} ->
{:error, error}
end
end
defp get_arguments(%Decimal{}), do: nil
defp get_arguments(%Symbol{name: name}), do: name
defp get_arguments(%Function{arguments: arguments}),
do: Enum.map(arguments, &get_arguments/1)
end