Sha256: 666a8a180c16d73fb506047f9b88208d2a9ca1d55fae88f95e61e01b49fa0a6c
Contents?: true
Size: 1.21 KB
Versions: 3
Compression:
Stored size: 1.21 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 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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
time-interval-0.0.3 | lib/time_interval/time_with_duration.rb |
time-interval-0.0.2 | lib/time_interval/time_with_duration.rb |
time-interval-0.0.1 | lib/time_interval/time_with_duration.rb |