class Vobject::Property

Attributes

group[RW]
multiple[RW]
norm[RW]
params[RW]
prop_name[RW]
value[RW]

Public Class Methods

new(key, options) click to toggle source
# File lib/vobject/property.rb, line 17
def initialize(key, options)
  if options.class == Array
    self.multiple = []
    options.each do |v|
      multiple << property_base_class.new(key, v)
      self.prop_name = key
    end
  else
    self.prop_name = key
    if options.nil? || options.empty?
      self.group = nil
      self.params = []
      self.value = nil
    else
      self.group = options[:group]
      self.prop_name = key
      unless options[:params].nil? || options[:params].empty?
        self.params = []
        options[:params].each do |k, v|
          params << parameter_base_class.new(k, v)
        end
      end
      # self.value = parse_value(options[:value])
      self.value = options[:value]
    end
  end
  self.norm = nil
  raise_invalid_initialization if key != name
end

Public Instance Methods

<=>(another) click to toggle source
# File lib/vobject/property.rb, line 7
def <=>(another)
  if self.prop_name =~ /^VERSION$/i
    -1
  elsif another.prop_name =~ /^VERSION$/i
    1
  else
    self.to_norm <=> another.to_norm
  end
end
to_hash() click to toggle source
# File lib/vobject/property.rb, line 107
def to_hash
  ret = {}
  if multiple
    ret[prop_name] = []
    multiple.each do |c|
      ret[prop_name] = ret[prop_name] << c.to_hash[prop_name]
    end
  else
    ret = {prop_name => { value: value.to_hash } }
    ret[prop_name][:group] = group unless group.nil?
    if params
      ret[prop_name][:params] = {}
      params.each do |p|
        ret[prop_name][:params] = ret[prop_name][:params].merge p.to_hash
      end
    end
  end
  ret
end
to_norm() click to toggle source
# File lib/vobject/property.rb, line 75
def to_norm
  if @norm.nil?
    if multiple.nil? || multiple.empty?
      ret = to_norm_line
    else
      arr = []
      multiple.sort.each do |x|
        arr << x.to_norm_line
      end
      ret = arr.join("")
    end
    @norm = ret
  end
  @norm
end
to_norm_line() click to toggle source
# File lib/vobject/property.rb, line 91
def to_norm_line
  line = group ? "#{group}." : ""
  line << name.to_s.tr("_", "-").upcase

  (params || {}).sort.each do |p|
    line << ";#{p.to_norm}"
  end

  line << ":#{value.to_norm}"

  line = Vobject::fold_line(line) << "\n"

  line
end
to_s() click to toggle source
# File lib/vobject/property.rb, line 47
def to_s
  if multiple.nil? || multiple.empty?
    ret = to_s_line
  else
    arr = []
    multiple.each do |x|
      arr << x.to_s_line
    end
    ret = arr.join("")
  end
  ret
end
to_s_line() click to toggle source
# File lib/vobject/property.rb, line 60
def to_s_line
  line = group ? "#{group}." : ""
  line << name.to_s.tr("_", "-")

  (params || {}).each do |p|
    line << ";#{p}"
  end

  line << ":#{value}"

  line = Vobject::fold_line(line) << "\n"

  line
end

Private Instance Methods

default_value_type() click to toggle source
# File lib/vobject/property.rb, line 147
def default_value_type
  "text"
end
name() click to toggle source
# File lib/vobject/property.rb, line 129
def name
  prop_name
end
parameter_base_class() click to toggle source
# File lib/vobject/property.rb, line 155
def parameter_base_class
  Vobject::Parameter
end
parse_text_value(value) click to toggle source
# File lib/vobject/property.rb, line 139
def parse_text_value(value)
  value
end
parse_value(value) click to toggle source
# File lib/vobject/property.rb, line 133
def parse_value(value)
  parse_method = :"parse_#{value_type}_value"
  parse_method = respond_to?(parse_method, true) ? parse_method : :parse_text_value
  send(parse_method, value)
end
property_base_class() click to toggle source
# File lib/vobject/property.rb, line 151
def property_base_class
  Vobject::Property
end
raise_invalid_initialization() click to toggle source
# File lib/vobject/property.rb, line 159
def raise_invalid_initialization
  raise "vObject property initialization failed"
end
value_type() click to toggle source
# File lib/vobject/property.rb, line 143
def value_type
  params ? params[0].value : default_value_type
end