Tempo version 0.3.0
Tempo v0.3.0 - April 24th, 2026
Added
Tempo.Interval.metadata/1. Named accessor for the:metadatamap on an interval. Mirrorsfrom/1,to/1,endpoints/1, andresolution/1added in v0.2.0, so user-facing code never has to reach into struct fields to read iCalSUMMARY,LOCATION, event UIDs, or any other per-interval data attached by the caller.
Changed
-
Renamed
Tempo.compare/2andTempo.Interval.compare/2toTempo.relation/2andTempo.Interval.relation/2. The function returns one of 13 Allen interval-algebra relations (:precedes,:meets,:overlaps, …), not the:lt | :eq | :gtshape stdlib'scompare/2promises. The new name avoids the trap. -
Renamed
Tempo.SigiltoTempo.Sigils(plural), and movedcalendar_from/1out toTempo.Sigils.Options.import Tempo.Sigilsnow brings onlysigil_o/2andsigil_TEMPO/2into scope — no helper functions leak. The oldTempo.Sigilmodule remains as a deprecated compatibility shim and will be removed in a future major version. -
Tempo.VisualizerandTempo.Visualizer.Standalonenow compile only when both:plugand:banditare available. Previously Plug alone was enough to trigger compilation ofTempo.Visualizer, andStandalonereferencedBanditunguarded — so a downstream application that depended on Tempo without pulling in either library saw "undefined module" warnings during compilation. Both modules still expose stubinit/call/start/child_spec/stopfunctions that raise a single actionable error when called without the deps in place.
Bug Fixes
-
ISO week-date resolution now uses
Calendrical.ISOWeeksemantics throughout the validation path, regardless of the caller's declared calendar. There is room to be more selective than this (there can be multiple ways to construct a week-based calendar). However there isn't yet a clear way to influence that decision other than through a-u-caqualifier and that only allows ISO Week calendars. -
Tempo.to_date/1now handles ordinal dates ([year, day]— produced by theOdesignator, the extendedYYYY-DDDform, or by enumerating a year-only Tempo as days) and ISO week dates ([year, week, day_of_week]). Previously both shapes returned aTempo.ConversionErroreven though the components unambiguously identify a single calendar day. Examples:Tempo.to_date(~o"2020-166")now returns{:ok, ~D[2020-06-14]};Tempo.to_date(~o"2020-W24-3")returns{:ok, ~D[2020-06-10]}; and~o"2020Y{1..-1}D" |> Enum.to_list() |> hd() |> Tempo.to_date()returns{:ok, ~D[2020-01-01]}.