# \[ANN\] Relativity 0.0.9 released

**URL:** <https://rubytalk.org/t/ann-relativity-0-0-9-released/64977>\
**Category:** ruby-talk\
**Created:** [1 March 2012 10:26 UTC](https://rubytalk.org/t/ann-relativity-0-0-9-released/64977 "2012-03-01T10:26:45Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Peter\_Vandenabeele1](https://avatars.discourse-cdn.com/v4/letter/p/59ef9b/32.png) [@Peter\_Vandenabeele1](https://rubytalk.org/u/Peter_Vandenabeele1)\
**Post date:** [1 March 2012 10:26 UTC](https://rubytalk.org/t/ann-relativity-0-0-9-released/64977/1 "2012-03-01T10:26:45Z")

</div>

Hi,

Just released version 0.0.9 of 'relativity'

\* What is it?

Time, Date and DateTime classes don’t have a mode for working with relative time  
inside 1 day (or 1 week, 1 month, 1 quarter, etc.). A relative time  
object, relative to  
a day or a week, is useful to describe e.g. opening hours of a business. Ranges  
are built on top, so the ranges of opening hours can be represented.

\* Short example (more examples in the README):

require 'relativity'  
opens\_at = DayTime.new("8:35") #=\> 08:35:00

dtr = DayTimeRange.new("8 to 12:30") # =\> 08:00:00 to 12:30:00  
dtr.start # =\> 08:00:00  
dtr.to\_s # =\> "08:00:00 to 12:30:00"

night\_shift = DayTimeRange.new("21:45..06:05") # =\> 21:45:00..06:05:00

# normalize is used for persisting a DayTime and DayTimeRange in  
normalized format

DayTime.normalize("8") # =\> "08:00:00"  
DayTime.normalize(nil) # =\> nil  
DayTimeRange.normalize("8..12") # =\> "08:00:00..12:00:00"  
DayTimeRange.normalize("8 to 12", :separator =\> "..")  
=\> Relativity::InvalidRangeFormatError: Maybe the range separator was  
not set correctly? Separator used was ".."

\* Changes

\*\* solved a bug with ruby 1.9.2 (thanks Bryan Dunsmore for the bug report)  
\*\* added DayTimeRange  
\*\* added methods for normalization (used for persisting in AR)  
\*\* see Changelog for details

\* TODO

\*\* new/normalize checks hours, minutes, seconds, nanoseconds  
&nbsp;&nbsp;&nbsp;in range (0...24, 0...60, 0...60, 0...1000\_000\_000)  
\*\* Add a '...' range (up to, but not including)  
\*\* comparisons (`==`, `include?`, ...)

\*\* WeekTime  
\*\* WeekDay

\*\* WeekTimeRange  
\*\* WeekDayRange

\*\* ...

HTH,

Peter
