ExEnv.Utils (ExEnv v0.3.5)

View Source

ExEnv general utilities.

Summary

Functions

Returns :ok if config AST is acceptable, else raises exception.

Returns :ok if otp_app is acceptable, else raises exception.

Functions

validate_config_ast(list)

Returns :ok if config AST is acceptable, else raises exception.

Example

  iex> quote do [foo: 123] end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do [1, 2, 3] end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do %{hello: "world"} end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do {:hello, "world"} end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do {:hello, "world", 123} end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do [{Hello.World, [foo: "bar"]}] end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do %Date{year: 1990, month: 1, day: 1} end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do ~D[2026-09-09] end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do [starts_at: ~T[10:00:00], created_at: ~N[2026-09-09 10:00:00], deadline: ~U[2026-09-09 10:00:00Z]] end |> ExEnv.Utils.validate_config_ast
  :ok
  iex> quote do ~D[2026-09-09 Calendar.ISO] end |> ExEnv.Utils.validate_config_ast
  :ok

  iex> {:__aliases__, [], [Foo, "Bar"]} |> ExEnv.Utils.validate_config_ast
  ** (RuntimeError) wrong submodule "Bar" name in AST chunk {:__aliases__, [], [Foo, "Bar"]}

  iex> quote do Foo.bar("hello") end |> ExEnv.Utils.validate_config_ast
  ** (RuntimeError) invalid or unsafe config AST {{:., [], [{:__aliases__, [alias: false], [:Foo]}, :bar]}, [], ["hello"]}

  iex> quote do ~D[2026-09-09 Evil.Calendar] end |> ExEnv.Utils.validate_config_ast
  ** (RuntimeError) unsupported calendar Evil.Calendar in sigil ~D[2026-09-09 Evil.Calendar], only Calendar.ISO is allowed

  iex> quote do ~D[2026-09-09]x end |> ExEnv.Utils.validate_config_ast
  ** (RuntimeError) sigil ~D[2026-09-09]x does not accept modifiers

  iex> Code.string_to_quoted!("~s[hello]") |> ExEnv.Utils.validate_config_ast
  ** (RuntimeError) invalid or unsafe config AST {:sigil_s, [delimiter: "[", line: 1], [{:<<>>, [line: 1], ["hello"]}, []]}

validate_otp_app(otp_app)

Returns :ok if otp_app is acceptable, else raises exception.

Example

  iex> ExEnv.Utils.validate_otp_app(:hello_world)
  :ok

  iex> ExEnv.Utils.validate_otp_app(:hello_123)
  :ok

  iex> ExEnv.Utils.validate_otp_app(:"123_hello")
  ** (RuntimeError) invalid OTP application name 123_hello

  iex> ExEnv.Utils.validate_otp_app(:"Hello_World")
  ** (RuntimeError) invalid OTP application name Hello_World