An Elixir library that implements prototype inheritance for dynamic function calling over a chain of modules. These prototypes can be user-defined struct modules or any other modules.
To specify a module's prototype module, implement the __prototype__/0 function like so:
defmodule YourModule do def __prototype__, do: AnyOtherModule end
Then to call functions wherever they are found up the prototype chain you might:
case Prototype.apply(YourModule, :function_name, ["argument", "list"]) do {:ok, return_value, _meta} -> return_value, {:missing_fun, _function_name, _args, _meta} -> {:error, "function not found"} end
Where _meta contains tracing metadata about the call chain that executed.
As you might suspect, if the function cannot be found in any of the modules
then the result is a :missing_fun tuple because it's not very fun to have
multiple attempts to call a function fail!
This package can be installed by adding prototype to
your list of dependencies in mix.exs:
def deps do [ {:prototype, "~> 1.0.0-alpha"} ] end
If you use this library and have suggestions for how to make it better, please file an issue.