Class: VCardParser::V30::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/vcard_parser/3.0/field.rb

Constant Summary collapse

FORMAT =
/^
  (?:(?<group>[a-zA-Z0-9\-]+)\.)?
  (?<name>[a-zA-Z0-9\-\/]+)
  (?<params> (?:;[A-Za-z-]+=[^;]+)+ )?
  :(?<value>.*)
$/x

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, value, group = nil, params = {}) ⇒ Field

Returns a new instance of Field.



16
17
18
19
20
21
# File 'lib/vcard_parser/3.0/field.rb', line 16

def initialize(name, value, group = nil, params = {})
  @name = name
  @group = group
  @value = convert_value(value)
  @params = params
end

Instance Attribute Details

#groupObject (readonly)

Returns the value of attribute group.



7
8
9
# File 'lib/vcard_parser/3.0/field.rb', line 7

def group
  @group
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/vcard_parser/3.0/field.rb', line 7

def name
  @name
end

#paramsObject (readonly)

Returns the value of attribute params.



7
8
9
# File 'lib/vcard_parser/3.0/field.rb', line 7

def params
  @params
end

#valueObject (readonly)

Returns the value of attribute value.



7
8
9
# File 'lib/vcard_parser/3.0/field.rb', line 7

def value
  @value
end

Class Method Details

.parse(line) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/vcard_parser/3.0/field.rb', line 38

def self.parse(line)
  m = FORMAT.match(line.strip)
  if m
    params = {}
    if m[:params]
      m[:params].split(';').reject{|s| s.empty? }.each do |p|
        pname, pvalue = p.split('=')
        pname.downcase!
        params[pname] ||= []
        params[pname] << pvalue
      end
    end
    
    new(m[:name], m[:value], m[:group], params)
  else
    raise MalformedInput, line
  end
end

Instance Method Details

#full_nameObject



23
24
25
26
27
28
# File 'lib/vcard_parser/3.0/field.rb', line 23

def full_name
  ret = ""
  ret << "#{@group}." if group
  ret << @name
  ret
end

#to_sObject



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/vcard_parser/3.0/field.rb', line 57

def to_s
  ret = full_name
          
  @params.each do |name, values|
    values.each do |v|
      ret << ";#{name}=#{v}"
    end
  end
  
  ret << ":#{dump_value(value)}"
  
  ret
end

#valuesObject



30
31
32
33
34
35
36
# File 'lib/vcard_parser/3.0/field.rb', line 30

def values
  if value
    value.split(';')
  else
    nil
  end
end