Current section
Files
Jump to
Current section
Files
lib/preset/cloud_compatibility_checker.ex
defmodule CKEditor5.Preset.CloudCompatibilityChecker do
@moduledoc """
Enforces business rules and compatibility constraints for CKEditor5 presets.
Specifically handles Cloud Distribution Channel licensing requirements and configuration validation.
"""
import CKEditor5.License.Assertions, only: [compatible_cloud_distribution?: 1]
import CKEditor5.Preset, only: [configured_cloud?: 1]
alias CKEditor5.{Cloud, Errors, Preset}
@doc """
Checks if the preset's Cloud configuration is valid based on the license type.
"""
def assign_default_cloud_config(%Preset{cloud: _cloud, license: license} = preset) do
cond do
compatible_cloud_distribution?(license) and !configured_cloud?(preset) ->
{:ok, %{preset | cloud: %Cloud{}}}
!compatible_cloud_distribution?(license) and configured_cloud?(preset) ->
{:error, %Errors.CloudCannotBeUsedWithLicenseKey{preset: preset, license: license}}
true ->
{:ok, preset}
end
end
@doc """
Ensures that a preset has Cloud configuration when required.
"""
def ensure_cloud_configured!(%Preset{} = preset) do
cond do
!compatible_cloud_distribution?(preset.license) ->
raise Errors.CloudCannotBeUsedWithLicenseKey, preset: preset, license: preset.license
!configured_cloud?(preset) ->
raise Errors.CloudNotConfigured, preset: preset
true ->
:ok
end
end
end