vcard_parser 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/vcard_parser/vcard.rb +34 -2
- data/lib/vcard_parser/version.rb +1 -1
- data/specs/unit/vcard_spec.rb +32 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 334aa49432c9d0b544d32ab4434698c2d21246b0
|
4
|
+
data.tar.gz: 3dfa1f540320638b7f4f58d839aded48e2ac3663
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed688420fa62e9947f9e566be969859a0e23bfdf1d77c26ebedc2d735fd1c32d128d51fc0664a9d54a31895d95fdb8cfab5e98a53db13268984c632b2c32e013
|
7
|
+
data.tar.gz: cc03578a116017cfa7e6f2fbe4211ea7ccf549a58a849bab8b1676ecb31ebcaebce60611a342729866b6f5ea279277826a0aae4322c47a8768085f0f35d65b59
|
data/lib/vcard_parser/vcard.rb
CHANGED
@@ -5,7 +5,7 @@ module VCardParser
|
|
5
5
|
MalformedInput = Class.new(ParsingError)
|
6
6
|
|
7
7
|
class VCard
|
8
|
-
attr_reader :version, :fields
|
8
|
+
attr_reader :version, :fields, :groups
|
9
9
|
|
10
10
|
VCARD_FORMAT = /
|
11
11
|
BEGIN:VCARD\s+
|
@@ -16,6 +16,7 @@ module VCardParser
|
|
16
16
|
def initialize(version, fields = [])
|
17
17
|
@version = version
|
18
18
|
@fields = fields
|
19
|
+
@groups = Set.new
|
19
20
|
end
|
20
21
|
|
21
22
|
def self.parse(data)
|
@@ -40,20 +41,30 @@ module VCardParser
|
|
40
41
|
card.add_field_from_string(line)
|
41
42
|
end
|
42
43
|
end
|
43
|
-
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def add_field_from_string(line)
|
48
48
|
f = field_class.parse(line)
|
49
|
+
@groups << f.group if f.group
|
49
50
|
@fields << f
|
50
51
|
end
|
51
52
|
|
52
53
|
def add_field(*args)
|
53
54
|
f = field_class.new(*args)
|
55
|
+
@groups << f.group if f.group
|
54
56
|
@fields << f
|
55
57
|
end
|
56
58
|
|
59
|
+
def get_fields_by_group(name)
|
60
|
+
ret = {}
|
61
|
+
@fields.select{|f| f.group == name }.each do |f|
|
62
|
+
ret[f.name.downcase] = f
|
63
|
+
end
|
64
|
+
|
65
|
+
ret
|
66
|
+
end
|
67
|
+
|
57
68
|
def values(key, group = nil)
|
58
69
|
@fields.select do |f|
|
59
70
|
(f.name == key) &&
|
@@ -61,6 +72,17 @@ module VCardParser
|
|
61
72
|
end
|
62
73
|
end
|
63
74
|
|
75
|
+
# retrieve first match and remove fields
|
76
|
+
def delete(key, group = nil)
|
77
|
+
@fields.each.with_index do |f, n|
|
78
|
+
if (f.name == key) && (!group || (f.group == group))
|
79
|
+
return @fields.delete_at(n)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
return nil
|
84
|
+
end
|
85
|
+
|
64
86
|
def [](key, group = nil)
|
65
87
|
v = values(key, group)
|
66
88
|
v.empty? ? nil : v[0]
|
@@ -88,6 +110,16 @@ module VCardParser
|
|
88
110
|
end
|
89
111
|
|
90
112
|
alias :to_s :vcard
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
def lastname
|
117
|
+
self['N'].value.split(';')[0]
|
118
|
+
end
|
119
|
+
|
120
|
+
def firstname
|
121
|
+
self['N'].value.split(';')[1]
|
122
|
+
end
|
91
123
|
|
92
124
|
|
93
125
|
private
|
data/lib/vcard_parser/version.rb
CHANGED
data/specs/unit/vcard_spec.rb
CHANGED
@@ -78,6 +78,14 @@ END:VCARD
|
|
78
78
|
vcards[1]["UID"].value.should == "12"
|
79
79
|
end
|
80
80
|
|
81
|
+
should 'return firstname, lastname' do
|
82
|
+
vcards = VCardParser::VCard.parse( data_file('two_vcard3.0.vcf') )
|
83
|
+
vcards.size.should == 2
|
84
|
+
|
85
|
+
vcards[0].firstname.should == "Christophe"
|
86
|
+
vcards[0].lastname.should == "Durand"
|
87
|
+
end
|
88
|
+
|
81
89
|
should 'enumerate attributes 1' do
|
82
90
|
vcards = VCardParser::VCard.parse( data_file('vcard3.0.vcf') )
|
83
91
|
vcards.size.should == 1
|
@@ -91,6 +99,30 @@ END:VCARD
|
|
91
99
|
attrs.size.should == 12
|
92
100
|
end
|
93
101
|
|
102
|
+
should 'list groups' do
|
103
|
+
vcards = VCardParser::VCard.parse( data_file('vcard3.0.vcf') )
|
104
|
+
vcards.size.should == 1
|
105
|
+
|
106
|
+
vcards[0].groups.to_a.should == %w(item1 item2)
|
107
|
+
end
|
108
|
+
|
109
|
+
should 'return fields for given group' do
|
110
|
+
vcards = VCardParser::VCard.parse( data_file('vcard3.0.vcf') )
|
111
|
+
vcards.size.should == 1
|
112
|
+
|
113
|
+
fields = vcards[0].get_fields_by_group('item2')
|
114
|
+
fields.size.should == 2
|
115
|
+
|
116
|
+
fields['tel'].tap do |f|
|
117
|
+
f.name.should == "TEL"
|
118
|
+
f.value.should == "5 66"
|
119
|
+
end
|
120
|
+
|
121
|
+
fields['adr'].tap do |f|
|
122
|
+
f.name.should == "ADR"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
94
126
|
should 'enumerate attributes 2' do
|
95
127
|
vcards = VCardParser::VCard.parse( data_file('vcard3.0.vcf') )
|
96
128
|
vcards.size.should == 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcard_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julien Ammous
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A vCard parser
|
14
14
|
email:
|
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project:
|
59
|
-
rubygems_version: 2.
|
59
|
+
rubygems_version: 2.4.5.1
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: A simple vCard parser
|