class Tilia::VObject::Property::ICalendar::Period

Period property.

This object represents PERIOD values, as defined here:

tools.ietf.org/html/rfc5545#section-3.8.2.6

Attributes

delimiter[RW]

In case this is a multi-value property. This string will be used as a delimiter.

@return [String, nil]

Public Class Methods

new(*args) click to toggle source
Calls superclass method Tilia::VObject::Property::new
# File lib/tilia/v_object/property/i_calendar/period.rb, line 116
def initialize(*args)
  super(*args)
  @delimiter = ','
end

Public Instance Methods

json_value() click to toggle source

Returns the value, in the format it should be encoded for json.

This method must always return an array.

@return [array]

# File lib/tilia/v_object/property/i_calendar/period.rb, line 67
def json_value
  result = []
  parts.each do |item|
    (start, ending) = item.split('/', 2)

    start = Tilia::VObject::DateTimeParser.parse_date_time(start)

    # This is a duration value.
    if ending[0] == 'P'
      result << [
        start.strftime('%Y-%m-%dT%H:%M:%S'),
        ending
      ]
    else
      ending = Tilia::VObject::DateTimeParser.parse_date_time(ending)
      result << [
        start.strftime('%Y-%m-%dT%H:%M:%S'),
        ending.strftime('%Y-%m-%dT%H:%M:%S')
      ]
    end
  end

  result
end
json_value=(value) click to toggle source

Sets the json value, as it would appear in a jCard or jCal object.

The value must always be an array.

@param [array] value

@return [void]

Calls superclass method Tilia::VObject::Property#json_value=
# File lib/tilia/v_object/property/i_calendar/period.rb, line 53
def json_value=(value)
  value = value.values if value.is_a?(Hash)
  value = value.map do |item|
    item = item.values if item.is_a?(Hash)
    item.join('/').delete(':').delete('-')
  end
  super(value)
end
raw_mime_dir_value() click to toggle source

Returns a raw mime-dir representation of the value.

@return [String]

# File lib/tilia/v_object/property/i_calendar/period.rb, line 32
def raw_mime_dir_value
  parts.join(@delimiter)
end
raw_mime_dir_value=(val) click to toggle source

Sets a raw value coming from a mimedir (iCalendar/vCard) file.

This has been 'unfolded', so only 1 line will be passed. Unescaping is not yet done, but parameters are not included.

@param [String] val

@return [void]

# File lib/tilia/v_object/property/i_calendar/period.rb, line 25
def raw_mime_dir_value=(val)
  self.value = val.split(@delimiter)
end
value_type() click to toggle source

Returns the type of value.

This corresponds to the VALUE= parameter. Every property also has a 'default' valueType.

@return [String]

# File lib/tilia/v_object/property/i_calendar/period.rb, line 42
def value_type
  'PERIOD'
end

Protected Instance Methods

xml_serialize_value(writer) click to toggle source

This method serializes only the value of a property. This is used to create xCard or xCal documents.

@param [XmlWriter] writer XML writer.

@return [void]

# File lib/tilia/v_object/property/i_calendar/period.rb, line 100
def xml_serialize_value(writer)
  writer.start_element(value_type.downcase)

  value = json_value
  writer.write_element('start', value[0][0])

  if value[0][1][0] == 'P'
    writer.write_element('duration', value[0][1])
  else
    writer.write_element('end', value[0][1])
  end
  writer.end_element
end