TimeOfDay#-acceptsTimeOfDayto return difference in seconds
- Add
TimeOfDayarithmetic (+,-),advance,change,to_seconds,.from_seconds - Add
YearMonth#advance,YearMonth#change,YearMonth#days - Add
MonthDay#change - Add
#as_jsonto all value classes - Add
DateValues.config.month_day_orderfor locale-dependentMonthDay.parse
- Breaking: Rails integration extracted to date_values-rails.
require 'date_values/rails'now requires installingdate_values-railsgem.
- Cast returns
nilfor invalid input instead of raising, following Rails convention - Add
date_valuevalidator to distinguish "invalid input" from "no input" #inspectnow uses#<ClassName value>format following Ruby convention- Works with Rails standard validators (
comparison,inclusion,exclusion)
- Fix ActiveRecord type registration — use
ActiveSupport.on_load(:active_record)to register types regardless of load order - Values now work directly in ActiveRecord queries (
Shop.where(billing_month: YearMonth.new(2026, 3)))
- Add
#strftimetoYearMonth,MonthDay, andTimeOfDay - Add I18n backend extension for Rails
lhelper — looks upyear_month.formats,month_day.formats, andtime_of_day.formatsin locale files
- Add
.fromclass methods for converting fromDate/Time(YearMonth.from(date),MonthDay.from(date),TimeOfDay.from(time))
DateValues::YearMonth— year-month value object with arithmetic (+,-),Rangesupport, andDateconversionDateValues::MonthDay— month-day value object with ISO 8601--MM-DDformatDateValues::TimeOfDay— time-of-day value object with optional seconds- All classes are
Data.define-based (immutable, value equality) and includeComparable require 'date_values/rails'registers ActiveModel types (:year_month,:month_day,:time_of_day)- RBS type signatures included