From d9aebaec1c307d046709d09e0d13afd9bc242175 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Wed, 3 Apr 2024 07:28:19 -0400 Subject: [PATCH] improvement: add `skip_unknown_inputs` for generic actions --- lib/ash/action_input.ex | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/ash/action_input.ex b/lib/ash/action_input.ex index a15b7aae..6e96c7f0 100644 --- a/lib/ash/action_input.ex +++ b/lib/ash/action_input.ex @@ -67,7 +67,7 @@ defmodule Ash.ActionInput do {input, _opts} = Ash.Actions.Helpers.set_context_and_get_opts(input.domain, input, opts) input - |> cast_params(params) + |> cast_params(params, opts) |> require_arguments() end @@ -177,12 +177,14 @@ defmodule Ash.ActionInput do %{input | context: Ash.Helpers.deep_merge_maps(input.context, map)} end - defp cast_params(input, params) do + defp cast_params(input, params, opts) do input = %{ input | params: Map.merge(input.params, Enum.into(params, %{})) } + skip_unknown_inputs = opts[:skip_unknown_inputs] || [] + Enum.reduce(params, input, fn {name, value}, input -> cond do has_argument?(input.action, name) -> @@ -191,6 +193,9 @@ defmodule Ash.ActionInput do match?("_" <> _, name) -> input + name in skip_unknown_inputs -> + input + true -> error = Ash.Error.Invalid.NoSuchInput.exception(