lib/phoenix/live_editable/helpers.ex

defmodule Phoenix.LiveEditable.Helpers do

  def ple(assigns) when is_map(assigns) do
    id = assigns[:id]
    module = assigns[:ple_handler] || Phoenix.LiveEditable.Handler.Default
    assigns = assigns |> Map.delete(:__changed__)

    if module == nil or not is_atom(module) do
      raise ArgumentError,
            ".ple expects module={...} to be given and to be an atom, " <>
              "got: #{inspect(module)}"
    end

    if id == nil do
      raise ArgumentError, ".ple expects id={...} to be given, got: nil"
    end

    case module.__live__() do
      %{kind: :component} ->
        %Phoenix.LiveView.Component{id: id, assigns: assigns, component: module}

      %{kind: kind} ->
        raise ArgumentError, "expected #{inspect(module)} to be a component, but it is a #{kind}"
    end

  end

  def live_editable(assigns) do
    ple(assigns)
  end

end