All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.2.0]

Added

  • Periods.compare/2 — compares two Periods of any units and returns :lt | :eq | :gt. Works directly with Enum.sort/2 (e.g. Enum.sort(periods, Periods)).

  • Periods.multiply/2 — scales a Period's amount by an integer.
  • Periods.negate/1 — flips the sign of a Period's amount.
  • Periods.abs/1 — returns a Period with the absolute value of its amount.
  • Periods.new!/2 — raising variant of new/2 (mirrors the existing new/2).
  • Inspect implementation for Periods.Period — renders as #Periods.Period<10 day>.
  • String.Chars implementation for Periods.Period — enables string interpolation.
  • Periods.Ecto.IntervalType — stores a Period as a native PostgreSQL interval, enabling database-side date math. (Periods.Ecto.MapType is still available for JSON storage that preserves the exact unit.)

Changed

  • Dropped the decimal dependency. All conversions operate on integer amounts, so the internal Decimal.div_int/2 calls were equivalent to Kernel.div/2.
  • tz is now a :dev/:test-only dependency. Timezone-aware diff/3 uses whatever :time_zone_database the host application configures, so consuming apps no longer pull the full IANA dataset transitively.
  • ecto requirement simplified to ~> 3.0.

Fixed

  • README referenced the config key :default_value; the correct key is :default_unit.
  • Corrected the new! documentation examples (the old example called a non-existent arity and named the wrong error type).