Yex.Doc (y_ex v0.10.2)
View SourceDocument module.
Cross-Process Operations
When a Doc or SharedType operation is performed from a process different from the process that created the Doc,
a message like {Yex.Doc, :run, fun} is sent to the creator process via GenServer.call and the processing
is delegated to that process. If you encounter a GenServer.call timeout, this delegation mechanism may be the cause.
Make sure the worker process can handle the GenServer call messages properly.
It is recommended to start a GenServer process such as Yex.DocServer when executing operations from other processes.
Summary
Functions
Stop monitoring document updates.
Get or insert the array type.
Get or insert the map type.
Get or insert the text type.
Get or insert the xml fragment type.
Monitor document updates. You can pass metadata as an option. This value is passed as the fourth element of the message.If omitted, it will be passed as a structure of Doc itself.
Create a new document.
Executes the given block in the document's worker process. If the current process is already the worker process, executes directly. Otherwise, delegates execution to the worker process via GenServer.call.
Start a transaction.
Create a new document with options.
Types
Functions
Stop monitoring document updates.
@spec get_array(t(), String.t()) :: Yex.Array.t()
Get or insert the array type.
Get or insert the map type.
@spec get_text(t(), String.t()) :: Yex.Text.t()
Get or insert the text type.
Get or insert the xml fragment type.
Monitor document updates. You can pass metadata as an option. This value is passed as the fourth element of the message.If omitted, it will be passed as a structure of Doc itself.
Create a new document.
worker_pid: If there is a possibility of passing the created document to another process, please specify the process responsible for operating the document. This process needs to handle the GenServer handle_call messages as follows:
@impl true
def handle_call(
{Yex.Doc, :run, fun},
_from,
state
) do
{:reply, fun.(), state}
end
Executes the given block in the document's worker process. If the current process is already the worker process, executes directly. Otherwise, delegates execution to the worker process via GenServer.call.
Raises if worker_pid is not set.
Start a transaction.
Raises RuntimeError if a transaction is already in progress.
Examples
iex> doc = Doc.new()
iex> text = Doc.get_text(doc, "text")
iex> Yex.Doc.monitor_update(doc)
iex> Doc.transaction(doc, fn ->
iex> Text.insert(text, 0, "Hello")
iex> Text.insert(text, 0, "Hello", %{"bold" => true})
iex> end)
iex> assert_receive {:update_v1, _, nil, _}
iex> refute_receive {:update_v1, _, nil, _} # only one update message
@spec with_options(Yex.Doc.Options.t(), pid()) :: t()
Create a new document with options.