microformats2 2.9.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +125 -25
- data/Rakefile +0 -60
- data/lib/microformats2.rb +7 -15
- data/lib/microformats2/absolute_uri.rb +5 -1
- data/lib/microformats2/format_parser.rb +321 -46
- data/lib/microformats2/parser.rb +86 -6
- data/lib/microformats2/parser_core.rb +343 -0
- data/lib/microformats2/property_parser.rb +104 -34
- data/lib/microformats2/results/collection.rb +121 -0
- data/lib/microformats2/results/parser_result.rb +111 -0
- data/lib/microformats2/results/property_set.rb +87 -0
- data/lib/microformats2/time_property_parser.rb +161 -0
- data/lib/microformats2/version.rb +1 -1
- data/microformats2.gemspec +2 -1
- data/spec/lib/microformats2/absolute_uri_spec.rb +2 -2
- data/spec/lib/microformats2/parser_spec.rb +36 -5
- data/spec/lib/microformats2_spec.rb +5 -5
- data/spec/spec_helper.rb +0 -1
- data/vendor/tests/.gitignore +25 -0
- data/vendor/tests/LICENSE.md +36 -0
- data/vendor/tests/README.md +48 -0
- data/vendor/tests/app.js +84 -0
- data/vendor/tests/composer.json +5 -0
- data/vendor/tests/css/testsuite.css +159 -0
- data/vendor/tests/interface.js +18 -0
- data/vendor/tests/package.json +27 -0
- data/vendor/tests/tests/microformats-mixed/h-card/change-log.html +63 -0
- data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.html +14 -0
- data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.json +22 -0
- data/vendor/tests/tests/microformats-mixed/h-card/tworoots.html +1 -0
- data/vendor/tests/tests/microformats-mixed/h-card/tworoots.json +10 -0
- data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.html +16 -0
- data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.json +38 -0
- data/vendor/tests/tests/microformats-mixed/h-resume/change-log.html +68 -0
- data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.html +16 -0
- data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.json +31 -0
- data/vendor/tests/tests/microformats-v1/adr/change-log.html +63 -0
- data/vendor/tests/tests/microformats-v1/adr/simpleproperties.html +8 -0
- data/vendor/tests/tests/microformats-v1/adr/simpleproperties.json +15 -0
- data/vendor/tests/tests/microformats-v1/geo/abbrpattern.html +5 -0
- data/vendor/tests/tests/microformats-v1/geo/abbrpattern.json +11 -0
- data/vendor/tests/tests/microformats-v1/geo/change-log.1.html +78 -0
- data/vendor/tests/tests/microformats-v1/geo/change-log.html +63 -0
- data/vendor/tests/tests/microformats-v1/geo/hidden.html +10 -0
- data/vendor/tests/tests/microformats-v1/geo/hidden.json +11 -0
- data/vendor/tests/tests/microformats-v1/geo/simpleproperties.html +6 -0
- data/vendor/tests/tests/microformats-v1/geo/simpleproperties.json +11 -0
- data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.html +11 -0
- data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.json +11 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/ampm.html +41 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/ampm.json +21 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/attendees.html +13 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/attendees.json +37 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/change-log.html +68 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/combining.html +15 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/combining.json +31 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.html +7 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.json +12 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/time.html +44 -0
- data/vendor/tests/tests/microformats-v1/hcalendar/time.json +22 -0
- data/vendor/tests/tests/microformats-v1/hcard/change-log.html +68 -0
- data/vendor/tests/tests/microformats-v1/hcard/email.html +14 -0
- data/vendor/tests/tests/microformats-v1/hcard/email.json +11 -0
- data/vendor/tests/tests/microformats-v1/hcard/format.html +6 -0
- data/vendor/tests/tests/microformats-v1/hcard/format.json +11 -0
- data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.html +3 -0
- data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.json +8 -0
- data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.json +8 -0
- data/vendor/tests/tests/microformats-v1/hcard/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v1/hcard/justaname.json +8 -0
- data/vendor/tests/tests/microformats-v1/hcard/multiple.html +74 -0
- data/vendor/tests/tests/microformats-v1/hcard/multiple.json +65 -0
- data/vendor/tests/tests/microformats-v1/hcard/name.html +11 -0
- data/vendor/tests/tests/microformats-v1/hcard/name.json +15 -0
- data/vendor/tests/tests/microformats-v1/hcard/single.html +14 -0
- data/vendor/tests/tests/microformats-v1/hcard/single.json +24 -0
- data/vendor/tests/tests/microformats-v1/hentry/change-log.html +73 -0
- data/vendor/tests/tests/microformats-v1/hentry/summarycontent.html +20 -0
- data/vendor/tests/tests/microformats-v1/hentry/summarycontent.json +24 -0
- data/vendor/tests/tests/microformats-v1/hfeed/simple.html +30 -0
- data/vendor/tests/tests/microformats-v1/hfeed/simple.json +49 -0
- data/vendor/tests/tests/microformats-v1/hnews/all.html +37 -0
- data/vendor/tests/tests/microformats-v1/hnews/all.json +74 -0
- data/vendor/tests/tests/microformats-v1/hnews/change-log.html +72 -0
- data/vendor/tests/tests/microformats-v1/hnews/minimum.html +25 -0
- data/vendor/tests/tests/microformats-v1/hnews/minimum.json +48 -0
- data/vendor/tests/tests/microformats-v1/hproduct/aggregate.html +26 -0
- data/vendor/tests/tests/microformats-v1/hproduct/aggregate.json +52 -0
- data/vendor/tests/tests/microformats-v1/hproduct/change-log.html +62 -0
- data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.html +13 -0
- data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.json +33 -0
- data/vendor/tests/tests/microformats-v1/hresume/affiliation.html +12 -0
- data/vendor/tests/tests/microformats-v1/hresume/affiliation.json +25 -0
- data/vendor/tests/tests/microformats-v1/hresume/change-log.html +73 -0
- data/vendor/tests/tests/microformats-v1/hresume/contact.html +18 -0
- data/vendor/tests/tests/microformats-v1/hresume/contact.json +32 -0
- data/vendor/tests/tests/microformats-v1/hresume/education.html +13 -0
- data/vendor/tests/tests/microformats-v1/hresume/education.json +29 -0
- data/vendor/tests/tests/microformats-v1/hresume/skill.html +12 -0
- data/vendor/tests/tests/microformats-v1/hresume/skill.json +33 -0
- data/vendor/tests/tests/microformats-v1/hresume/work.html +16 -0
- data/vendor/tests/tests/microformats-v1/hresume/work.json +30 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/change-log.html +67 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.html +18 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.json +31 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.html +6 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.json +19 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.html +13 -0
- data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.json +22 -0
- data/vendor/tests/tests/microformats-v1/hreview/change-log.html +73 -0
- data/vendor/tests/tests/microformats-v1/hreview/item.html +8 -0
- data/vendor/tests/tests/microformats-v1/hreview/item.json +19 -0
- data/vendor/tests/tests/microformats-v1/hreview/vcard.html +23 -0
- data/vendor/tests/tests/microformats-v1/hreview/vcard.json +58 -0
- data/vendor/tests/tests/microformats-v1/includes/change-log.html +72 -0
- data/vendor/tests/tests/microformats-v1/includes/hcarditemref.html +16 -0
- data/vendor/tests/tests/microformats-v1/includes/hcarditemref.json +49 -0
- data/vendor/tests/tests/microformats-v1/includes/heventitemref.html +25 -0
- data/vendor/tests/tests/microformats-v1/includes/heventitemref.json +33 -0
- data/vendor/tests/tests/microformats-v1/includes/hyperlink.html +18 -0
- data/vendor/tests/tests/microformats-v1/includes/hyperlink.json +43 -0
- data/vendor/tests/tests/microformats-v1/includes/object.html +23 -0
- data/vendor/tests/tests/microformats-v1/includes/object.json +42 -0
- data/vendor/tests/tests/microformats-v1/includes/table.html +12 -0
- data/vendor/tests/tests/microformats-v1/includes/table.json +19 -0
- data/vendor/tests/tests/microformats-v2/h-adr/change-log.html +62 -0
- data/vendor/tests/tests/microformats-v2/h-adr/geo.html +10 -0
- data/vendor/tests/tests/microformats-v2/h-adr/geo.json +16 -0
- data/vendor/tests/tests/microformats-v2/h-adr/geourl.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-adr/geourl.json +13 -0
- data/vendor/tests/tests/microformats-v2/h-adr/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-adr/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-adr/lettercase.html +21 -0
- data/vendor/tests/tests/microformats-v2/h-adr/lettercase.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.html +8 -0
- data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.json +16 -0
- data/vendor/tests/tests/microformats-v2/h-as-note/note.html +56 -0
- data/vendor/tests/tests/microformats-v2/h-as-note/note.json +98 -0
- data/vendor/tests/tests/microformats-v2/h-card/baseurl.html +6 -0
- data/vendor/tests/tests/microformats-v2/h-card/baseurl.json +26 -0
- data/vendor/tests/tests/microformats-v2/h-card/change-log.html +100 -0
- data/vendor/tests/tests/microformats-v2/h-card/childimplied.html +7 -0
- data/vendor/tests/tests/microformats-v2/h-card/childimplied.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.html +10 -0
- data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.json +15 -0
- data/vendor/tests/tests/microformats-v2/h-card/hcard.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-card/hcard.json +19 -0
- data/vendor/tests/tests/microformats-v2/h-card/horghcard.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-card/horghcard.json +19 -0
- data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.html +3 -0
- data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedname.html +15 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedname.json +90 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.html +11 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.json +72 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedurl.html +5 -0
- data/vendor/tests/tests/microformats-v2/h-card/impliedurl.json +45 -0
- data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-card/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-card/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-card/nested.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-card/nested.json +18 -0
- data/vendor/tests/tests/microformats-v2/h-card/p-property.html +21 -0
- data/vendor/tests/tests/microformats-v2/h-card/p-property.json +15 -0
- data/vendor/tests/tests/microformats-v2/h-card/relativeurls.html +6 -0
- data/vendor/tests/tests/microformats-v2/h-card/relativeurls.json +29 -0
- data/vendor/tests/tests/microformats-v2/h-entry/change-log.html +90 -0
- data/vendor/tests/tests/microformats-v2/h-entry/encoding.html +3 -0
- data/vendor/tests/tests/microformats-v2/h-entry/encoding.json +14 -0
- data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.html +9 -0
- data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.json +27 -0
- data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-entry/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-entry/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.json +14 -0
- data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.html +20 -0
- data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.json +25 -0
- data/vendor/tests/tests/microformats-v2/h-entry/u-property.html +33 -0
- data/vendor/tests/tests/microformats-v2/h-entry/u-property.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.json +14 -0
- data/vendor/tests/tests/microformats-v2/h-event/ampm.html +41 -0
- data/vendor/tests/tests/microformats-v2/h-event/ampm.json +21 -0
- data/vendor/tests/tests/microformats-v2/h-event/attendees.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-event/attendees.json +37 -0
- data/vendor/tests/tests/microformats-v2/h-event/change-log.html +82 -0
- data/vendor/tests/tests/microformats-v2/h-event/combining.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-event/combining.json +25 -0
- data/vendor/tests/tests/microformats-v2/h-event/concatenate.html +8 -0
- data/vendor/tests/tests/microformats-v2/h-event/concatenate.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-event/dates.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-event/dates.json +26 -0
- data/vendor/tests/tests/microformats-v2/h-event/dt-property.html +23 -0
- data/vendor/tests/tests/microformats-v2/h-event/dt-property.json +20 -0
- data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-event/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-event/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-event/time.html +47 -0
- data/vendor/tests/tests/microformats-v2/h-event/time.json +25 -0
- data/vendor/tests/tests/microformats-v2/h-feed/implied-title.html +30 -0
- data/vendor/tests/tests/microformats-v2/h-feed/implied-title.json +23 -0
- data/vendor/tests/tests/microformats-v2/h-feed/simple.html +26 -0
- data/vendor/tests/tests/microformats-v2/h-feed/simple.json +33 -0
- data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.html +5 -0
- data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-geo/altitude.html +8 -0
- data/vendor/tests/tests/microformats-v2/h-geo/altitude.json +13 -0
- data/vendor/tests/tests/microformats-v2/h-geo/change-log.html +67 -0
- data/vendor/tests/tests/microformats-v2/h-geo/hidden.html +10 -0
- data/vendor/tests/tests/microformats-v2/h-geo/hidden.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-geo/justaname.html +3 -0
- data/vendor/tests/tests/microformats-v2/h-geo/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.html +5 -0
- data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.html +11 -0
- data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-news/all.html +35 -0
- data/vendor/tests/tests/microformats-v2/h-news/all.json +51 -0
- data/vendor/tests/tests/microformats-v2/h-news/change-log.html +78 -0
- data/vendor/tests/tests/microformats-v2/h-news/minimum.html +24 -0
- data/vendor/tests/tests/microformats-v2/h-news/minimum.json +40 -0
- data/vendor/tests/tests/microformats-v2/h-org/change-log.html +57 -0
- data/vendor/tests/tests/microformats-v2/h-org/hyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-org/hyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-org/simple.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-org/simple.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-product/aggregate.html +21 -0
- data/vendor/tests/tests/microformats-v2/h-product/aggregate.json +45 -0
- data/vendor/tests/tests/microformats-v2/h-product/change-log.html +62 -0
- data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-product/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-product/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.html +10 -0
- data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.json +26 -0
- data/vendor/tests/tests/microformats-v2/h-recipe/all.html +63 -0
- data/vendor/tests/tests/microformats-v2/h-recipe/all.json +54 -0
- data/vendor/tests/tests/microformats-v2/h-recipe/change-log.html +62 -0
- data/vendor/tests/tests/microformats-v2/h-recipe/minimum.html +7 -0
- data/vendor/tests/tests/microformats-v2/h-recipe/minimum.json +17 -0
- data/vendor/tests/tests/microformats-v2/h-resume/affiliation.html +12 -0
- data/vendor/tests/tests/microformats-v2/h-resume/affiliation.json +20 -0
- data/vendor/tests/tests/microformats-v2/h-resume/change-log.html +78 -0
- data/vendor/tests/tests/microformats-v2/h-resume/contact.html +17 -0
- data/vendor/tests/tests/microformats-v2/h-resume/contact.json +26 -0
- data/vendor/tests/tests/microformats-v2/h-resume/education.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-resume/education.json +30 -0
- data/vendor/tests/tests/microformats-v2/h-resume/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-resume/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-resume/skill.html +12 -0
- data/vendor/tests/tests/microformats-v2/h-resume/skill.json +12 -0
- data/vendor/tests/tests/microformats-v2/h-resume/work.html +16 -0
- data/vendor/tests/tests/microformats-v2/h-resume/work.json +31 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/change-log.html +78 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.html +13 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.json +23 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.html +8 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.json +19 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.html +18 -0
- data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.json +26 -0
- data/vendor/tests/tests/microformats-v2/h-review/change-log.html +84 -0
- data/vendor/tests/tests/microformats-v2/h-review/hyperlink.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-review/hyperlink.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-review/implieditem.html +4 -0
- data/vendor/tests/tests/microformats-v2/h-review/implieditem.json +19 -0
- data/vendor/tests/tests/microformats-v2/h-review/item.html +8 -0
- data/vendor/tests/tests/microformats-v2/h-review/item.json +20 -0
- data/vendor/tests/tests/microformats-v2/h-review/justaname.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-review/justaname.json +10 -0
- data/vendor/tests/tests/microformats-v2/h-review/photo.html +1 -0
- data/vendor/tests/tests/microformats-v2/h-review/photo.json +11 -0
- data/vendor/tests/tests/microformats-v2/h-review/vcard.html +23 -0
- data/vendor/tests/tests/microformats-v2/h-review/vcard.json +48 -0
- data/vendor/tests/tests/microformats-v2/rel/change-log.html +67 -0
- data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.html +10 -0
- data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.json +75 -0
- data/vendor/tests/tests/microformats-v2/rel/license.html +1 -0
- data/vendor/tests/tests/microformats-v2/rel/license.json +12 -0
- data/vendor/tests/tests/microformats-v2/rel/nofollow.html +1 -0
- data/vendor/tests/tests/microformats-v2/rel/nofollow.json +12 -0
- data/vendor/tests/tests/microformats-v2/rel/rel-urls.html +8 -0
- data/vendor/tests/tests/microformats-v2/rel/rel-urls.json +33 -0
- data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.html +4 -0
- data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.json +20 -0
- data/vendor/tests/tests/microformats-v2/rel/xfn-all.html +19 -0
- data/vendor/tests/tests/microformats-v2/rel/xfn-all.json +92 -0
- data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.html +10 -0
- data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.json +40 -0
- metadata +285 -37
- data/lib/microformats2/collection.rb +0 -136
- data/lib/microformats2/format.rb +0 -151
- data/lib/microformats2/implied_property/foundation.rb +0 -59
- data/lib/microformats2/implied_property/name.rb +0 -34
- data/lib/microformats2/implied_property/photo.rb +0 -28
- data/lib/microformats2/implied_property/url.rb +0 -24
- data/lib/microformats2/property.rb +0 -21
- data/lib/microformats2/property/date_time.rb +0 -28
- data/lib/microformats2/property/embedded.rb +0 -9
- data/lib/microformats2/property/foundation.rb +0 -143
- data/lib/microformats2/property/text.rb +0 -16
- data/lib/microformats2/property/url.rb +0 -26
- data/spec/lib/microformats2/collection_spec.rb +0 -252
- data/spec/lib/microformats2/implied_property/name_spec.rb +0 -31
- data/spec/lib/microformats2/implied_property/photo_spec.rb +0 -31
- data/spec/lib/microformats2/implied_property/url_spec.rb +0 -58
@@ -1,136 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
class Collection
|
3
|
-
attr_reader :items
|
4
|
-
|
5
|
-
def initialize(element, url = nil)
|
6
|
-
@element = element
|
7
|
-
|
8
|
-
@base = nil
|
9
|
-
if url != nil
|
10
|
-
@base = url
|
11
|
-
end
|
12
|
-
if @element.search("base").size > 0
|
13
|
-
@base = @element.search("base")[0].attribute("href")
|
14
|
-
end
|
15
|
-
|
16
|
-
@format_names = []
|
17
|
-
@rels = {}
|
18
|
-
@alternates = []
|
19
|
-
end
|
20
|
-
|
21
|
-
def parse
|
22
|
-
items
|
23
|
-
parse_rels
|
24
|
-
self
|
25
|
-
end
|
26
|
-
|
27
|
-
def items
|
28
|
-
@items ||= FormatParser.parse(@element, @base).each do |format|
|
29
|
-
save_format_name(format.method_name)
|
30
|
-
define_method(format.method_name)
|
31
|
-
set_value(format.method_name, format)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def all
|
36
|
-
warn "[DEPRECATION] `all` is deprecated and will be removed in the next release. Please use `items` instead."
|
37
|
-
items
|
38
|
-
end
|
39
|
-
|
40
|
-
def first
|
41
|
-
warn "[DEPRECATION] `first` is deprecated and will be removed in the next release. Please use `items.first` instead."
|
42
|
-
items.first
|
43
|
-
end
|
44
|
-
|
45
|
-
def last
|
46
|
-
warn "[DEPRECATION] `last` is deprecated and will be removed in the next release. Please use `items.last` instead."
|
47
|
-
items.last
|
48
|
-
end
|
49
|
-
|
50
|
-
def to_hash
|
51
|
-
hash = { items: [], rels: @rels }
|
52
|
-
items.each do |format|
|
53
|
-
hash[:items] << format.to_hash
|
54
|
-
end
|
55
|
-
hash[:alternates] = @alternates unless @alternates.nil? || @alternates.empty?
|
56
|
-
|
57
|
-
hash
|
58
|
-
end
|
59
|
-
|
60
|
-
def to_json
|
61
|
-
to_hash.to_json
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def save_format_name(format_name)
|
67
|
-
unless @format_names.include?(format_name)
|
68
|
-
@format_names << format_name
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def define_method(mn)
|
73
|
-
unless respond_to?(mn)
|
74
|
-
#self.class.class_eval { attr_accessor mn }
|
75
|
-
self.class.class_eval("
|
76
|
-
def #{mn}(arg = nil);
|
77
|
-
if arg == :all
|
78
|
-
@#{mn}_array
|
79
|
-
else
|
80
|
-
@#{mn}
|
81
|
-
end
|
82
|
-
end")
|
83
|
-
self.class.class_eval("def #{mn}=(x); @#{mn} = x; end")
|
84
|
-
end
|
85
|
-
unless respond_to?(mn.pluralize)
|
86
|
-
#self.class.class_eval { attr_accessor mn.pluralize }
|
87
|
-
self.class.class_eval("def #{mn.pluralize};
|
88
|
-
warn \"[DEPRECATION] pluralized accessors are deprecated and will be removed in the next release. Please use `#{mn}(:all)` instead.\"
|
89
|
-
return @#{mn}_array; end")
|
90
|
-
self.class.class_eval("def #{mn.pluralize}=(x); @#{mn}_array = x; end")
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def set_value(mn, value)
|
96
|
-
unless current = send(mn)
|
97
|
-
send("#{mn}=", value)
|
98
|
-
end
|
99
|
-
if current = send(mn, :all)
|
100
|
-
current = [current] if mn == mn.pluralize #otherwise h-news fails completely
|
101
|
-
current << value
|
102
|
-
else
|
103
|
-
send("#{mn.pluralize}=", [value])
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def parse_rels
|
108
|
-
@element.search("*[@rel]").each do |rel|
|
109
|
-
rel_values = rel.attribute("rel").text.split(" ")
|
110
|
-
|
111
|
-
if rel_values.member?("alternate")
|
112
|
-
alternate_inst = {}
|
113
|
-
alternate_inst["url"] = Microformats2::AbsoluteUri.new(@base, rel.attribute("href").text).absolutize
|
114
|
-
alternate_inst["rel"] = (rel_values - ["alternate"]).join(" ")
|
115
|
-
unless rel.attribute("media").nil?
|
116
|
-
alternate_inst["media"] = rel.attribute("media").text
|
117
|
-
end
|
118
|
-
unless rel.attribute("hreflang").nil?
|
119
|
-
alternate_inst["hreflang"] = rel.attribute("hreflang").text
|
120
|
-
end
|
121
|
-
unless rel.attribute("type").nil?
|
122
|
-
alternate_inst["type"] = rel.attribute("type").text
|
123
|
-
end
|
124
|
-
@alternates << alternate_inst
|
125
|
-
else
|
126
|
-
rel_values.each do |rel_value|
|
127
|
-
@rels[rel_value] = [] unless @rels.has_key?(rel_value)
|
128
|
-
unless rel.attribute("href").nil?
|
129
|
-
@rels[rel_value] << Microformats2::AbsoluteUri.new(@base, rel.attribute("href").text).absolutize
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
data/lib/microformats2/format.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
class Format
|
3
|
-
CLASS_REG_EXP = /^(h-)/
|
4
|
-
|
5
|
-
attr_reader :method_name
|
6
|
-
|
7
|
-
def initialize(element, base)
|
8
|
-
@element = element
|
9
|
-
@base = base
|
10
|
-
@method_name = to_method_name(type.first)
|
11
|
-
@property_names = []
|
12
|
-
@child_formats = []
|
13
|
-
@child_formats_parsed = false
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse
|
17
|
-
type
|
18
|
-
properties
|
19
|
-
self
|
20
|
-
end
|
21
|
-
|
22
|
-
def children
|
23
|
-
unless @child_formats_parsed
|
24
|
-
parse_child_formats
|
25
|
-
@child_formats_parsed = true
|
26
|
-
end
|
27
|
-
@child_formats
|
28
|
-
end
|
29
|
-
|
30
|
-
def format_types
|
31
|
-
warn "[DEPRECATION] `format_types` is deprecated and will be removed in the next release. Please use `type` instead."
|
32
|
-
type
|
33
|
-
end
|
34
|
-
|
35
|
-
def type
|
36
|
-
@type ||= @element.attribute("class").to_s.split.select do |html_class|
|
37
|
-
html_class =~ Format::CLASS_REG_EXP
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def properties
|
42
|
-
@properties ||= parse_properties.concat parse_implied_properties
|
43
|
-
end
|
44
|
-
|
45
|
-
def parse_properties
|
46
|
-
PropertyParser.parse(@element.children, @base).each do |property|
|
47
|
-
assign_property(property)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def parse_child_formats
|
52
|
-
FormatParser.parse(@element.children, @base, true).each do |child_format|
|
53
|
-
@child_formats.push(child_format)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def add_property(property_class, value)
|
58
|
-
property = Property.new(nil, property_class, value, @base)
|
59
|
-
assign_property(property)
|
60
|
-
end
|
61
|
-
|
62
|
-
def parse_implied_properties
|
63
|
-
ip = []
|
64
|
-
ip << ImpliedProperty::Name.new(@element, @base).parse unless property_present?(:name)
|
65
|
-
ip << ImpliedProperty::Url.new(@element, @base).parse unless property_present?(:url)
|
66
|
-
ip << ImpliedProperty::Photo.new(@element, @base).parse unless property_present?(:photo)
|
67
|
-
ip.compact.each do |property|
|
68
|
-
save_property_name(property.method_name)
|
69
|
-
define_method(property.method_name)
|
70
|
-
set_value(property.method_name, property)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def property_present?(property)
|
75
|
-
!! respond_to?(property) && send(property)
|
76
|
-
end
|
77
|
-
|
78
|
-
def to_hash
|
79
|
-
hash = { type: type, properties: {} }
|
80
|
-
@property_names.each do |method_name|
|
81
|
-
hash[:properties][method_name.to_sym] = send(method_name, :all).map(&:to_hash)
|
82
|
-
end
|
83
|
-
unless children.empty?
|
84
|
-
hash[:children] = []
|
85
|
-
children.each do |child_format|
|
86
|
-
hash[:children].push(child_format.to_hash)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
hash
|
90
|
-
end
|
91
|
-
|
92
|
-
def to_json
|
93
|
-
to_hash.to_json
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def assign_property(property)
|
99
|
-
save_property_name(property.method_name)
|
100
|
-
define_method(property.method_name)
|
101
|
-
set_value(property.method_name, property)
|
102
|
-
end
|
103
|
-
|
104
|
-
def to_method_name(html_class)
|
105
|
-
# p-class-name -> class_name
|
106
|
-
mn = html_class.downcase.split("-")[1..-1].join("_")
|
107
|
-
# avoid overriding Object#class
|
108
|
-
mn = "klass" if mn == "class"
|
109
|
-
mn
|
110
|
-
end
|
111
|
-
|
112
|
-
def save_property_name(property_name)
|
113
|
-
unless @property_names.include?(property_name)
|
114
|
-
@property_names << property_name
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def define_method(mn)
|
119
|
-
unless respond_to?(mn)
|
120
|
-
#self.singleton_class.class_eval { attr_accessor mn }
|
121
|
-
self.singleton_class.class_eval("
|
122
|
-
def #{mn}(arg = nil);
|
123
|
-
if arg == :all
|
124
|
-
@#{mn}_array
|
125
|
-
else
|
126
|
-
@#{mn}
|
127
|
-
end
|
128
|
-
end")
|
129
|
-
self.singleton_class.class_eval("def #{mn}=(x); @#{mn} = x; end")
|
130
|
-
end
|
131
|
-
unless respond_to?(mn.pluralize)
|
132
|
-
#self.singleton_class.class_eval { attr_accessor mn.pluralize }
|
133
|
-
self.singleton_class.class_eval("def #{mn.pluralize};
|
134
|
-
warn \"[DEPRECATION] pluralized accessors are deprecated and will be removed in the next release. Please use `#{mn}(:all)` instead.\"
|
135
|
-
return @#{mn}_array; end")
|
136
|
-
self.singleton_class.class_eval("def #{mn.pluralize}=(x); @#{mn}_array = x; end")
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def set_value(mn, value)
|
141
|
-
unless current = send(mn)
|
142
|
-
send("#{mn}=", value)
|
143
|
-
end
|
144
|
-
if current = send(mn,:all)
|
145
|
-
current << value if current.respond_to? :<<
|
146
|
-
else
|
147
|
-
send("#{mn.pluralize}=", [value])
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
module ImpliedProperty
|
3
|
-
class Foundation
|
4
|
-
|
5
|
-
def initialize(element, base=nil)
|
6
|
-
@element = element
|
7
|
-
@base = base
|
8
|
-
end
|
9
|
-
|
10
|
-
def parse
|
11
|
-
self if to_s
|
12
|
-
end
|
13
|
-
|
14
|
-
def method_name
|
15
|
-
"foundation"
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_s
|
19
|
-
@to_s ||= element_value || selector_value
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_hash
|
23
|
-
to_s
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_json
|
27
|
-
to_hash.to_json
|
28
|
-
end
|
29
|
-
|
30
|
-
protected
|
31
|
-
|
32
|
-
def element_value
|
33
|
-
name_map.each_pair do |elname, attr|
|
34
|
-
if elname == @element.name && @element.attribute(attr)
|
35
|
-
return @element.attribute(attr).to_s
|
36
|
-
end
|
37
|
-
end
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def name_map
|
42
|
-
{}
|
43
|
-
end
|
44
|
-
|
45
|
-
def selector_value
|
46
|
-
selector_map.each_pair do |sel, attr|
|
47
|
-
if selected_element = @element.css(sel).first
|
48
|
-
return selected_element.attribute(attr).to_s
|
49
|
-
end
|
50
|
-
end
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
|
54
|
-
def selector_map
|
55
|
-
{}
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
module ImpliedProperty
|
3
|
-
class Name < Foundation
|
4
|
-
|
5
|
-
def method_name
|
6
|
-
"name"
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
@to_s ||= element_value || selector_value || text_value
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
def name_map
|
16
|
-
{ "img" => "alt",
|
17
|
-
"abbr" => "title" }
|
18
|
-
end
|
19
|
-
|
20
|
-
def selector_map
|
21
|
-
{ ">img[alt]:only-of-type" => "alt",
|
22
|
-
">abbr[title]:only-of-type" => "title",
|
23
|
-
">:only-of-type>img[alt]:only-of-type" => "alt",
|
24
|
-
">:only-of-type>abbr[title]:only-of-type" => "title" }
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def text_value
|
30
|
-
@element.inner_text.gsub(/\n+/, " ").gsub(/\s+/, " ").strip
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
module ImpliedProperty
|
3
|
-
class Photo < Foundation
|
4
|
-
|
5
|
-
def method_name
|
6
|
-
"photo"
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
@to_s = Microformats2::AbsoluteUri.new(@base, super.to_s).absolutize
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
def name_map
|
16
|
-
{ "img" => "src",
|
17
|
-
"object" => "data" }
|
18
|
-
end
|
19
|
-
|
20
|
-
def selector_map
|
21
|
-
{ ">img[src]:only-of-type" => "src",
|
22
|
-
">object[data]:only-of-type" => "data",
|
23
|
-
">:only-child>img[src]:only-of-type" => "src",
|
24
|
-
">:only-child>object[data]:only-of-type" => "data" }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
module ImpliedProperty
|
3
|
-
class Url < Foundation
|
4
|
-
|
5
|
-
def method_name
|
6
|
-
"url"
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
@to_s = Microformats2::AbsoluteUri.new(@base, super.to_s).absolutize
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
def name_map
|
16
|
-
{ "a" => "href" }
|
17
|
-
end
|
18
|
-
|
19
|
-
def selector_map
|
20
|
-
{ ">a[href]:only-of-type" => "href" }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Microformats2
|
2
|
-
module Property
|
3
|
-
CLASS_REG_EXP = /^(p-|u-|dt-|e-)/
|
4
|
-
PREFIX_CLASS_MAP = {
|
5
|
-
"p" => Text,
|
6
|
-
"u" => Url,
|
7
|
-
"dt" => DateTime,
|
8
|
-
"e" => Embedded }
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def new(element, property_class, value=nil, base=nil)
|
12
|
-
# p-class-name -> p
|
13
|
-
prefix = property_class.split("-").first
|
14
|
-
# find ruby class for kind of property
|
15
|
-
klass = PREFIX_CLASS_MAP[prefix]
|
16
|
-
raise InvalidPropertyPrefix unless klass
|
17
|
-
klass.new(element, property_class, value, base)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|