brewster / vcardigan

Ruby vCard Builder/Parser
MIT License
71 stars 23 forks source link

Non-idempotent or erroneous newlines in 0.0.2 #3

Open k3rni opened 11 years ago

k3rni commented 11 years ago

Let's take a sample card from Wikipedia on vCard:

BEGIN:VCARD
VERSION:3.0
N:Gump;Forrest
FN:Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;VALUE=URL;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America
LABEL;TYPE=WORK:100 Waters Edge\nBaytown, LA 30314\nUnited States of America
ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
LABEL;TYPE=HOME:42 Plantation St.\nBaytown, LA 30314\nUnited States of America
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
REV:2008-04-24T19:52:43Z
END:VCARD

It loads fine:

1.9.3-p385 :152 > VCardigan.parse card3
 => BEGIN:VCARD
VERSION:3.0
N:Gump;Forrest;;;
FN:Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;VALUE=URL;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America
ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America

LABEL;TYPE=WORK:100 Waters Edge
LABEL;TYPE=HOME:42 Plantation St.
BAYTOWN, LA 30314:Baytown, LA 30314
BAYTOWN, LA 30314:Baytown, LA 30314
UNITED STATES OF AMERICA:United States of America
UNITED STATES OF AMERICA:United States of America
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
REV:2008-04-24T19:52:43Z
END:VCARD

(Note the extra newline between ADR and LABEL). But when we serialize it back to vcard and try loading:

1.9.3-p385 :154 > VCardigan.parse VCardigan.parse(card3).to_s
NoMethodError: undefined method `split' for nil:NilClass
    from /usr/local/rvm/gems/ruby-1.9.3-p385/gems/vcardigan-0.0.2/lib/vcardigan/property.rb:67:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p385/gems/vcardigan-0.0.2/lib/vcardigan/vcard.rb:34:in `block in parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p385/gems/vcardigan-0.0.2/lib/vcardigan/vcard.rb:33:in `each_line'
    from /usr/local/rvm/gems/ruby-1.9.3-p385/gems/vcardigan-0.0.2/lib/vcardigan/vcard.rb:33:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p385/gems/vcardigan-0.0.2/lib/vcardigan.rb:16:in `parse'
    from (irb):154
    from /usr/local/rvm/rubies/ruby-1.9.3-p385/bin/irb:16:in `<main>'

Loads fine once we remove that newline

1.9.3-p385 :156 > VCardigan.parse VCardigan.parse(card3).to_s.gsub("\n \n", "\n")
# output omitted, no exceptions raised