vcard_parser 0.0.1 → 0.0.2
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.
- data/ChangeLog +4 -0
- data/Gemfile +1 -1
- data/lib/vcard_parser/vcard.rb +19 -10
- data/lib/vcard_parser/version.rb +1 -1
- data/specs/unit/vcard_spec.rb +35 -0
- metadata +5 -4
data/ChangeLog
ADDED
data/Gemfile
CHANGED
data/lib/vcard_parser/vcard.rb
CHANGED
@@ -20,16 +20,19 @@ module VCardParser
|
|
20
20
|
|
21
21
|
def self.parse(data)
|
22
22
|
data.scan(VCARD_FORMAT).map do |vcard_data|
|
23
|
-
#
|
23
|
+
# find the version to choose the correct parser
|
24
24
|
lines = vcard_data[0].each_line.map(&:strip)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
|
26
|
+
version_line_index = lines.index{|str| str.start_with?('VERSION:') }
|
27
|
+
|
28
|
+
unless version_line_index
|
29
|
+
raise MalformedInput, "Unable to find VERSION field"
|
29
30
|
end
|
30
31
|
|
31
|
-
# remove
|
32
|
-
lines.
|
32
|
+
# remove version field
|
33
|
+
version_line = lines.delete_at(version_line_index)
|
34
|
+
|
35
|
+
key, version = version_line.split(':')
|
33
36
|
|
34
37
|
new(version).tap do |card|
|
35
38
|
lines.each do |line|
|
@@ -66,11 +69,17 @@ module VCardParser
|
|
66
69
|
@fields.each(&block)
|
67
70
|
end
|
68
71
|
|
69
|
-
def vcard
|
70
|
-
ret = ["BEGIN:VCARD"
|
72
|
+
def vcard(wanted_fields = [])
|
73
|
+
ret = ["BEGIN:VCARD"]
|
74
|
+
|
75
|
+
if wanted_fields.empty? || wanted_fields.include?('VERSION')
|
76
|
+
ret << "VERSION:#{@version}"
|
77
|
+
end
|
71
78
|
|
72
79
|
@fields.each do |f|
|
73
|
-
|
80
|
+
if wanted_fields.empty? || wanted_fields.include?(f.name)
|
81
|
+
ret << f.to_s
|
82
|
+
end
|
74
83
|
end
|
75
84
|
|
76
85
|
ret << "END:VCARD\n"
|
data/lib/vcard_parser/version.rb
CHANGED
data/specs/unit/vcard_spec.rb
CHANGED
@@ -33,6 +33,27 @@ describe 'VCard' do
|
|
33
33
|
vcards[0]["UID"].value.should == "11"
|
34
34
|
end
|
35
35
|
|
36
|
+
should 'parse simple card with UID as first field' do
|
37
|
+
data = <<-EOS
|
38
|
+
BEGIN:VCARD
|
39
|
+
UID:20121108T134354Z-1348-27ECEFA3-2-53E3B7B2.vcf
|
40
|
+
VERSION:3.0
|
41
|
+
PRODID:-//SOGoSync 0.5.0//NONSGML SOGoSync AddressBook//EN
|
42
|
+
FN:Pp, Tt
|
43
|
+
N:Pp;Tt
|
44
|
+
END:VCARD
|
45
|
+
EOS
|
46
|
+
|
47
|
+
vcards = VCardParser::VCard.parse(data)
|
48
|
+
vcards.size.should == 1
|
49
|
+
|
50
|
+
vcards[0].version.should == "3.0"
|
51
|
+
vcards[0]['PRODID'].value.should == '-//SOGoSync 0.5.0//NONSGML SOGoSync AddressBook//EN'
|
52
|
+
vcards[0]['UID'].value.should == '20121108T134354Z-1348-27ECEFA3-2-53E3B7B2.vcf'
|
53
|
+
vcards[0]['FN'].value.should == 'Pp, Tt'
|
54
|
+
vcards[0]['N'].value.should == 'Pp;Tt'
|
55
|
+
end
|
56
|
+
|
36
57
|
should 'parse multiple cards' do
|
37
58
|
vcards = VCardParser::VCard.parse( data_file('two_vcard3.0.vcf') )
|
38
59
|
vcards.size.should == 2
|
@@ -185,6 +206,20 @@ END:VCARD
|
|
185
206
|
vcard.vcard.should == data
|
186
207
|
vcard.to_s.should == data
|
187
208
|
end
|
209
|
+
|
210
|
+
should 'generate partial vCard' do
|
211
|
+
data = data_file('vcard3.0.vcf')
|
212
|
+
vcard = VCardParser::VCard.parse(data).first
|
213
|
+
vcard.vcard.should == data
|
214
|
+
vcard.to_s(%w(VERSION UID NICKNAME EMAIL FN)).should == <<-EOS
|
215
|
+
BEGIN:VCARD
|
216
|
+
VERSION:3.0
|
217
|
+
FN:Christophe Durand
|
218
|
+
UID:11
|
219
|
+
END:VCARD
|
220
|
+
EOS
|
221
|
+
end
|
222
|
+
|
188
223
|
end
|
189
224
|
|
190
225
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcard_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A vCard parser
|
15
15
|
email:
|
@@ -20,6 +20,7 @@ extra_rdoc_files: []
|
|
20
20
|
files:
|
21
21
|
- .gitignore
|
22
22
|
- .travis.yml
|
23
|
+
- ChangeLog
|
23
24
|
- Gemfile
|
24
25
|
- Guardfile
|
25
26
|
- LICENSE
|
@@ -50,7 +51,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
51
|
version: '0'
|
51
52
|
segments:
|
52
53
|
- 0
|
53
|
-
hash:
|
54
|
+
hash: 1834945485564550677
|
54
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
56
|
none: false
|
56
57
|
requirements:
|
@@ -59,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
60
|
version: '0'
|
60
61
|
segments:
|
61
62
|
- 0
|
62
|
-
hash:
|
63
|
+
hash: 1834945485564550677
|
63
64
|
requirements: []
|
64
65
|
rubyforge_project:
|
65
66
|
rubygems_version: 1.8.24
|