defmodule TMap do require Logger @moduledoc """ Documentation for Tmap. """ @doc """ apply_rules. ## Examples """ @spec apply_rules(map, list, boolean) :: map def apply_rules(map, rules, logging \\ false) do tmp_map = List.foldl(rules, map, fn cmd, acc -> if Map.has_key?(cmd, "action") do action = cmd["action"] <> "Plugin" {new_acc, _} = Code.eval_string( action <> ".run(acc, options)", [acc: acc, options: Map.delete(cmd, cmd["action"])], __ENV__) new_acc else Logger.error("Wrong rule: missing 'action' key in '" <> inspect(cmd) <> "'") acc end end) if logging do tmp_map else Map.delete(tmp_map, "_log") end end end