Packages
Types and tools for working with Gutenberg.
Current section
Files
Jump to
Current section
Files
lib/nldoc/gutenberg/block.ex
defmodule NLdoc.Gutenberg.Block do
@moduledoc """
Type definition of Gutenberg block
"""
use TypedEctoSchema
import Ecto.Changeset
@primary_key false
typed_embedded_schema null: false do
field(:block_name, :string)
field(:attrs, :map, default: %{})
embeds_many(:inner_blocks, __MODULE__, on_replace: :delete)
field(:inner_html, :string)
end
@doc """
Create new Gutenberg block based on map.
"""
@spec new(map()) :: {:ok, __MODULE__.t()} | {:error, Ecto.Changeset.t()}
def new(template) when is_map(template) do
changeset = changeset(%__MODULE__{}, template)
if changeset.valid? do
document = Ecto.Changeset.apply_changes(changeset)
{:ok, document}
else
{:error, changeset}
end
end
@doc """
Changeset for Gutenberg block
"""
def changeset(block, attrs) do
block
|> cast(attrs, [:block_name, :attrs, :inner_html])
|> cast_embed(:inner_blocks)
end
end