These is what module attributes are for: Module — Elixir v1.20.2
I’ve never checked it, but this should work:
Module.register_attribute(__MODULE__, :rule_ids)
# Collect the rule ids at compile time
{_ast, rule_ids_} = File.read!(__ENV__.file)
|> Code.string_to_quoted()
|> Macro.traverse([],
fn
{:def, _, [{:condition, _, [rule_id, {:v, _, nil}, {:site, _, nil}]} | _]} = x, acc -> {x, [rule_id | acc]}
other, acc -> {other, acc}
end,
fn other, acc -> {other, acc} end
)
Module.put_attribute(__MODULE__, :rule_ids, rule_ids_)
# How could I use rule_ids_ here?
def rule_ids(), do: @rule_ids
def condition(rule_id, v, site)
def condition(1018, v, site) do
v[site][7018] < 50 && v[site][7019] < 50 && v[site][7020] < 50
end
def condition(1017, v, site) do
v[site][7027] > 42
end
# ...
end


















