Current section
Files
Jump to
Current section
Files
lib/consts/image_gravity.ex
defmodule ImageGravity do
@moduledoc """
Provides constants and validation functions for image gravity (positioning) values.
This module defines various image gravity options, such as `center`, `top-left`, `bottom-right`, etc.
Helper functions are included to validate these gravity values, ensuring only recognized positioning options are used.
"""
@center "center"
@top_left "top-left"
@top "top"
@top_right "top-right"
@left "left"
@right "right"
@bottom_left "bottom-left"
@bottom "bottom"
@bottom_right "bottom-right"
@all_gravities [
@center,
@top_left,
@top,
@top_right,
@left,
@right,
@bottom_left,
@bottom,
@bottom_right
]
@doc """
Guard clause to check if a given `image gravity` is a valid image gravity code.
## Examples
iex> ImageGravity.valid_gravity("center")
true
iex> ImageGravity.valid_gravity("down_right")
false
"""
@spec valid_gravity(String.t()) :: boolean()
defguard valid_gravity(image_gravity) when image_gravity in @all_gravities
@doc """
Returns true if the given `gravity` is a valid image gravity value.
## Examples
iex> ImageGravity.is_valid_gravity?("top-left")
true
iex> ImageGravity.is_valid_gravity?("middle")
false
"""
@spec is_valid_gravity?(String.t()) :: boolean()
def is_valid_gravity?(gravity), do: gravity in @all_gravities
@doc """
Validates the given `gravity` and returns `{:ok, gravity}` if it is valid,
or `{:error, "Invalid image gravity"}` otherwise.
## Examples
iex> ImageGravity.validate_gravity("top-right")
{:ok, "top-right"}
iex> ImageGravity.validate_gravity("middle")
{:error, "Invalid image gravity"}
"""
@spec validate_gravity(String.t()) :: {:ok, String.t()} | {:error, String.t()}
def validate_gravity(gravity) when gravity in @all_gravities, do: {:ok, gravity}
def validate_gravity(_gravity), do: {:error, "Invalid image gravity"}
@doc """
Returns the given `gravity` if it is valid. Raises an `ArgumentError`
if the `gravity` is invalid.
## Examples
iex> ImageGravity.validate_gravity!("center")
"center"
iex> ImageGravity.validate_gravity!("middle")
** (ArgumentError) Invalid image gravity: "middle"
"""
@spec validate_gravity!(String.t()) :: String.t()
def validate_gravity!(gravity) do
if gravity in @all_gravities do
gravity
else
raise ArgumentError, "Invalid image gravity: #{inspect(gravity)}"
end
end
end