class Tilia::VObject::Component::VAlarm
VAlarm
component.
This component contains some additional functionality specific for VALARMs.
Public Instance Methods
effective_trigger_time()
click to toggle source
Returns a DateTime object when this alarm is going to trigger.
This ignores repeated alarm, only the first trigger is returned.
@return [Time]
# File lib/tilia/v_object/component/v_alarm.rb, line 13 def effective_trigger_time trigger = self['TRIGGER'] if !trigger.key?('VALUE') || trigger['VALUE'].to_s.upcase == 'DURATION' trigger_duration = DateTimeParser.parse_duration(self['TRIGGER']) related = (trigger.key?('RELATED') && trigger['RELATED'].to_s.upcase == 'END') ? 'END' : 'START' parent_component = parent if related == 'START' if parent_component.name == 'VTODO' prop_name = 'DUE' else prop_name = 'DTSTART' end effective_trigger = parent_component[prop_name].date_time effective_trigger += trigger_duration else if parent_component.name == 'VTODO' end_prop = 'DUE' elsif parent_component.name == 'VEVENT' end_prop = 'DTEND' else fail InvalidDataException, 'time-range filters on VALARM components are only supported when they are a child of VTODO or VEVENT' end if parent_component.key?(end_prop) effective_trigger = parent_component[end_prop].date_time effective_trigger += trigger_duration elsif parent_component.key?('DURATION') effective_trigger = parent_component['DTSTART'].date_time duration = DateTimeParser.parse_duration(parent_component['DURATION']) effective_trigger += duration effective_trigger += trigger_duration else effective_trigger = parent_component['DTSTART'].date_time effective_trigger += trigger_duration end end else effective_trigger = trigger.date_time end effective_trigger end
in_time_range?(start, ending)
click to toggle source
Returns true or false depending on if the event falls in the specified time-range. This is used for filtering purposes.
The rules used to determine if an event falls within the specified time-range is based on the CalDAV specification.
@param [Time] start @param [Time] ending
@return [Boolean]
# File lib/tilia/v_object/component/v_alarm.rb, line 68 def in_time_range?(start, ending) effective_trigger = effective_trigger_time if key?('DURATION') duration = DateTimeParser.parse_duration(self['DURATION']) repeat = self['REPEAT'].to_s.to_i repeat = 1 if repeat == 0 occurrence = effective_trigger return true if start <= occurrence && ending > occurrence repeat.times do |_i| occurrence += duration return true if start <= occurrence && ending > occurrence end return false else start <= effective_trigger && ending > effective_trigger end end
validation_rules()
click to toggle source
(see Component#validation_rules
)
# File lib/tilia/v_object/component/v_alarm.rb, line 90 def validation_rules { 'ACTION' => 1, 'TRIGGER' => 1, 'DURATION' => '?', 'REPEAT' => '?', 'ATTACH' => '?' } end