Embedded Resource default value causes compilation error
I have a fairly simple embedded resource:
and a simple validation:
defmodule App.Organizations.OrganizationSettings do
@moduledoc false
use Ash.Resource,
data_layer: :embedded
alias __MODULE__.Validations
actions do
defaults [:read, :create, :update]
default_accept [:vat_exempt?, :timezone]
end
validations do
validate Validations.ValidateTimezone
end
attributes do
uuid_primary_key :id
attribute :vat_exempt?, :boolean, default: false, source: :has_vat_exempt, allow_nil?: false
attribute :timezone, :string, default: "Europe/Berlin", allow_nil?: false
timestamps()
end
enddefmodule App.Organizations.OrganizationSettings do
@moduledoc false
use Ash.Resource,
data_layer: :embedded
alias __MODULE__.Validations
actions do
defaults [:read, :create, :update]
default_accept [:vat_exempt?, :timezone]
end
validations do
validate Validations.ValidateTimezone
end
attributes do
uuid_primary_key :id
attribute :vat_exempt?, :boolean, default: false, source: :has_vat_exempt, allow_nil?: false
attribute :timezone, :string, default: "Europe/Berlin", allow_nil?: false
timestamps()
end
endand a simple validation:
defmodule App.Organizations.OrganizationSettings.Validations.ValidateTimezone do
@moduledoc false
use Ash.Resource.Validation
@impl true
def validate(changeset, _opts, _context) do
timezone = Ash.Changeset.get_attribute(changeset, :timezone)
if Timex.Timezone.exists?(timezone) do
:ok
else
{:error, field: :timezone, message: "is invalid"}
end
end
enddefmodule App.Organizations.OrganizationSettings.Validations.ValidateTimezone do
@moduledoc false
use Ash.Resource.Validation
@impl true
def validate(changeset, _opts, _context) do
timezone = Ash.Changeset.get_attribute(changeset, :timezone)
if Timex.Timezone.exists?(timezone) do
:ok
else
{:error, field: :timezone, message: "is invalid"}
end
end
end