class Icalendar::Values::Duration
def initialize(value, params = {})
def initialize(value, params = {}) if value.is_a? Icalendar::Values::Duration super value.value, params else super OpenStruct.new(parse_fields value), params end end
def parse_fields(value)
def parse_fields(value) { past: (value =~ DURATION_PAST_REGEX ? $1 == '-' : false), weeks: (value =~ DURATION_WEEKS_REGEX ? $1.to_i : 0), days: (value =~ DURATION_DAYS_REGEX ? $1.to_i : 0), hours: (value =~ DURATION_HOURS_REGEX ? $1.to_i : 0), minutes: (value =~ DURATION_MINUTES_REGEX ? $1.to_i : 0), seconds: (value =~ DURATION_SECONDS_REGEX ? $1.to_i : 0) } end
def past?
def past? value.past end
def time?
def time? hours > 0 || minutes > 0 || seconds > 0 end
def value_ical
def value_ical return "#{'-' if past?}P#{weeks}W" if weeks > 0 builder = [] builder << '-' if past? builder << 'P' builder << "#{days}D" if days > 0 builder << 'T' if time? builder << "#{hours}H" if hours > 0 builder << "#{minutes}M" if minutes > 0 builder << "#{seconds}S" if seconds > 0 builder.join end