lib/description_plaintext_unlimited.ex

defmodule Fields.DescriptionPlaintextUnlimited do
  @moduledoc """
  An Ecto Type for plaintext description fields with no length restrictions.
  Strips out all HTML tags to avoid XSS.

  ## Example

      schema "article" do
        field(:description, Fields.DescriptionPlaintextUnlimited)
      end
  """
  use Ecto.Type

  def type, do: :string

  def cast(value) do
    {:ok, to_string(value)}
  end

  def dump(value) do
    {:ok, HtmlSanitizeEx.strip_tags(value)}
  end

  def load(value) do
    {:ok, value}
  end

  def input_type, do: :textarea

  def embed_as(_), do: :self

  def equal?(term1, term2), do: term1 == term2
end