Current section
Files
Jump to
Current section
Files
lib/jedi_helpers.ex
defmodule JediHelpers do
@moduledoc """
Documentation for `JediHelpers`.
"""
@doc """
Returns the underscored (snake_case) name of a struct's module as a string.
Useful for generating type identifiers from structs, especially in APIs or dynamic logic.
## Example
iex> resource_type(%JediHelpers.BlogPost{})
"blog_post"
## Parameters:
- `resource` (`struct`): Any Elixir struct.
## Returns:
- `String.t()`: The snake_case name of the struct's module (last segment only).
"""
@spec resource_type(struct()) :: String.t()
def resource_type(%module{} = _resource) do
module
|> Module.split()
|> List.last()
|> Macro.underscore()
end
@doc """
Extracts the path segment from a URI string.
Useful for isolating the path portion of a full URL (e.g. `/users/123`).
## Example
iex> uri_parse_path("https://example.com/users/123?ref=home")
"/users/123"
## Parameters:
- `uri` (`String.t()`): A URI string.
## Returns:
- `String.t()` or `nil`: The path component of the URI, or `nil` if absent.
"""
@spec uri_parse_path(String.t()) :: String.t() | nil
def uri_parse_path(uri) do
URI.parse(uri).path
end
@doc """
Converts an atom into a human-readable string by title-casing its segments.
Useful for displaying labels or headings derived from atoms.
## Examples
iex> JediHelpers.atom_to_readable_string(:user_profile)
"User Profile"
iex> JediHelpers.atom_to_readable_string(:admin)
"Admin"
"""
@spec atom_to_readable_string(atom()) :: String.t()
def atom_to_readable_string(atom) when is_atom(atom) do
atom
|> Atom.to_string()
|> String.split("_")
|> Enum.map(&String.capitalize/1)
|> Enum.join(" ")
end
end