Sha256: 89724f932c26571c7b5a046d0d6db5bd4270e24c6fe769dba4867e9cf3ca144d
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
module TimeInterval class TimeWithDuration UNITS = %w(years months weeks days hours minutes seconds).freeze def self.parse(iso8601) halves = iso8601.split('/') fail ArgumentError unless halves.length == 2 if halves[0]['P'] forwards = false duration = Duration.parse(halves[0]) time = halves[1] elsif halves[1]['P'] forwards = true duration = Duration.parse(halves[1]) time = halves[0] else fail ArgumentError end new Time.parse(time), duration, forwards end attr_reader :start_time attr_reader :duration def initialize(time, duration, forwards = true) @start_time = time @duration = duration @forwards = forwards end def ==(other) return false unless other.is_a? TimeWithDuration start_time == other.start_time && end_time == other.end_time end alias_method :eql?, :== def end_time if forwards? duration.add_to start_time else duration.subtract_from start_time end end def iso8601 if forwards? "#{start_time.iso8601}/#{duration.iso8601}" else "#{duration.iso8601}/#{start_time.iso8601}" end end def step TimeWithDuration.new end_time, duration, forwards? end private def forwards? @forwards == true end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
time-interval-0.0.5 | lib/time_interval/time_with_duration.rb |
time-interval-0.0.4 | lib/time_interval/time_with_duration.rb |