Packages
tz_extra
0.16.5
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.1
0.22.0
0.21.1
0.21.0
0.20.1
0.20.0
0.17.0
0.16.7
0.16.6
0.16.5
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Time zone-related utilities
Current section
Files
Jump to
Current section
Files
lib/changeset.ex
if Code.ensure_loaded?(Ecto.Changeset) do
defmodule TzExtra.Changeset do
require TzExtra.Compiler
def validate_time_zone_identifier(%Ecto.Changeset{} = changeset, field, opts \\ []) when is_atom(field) do
opts =
opts
|> Keyword.put(:include_alias, Keyword.get(opts, :allow_alias, false))
Ecto.Changeset.validate_change changeset, field, {:time_zone_identifier, []}, fn _field, value ->
if Enum.member?(TzExtra.time_zone_identifiers(opts), value),
do: [],
else: [{field, {message(opts, "is not a valid time zone"), [validation: :time_zone_identifier]}}]
end
end
def validate_civil_time_zone_identifier(%Ecto.Changeset{} = changeset, field, opts \\ []) when is_atom(field) do
opts =
opts
|> Keyword.put(:include_alias, Keyword.get(opts, :allow_alias, false))
|> Keyword.put(:prepend_utc, Keyword.get(opts, :allow_utc, false))
Ecto.Changeset.validate_change changeset, field, {:civil_time_zone_identifier, []}, fn _field, value ->
if Enum.member?(TzExtra.civil_time_zone_identifiers(opts), value),
do: [],
else: [{field, {message(opts, "is not a valid time zone"), [validation: :civil_time_zone_identifier]}}]
end
end
def validate_iso_country_code(%Ecto.Changeset{} = changeset, field, opts \\ []) when is_atom(field) do
Ecto.Changeset.validate_change changeset, field, {:country_code, []}, fn _field, value ->
if Enum.any?(TzExtra.countries(), fn %{code: country_code} -> country_code == value end),
do: [],
else: [{field, {message(opts, "is not a valid country code"), [validation: :country_code]}}]
end
end
defp message(opts, key \\ :message, default) do
Keyword.get(opts, key, default)
end
end
end