View Source Naiveical.Helpers (Naiveical v1.0.0)

Some helper functions.

Link to this section Summary

Functions

Formats a Date for iCalendar output.

Formats a DateTime or NaiveDateTime for iCalendar output.

Parse a timedate text into DateTime.

Parse a timedate text into DateTime.

Parses an iCalendar date string (YYYYMMDD format) to a Date.

Parses an iCalendar date string (YYYYMMDD format) to a Date, raising on error.

Parses iCalendar datetime formats to DateTime using regex-based parsing.

Parses iCalendar datetime formats to DateTime, raising on error.

Splits a long line into several lines starting with a space.

Link to this section Functions

Link to this function

fold(line, max_size \\ 75)

View Source
@spec fold(String.t(), non_neg_integer()) :: String.t()

https://www.rfc-editor.org/rfc/rfc5545#section-3.1:

Lines of text SHOULD NOT be longer than 75 octets, excluding the line break. Long content lines SHOULD be split into a multiple line representations using a line "folding" technique. That is, a long line can be split between any two characters by inserting a CRLF immediately followed by a single linear white-space character (i.e., SPACE or HTAB). Any sequence of CRLF followed immediately by a single linear white-space character is ignored (i.e., removed) when processing the content type.

The fold function splits a string across graphemes if the byte-size of the substring will exceed the max_size. It then adds a CRLF and an empty space at the split-point.

Link to this function

format_icalendar_date(date)

View Source
@spec format_icalendar_date(Date.t()) :: String.t()

Formats a Date for iCalendar output.

Returns date in ISO 8601 basic format: YYYYMMDD

examples

Examples

iex> date = ~D[2025-01-01]
iex> Naiveical.Helpers.format_icalendar_date(date)
"20250101"
Link to this function

format_icalendar_datetime(datetime)

View Source
@spec format_icalendar_datetime(DateTime.t() | NaiveDateTime.t()) :: String.t()

Formats a DateTime or NaiveDateTime for iCalendar output.

Returns timestamp in ISO 8601 basic format without separators: YYYYMMDDTHHMMSSZ

examples

Examples

iex> dt = ~U[2025-01-01 12:30:45Z]
iex> Naiveical.Helpers.format_icalendar_datetime(dt)
"20250101T123045Z"
Link to this function

is_fullday(attributes, datetime_str)

View Source
@spec is_fullday(String.t(), String.t()) :: boolean()
@spec parse_date(String.t()) :: {:ok, Date.t()} | {:error, term()}
@spec parse_date!(String.t()) :: NaiveDateTime.t()

Parse a timedate text into DateTime.

Link to this function

parse_datetime(datetime_str)

View Source
@spec parse_datetime(String.t()) :: {:ok, DateTime.t()} | {:error, term()}

Parse a timedate text into DateTime.

Link to this function

parse_datetime(datetime_str, timezone)

View Source
@spec parse_datetime(String.t(), String.t() | nil) ::
  {:ok, DateTime.t()} | {:error, term()}
Link to this function

parse_datetime!(datetime_str)

View Source
@spec parse_datetime!(String.t()) :: DateTime.t()
Link to this function

parse_datetime!(datetime_str, timezone)

View Source
@spec parse_datetime!(String.t(), String.t() | nil) :: DateTime.t()
Link to this function

parse_icalendar_date(str)

View Source
@spec parse_icalendar_date(String.t() | nil) :: {:ok, Date.t()} | {:error, term()}

Parses an iCalendar date string (YYYYMMDD format) to a Date.

This is a faster alternative to parse_date/1 for simple date-only formats.

examples

Examples

iex> Naiveical.Helpers.parse_icalendar_date("20250101")
{:ok, ~D[2025-01-01]}

iex> Naiveical.Helpers.parse_icalendar_date("")
{:error, :empty_string}
Link to this function

parse_icalendar_date!(str)

View Source
@spec parse_icalendar_date!(String.t()) :: Date.t()

Parses an iCalendar date string (YYYYMMDD format) to a Date, raising on error.

examples

Examples

iex> Naiveical.Helpers.parse_icalendar_date!("20250101")
~D[2025-01-01]
Link to this function

parse_icalendar_datetime(str)

View Source
@spec parse_icalendar_datetime(String.t() | nil) ::
  {:ok, DateTime.t()} | {:error, term()}

Parses iCalendar datetime formats to DateTime using regex-based parsing.

Supports three formats:

  • UTC datetime: 20250101T120000Z
  • Local datetime: 20250101T120000 (treated as UTC)
  • Date only: 20250101 (treated as midnight UTC)

This is a faster alternative to parse_datetime/1 that doesn't require Timex for simple formats.

examples

Examples

iex> Naiveical.Helpers.parse_icalendar_datetime("20250101T120000Z")
{:ok, ~U[2025-01-01 12:00:00Z]}

iex> Naiveical.Helpers.parse_icalendar_datetime("20250101")
{:ok, ~U[2025-01-01 00:00:00Z]}

iex> Naiveical.Helpers.parse_icalendar_datetime("")
{:error, :empty_string}
Link to this function

parse_icalendar_datetime!(str)

View Source
@spec parse_icalendar_datetime!(String.t()) :: DateTime.t()

Parses iCalendar datetime formats to DateTime, raising on error.

See parse_icalendar_datetime/1 for supported formats.

examples

Examples

iex> Naiveical.Helpers.parse_icalendar_datetime!("20250101T120000Z")
~U[2025-01-01 12:00:00Z]
@spec unfold(String.t()) :: String.t()

Splits a long line into several lines starting with a space.