defmodule Xmeta.Xapi.Phx do def call_api(conn, params) do site = module_name_upcase(params["xapi_site"]) router = module_name_upcase(params["xapi_router"]) view = module_name_upcase(params["xapi_view"]) mod = Module.concat(["Xapi", site, router, view]) apply(mod, :call, [conn, format_params(conn.params)]) end defp format_params(params) do params |> Map.delete("glob") |>Map.delete("xapi_site") |>Map.delete("xapi_router") |>Map.delete("xapi_view") end defp module_name_upcase(name) do {first,last} = String.next_grapheme(name) String.upcase(first) <> last end end