microformats2 2.9.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +125 -25
  3. data/Rakefile +0 -60
  4. data/lib/microformats2.rb +7 -15
  5. data/lib/microformats2/absolute_uri.rb +5 -1
  6. data/lib/microformats2/format_parser.rb +321 -46
  7. data/lib/microformats2/parser.rb +86 -6
  8. data/lib/microformats2/parser_core.rb +343 -0
  9. data/lib/microformats2/property_parser.rb +104 -34
  10. data/lib/microformats2/results/collection.rb +121 -0
  11. data/lib/microformats2/results/parser_result.rb +111 -0
  12. data/lib/microformats2/results/property_set.rb +87 -0
  13. data/lib/microformats2/time_property_parser.rb +161 -0
  14. data/lib/microformats2/version.rb +1 -1
  15. data/microformats2.gemspec +2 -1
  16. data/spec/lib/microformats2/absolute_uri_spec.rb +2 -2
  17. data/spec/lib/microformats2/parser_spec.rb +36 -5
  18. data/spec/lib/microformats2_spec.rb +5 -5
  19. data/spec/spec_helper.rb +0 -1
  20. data/vendor/tests/.gitignore +25 -0
  21. data/vendor/tests/LICENSE.md +36 -0
  22. data/vendor/tests/README.md +48 -0
  23. data/vendor/tests/app.js +84 -0
  24. data/vendor/tests/composer.json +5 -0
  25. data/vendor/tests/css/testsuite.css +159 -0
  26. data/vendor/tests/interface.js +18 -0
  27. data/vendor/tests/package.json +27 -0
  28. data/vendor/tests/tests/microformats-mixed/h-card/change-log.html +63 -0
  29. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.html +14 -0
  30. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.json +22 -0
  31. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.html +1 -0
  32. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.json +10 -0
  33. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.html +16 -0
  34. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.json +38 -0
  35. data/vendor/tests/tests/microformats-mixed/h-resume/change-log.html +68 -0
  36. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.html +16 -0
  37. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.json +31 -0
  38. data/vendor/tests/tests/microformats-v1/adr/change-log.html +63 -0
  39. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.html +8 -0
  40. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.json +15 -0
  41. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.html +5 -0
  42. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.json +11 -0
  43. data/vendor/tests/tests/microformats-v1/geo/change-log.1.html +78 -0
  44. data/vendor/tests/tests/microformats-v1/geo/change-log.html +63 -0
  45. data/vendor/tests/tests/microformats-v1/geo/hidden.html +10 -0
  46. data/vendor/tests/tests/microformats-v1/geo/hidden.json +11 -0
  47. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.html +6 -0
  48. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.json +11 -0
  49. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.html +11 -0
  50. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.json +11 -0
  51. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.html +41 -0
  52. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.json +21 -0
  53. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.html +13 -0
  54. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.json +37 -0
  55. data/vendor/tests/tests/microformats-v1/hcalendar/change-log.html +68 -0
  56. data/vendor/tests/tests/microformats-v1/hcalendar/combining.html +15 -0
  57. data/vendor/tests/tests/microformats-v1/hcalendar/combining.json +31 -0
  58. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.html +7 -0
  59. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.json +12 -0
  60. data/vendor/tests/tests/microformats-v1/hcalendar/time.html +44 -0
  61. data/vendor/tests/tests/microformats-v1/hcalendar/time.json +22 -0
  62. data/vendor/tests/tests/microformats-v1/hcard/change-log.html +68 -0
  63. data/vendor/tests/tests/microformats-v1/hcard/email.html +14 -0
  64. data/vendor/tests/tests/microformats-v1/hcard/email.json +11 -0
  65. data/vendor/tests/tests/microformats-v1/hcard/format.html +6 -0
  66. data/vendor/tests/tests/microformats-v1/hcard/format.json +11 -0
  67. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.html +3 -0
  68. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.json +8 -0
  69. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.html +1 -0
  70. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.json +8 -0
  71. data/vendor/tests/tests/microformats-v1/hcard/justaname.html +1 -0
  72. data/vendor/tests/tests/microformats-v1/hcard/justaname.json +8 -0
  73. data/vendor/tests/tests/microformats-v1/hcard/multiple.html +74 -0
  74. data/vendor/tests/tests/microformats-v1/hcard/multiple.json +65 -0
  75. data/vendor/tests/tests/microformats-v1/hcard/name.html +11 -0
  76. data/vendor/tests/tests/microformats-v1/hcard/name.json +15 -0
  77. data/vendor/tests/tests/microformats-v1/hcard/single.html +14 -0
  78. data/vendor/tests/tests/microformats-v1/hcard/single.json +24 -0
  79. data/vendor/tests/tests/microformats-v1/hentry/change-log.html +73 -0
  80. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.html +20 -0
  81. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.json +24 -0
  82. data/vendor/tests/tests/microformats-v1/hfeed/simple.html +30 -0
  83. data/vendor/tests/tests/microformats-v1/hfeed/simple.json +49 -0
  84. data/vendor/tests/tests/microformats-v1/hnews/all.html +37 -0
  85. data/vendor/tests/tests/microformats-v1/hnews/all.json +74 -0
  86. data/vendor/tests/tests/microformats-v1/hnews/change-log.html +72 -0
  87. data/vendor/tests/tests/microformats-v1/hnews/minimum.html +25 -0
  88. data/vendor/tests/tests/microformats-v1/hnews/minimum.json +48 -0
  89. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.html +26 -0
  90. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.json +52 -0
  91. data/vendor/tests/tests/microformats-v1/hproduct/change-log.html +62 -0
  92. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.html +13 -0
  93. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.json +33 -0
  94. data/vendor/tests/tests/microformats-v1/hresume/affiliation.html +12 -0
  95. data/vendor/tests/tests/microformats-v1/hresume/affiliation.json +25 -0
  96. data/vendor/tests/tests/microformats-v1/hresume/change-log.html +73 -0
  97. data/vendor/tests/tests/microformats-v1/hresume/contact.html +18 -0
  98. data/vendor/tests/tests/microformats-v1/hresume/contact.json +32 -0
  99. data/vendor/tests/tests/microformats-v1/hresume/education.html +13 -0
  100. data/vendor/tests/tests/microformats-v1/hresume/education.json +29 -0
  101. data/vendor/tests/tests/microformats-v1/hresume/skill.html +12 -0
  102. data/vendor/tests/tests/microformats-v1/hresume/skill.json +33 -0
  103. data/vendor/tests/tests/microformats-v1/hresume/work.html +16 -0
  104. data/vendor/tests/tests/microformats-v1/hresume/work.json +30 -0
  105. data/vendor/tests/tests/microformats-v1/hreview-aggregate/change-log.html +67 -0
  106. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.html +18 -0
  107. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.json +31 -0
  108. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.html +6 -0
  109. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.json +19 -0
  110. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.html +13 -0
  111. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.json +22 -0
  112. data/vendor/tests/tests/microformats-v1/hreview/change-log.html +73 -0
  113. data/vendor/tests/tests/microformats-v1/hreview/item.html +8 -0
  114. data/vendor/tests/tests/microformats-v1/hreview/item.json +19 -0
  115. data/vendor/tests/tests/microformats-v1/hreview/vcard.html +23 -0
  116. data/vendor/tests/tests/microformats-v1/hreview/vcard.json +58 -0
  117. data/vendor/tests/tests/microformats-v1/includes/change-log.html +72 -0
  118. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.html +16 -0
  119. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.json +49 -0
  120. data/vendor/tests/tests/microformats-v1/includes/heventitemref.html +25 -0
  121. data/vendor/tests/tests/microformats-v1/includes/heventitemref.json +33 -0
  122. data/vendor/tests/tests/microformats-v1/includes/hyperlink.html +18 -0
  123. data/vendor/tests/tests/microformats-v1/includes/hyperlink.json +43 -0
  124. data/vendor/tests/tests/microformats-v1/includes/object.html +23 -0
  125. data/vendor/tests/tests/microformats-v1/includes/object.json +42 -0
  126. data/vendor/tests/tests/microformats-v1/includes/table.html +12 -0
  127. data/vendor/tests/tests/microformats-v1/includes/table.json +19 -0
  128. data/vendor/tests/tests/microformats-v2/h-adr/change-log.html +62 -0
  129. data/vendor/tests/tests/microformats-v2/h-adr/geo.html +10 -0
  130. data/vendor/tests/tests/microformats-v2/h-adr/geo.json +16 -0
  131. data/vendor/tests/tests/microformats-v2/h-adr/geourl.html +4 -0
  132. data/vendor/tests/tests/microformats-v2/h-adr/geourl.json +13 -0
  133. data/vendor/tests/tests/microformats-v2/h-adr/justaname.html +1 -0
  134. data/vendor/tests/tests/microformats-v2/h-adr/justaname.json +10 -0
  135. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.html +21 -0
  136. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.json +12 -0
  137. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.html +8 -0
  138. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.json +16 -0
  139. data/vendor/tests/tests/microformats-v2/h-as-note/note.html +56 -0
  140. data/vendor/tests/tests/microformats-v2/h-as-note/note.json +98 -0
  141. data/vendor/tests/tests/microformats-v2/h-card/baseurl.html +6 -0
  142. data/vendor/tests/tests/microformats-v2/h-card/baseurl.json +26 -0
  143. data/vendor/tests/tests/microformats-v2/h-card/change-log.html +100 -0
  144. data/vendor/tests/tests/microformats-v2/h-card/childimplied.html +7 -0
  145. data/vendor/tests/tests/microformats-v2/h-card/childimplied.json +12 -0
  146. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.html +10 -0
  147. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.json +15 -0
  148. data/vendor/tests/tests/microformats-v2/h-card/hcard.html +4 -0
  149. data/vendor/tests/tests/microformats-v2/h-card/hcard.json +19 -0
  150. data/vendor/tests/tests/microformats-v2/h-card/horghcard.html +4 -0
  151. data/vendor/tests/tests/microformats-v2/h-card/horghcard.json +19 -0
  152. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.html +3 -0
  153. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.json +12 -0
  154. data/vendor/tests/tests/microformats-v2/h-card/impliedname.html +15 -0
  155. data/vendor/tests/tests/microformats-v2/h-card/impliedname.json +90 -0
  156. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.html +11 -0
  157. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.json +72 -0
  158. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.html +5 -0
  159. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.json +45 -0
  160. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.html +1 -0
  161. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.json +11 -0
  162. data/vendor/tests/tests/microformats-v2/h-card/justaname.html +1 -0
  163. data/vendor/tests/tests/microformats-v2/h-card/justaname.json +10 -0
  164. data/vendor/tests/tests/microformats-v2/h-card/nested.html +4 -0
  165. data/vendor/tests/tests/microformats-v2/h-card/nested.json +18 -0
  166. data/vendor/tests/tests/microformats-v2/h-card/p-property.html +21 -0
  167. data/vendor/tests/tests/microformats-v2/h-card/p-property.json +15 -0
  168. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.html +6 -0
  169. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.json +29 -0
  170. data/vendor/tests/tests/microformats-v2/h-entry/change-log.html +90 -0
  171. data/vendor/tests/tests/microformats-v2/h-entry/encoding.html +3 -0
  172. data/vendor/tests/tests/microformats-v2/h-entry/encoding.json +14 -0
  173. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.html +9 -0
  174. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.json +27 -0
  175. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.html +1 -0
  176. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.json +11 -0
  177. data/vendor/tests/tests/microformats-v2/h-entry/justaname.html +1 -0
  178. data/vendor/tests/tests/microformats-v2/h-entry/justaname.json +10 -0
  179. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.html +4 -0
  180. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.json +14 -0
  181. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.html +20 -0
  182. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.json +25 -0
  183. data/vendor/tests/tests/microformats-v2/h-entry/u-property.html +33 -0
  184. data/vendor/tests/tests/microformats-v2/h-entry/u-property.json +12 -0
  185. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.html +13 -0
  186. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.json +14 -0
  187. data/vendor/tests/tests/microformats-v2/h-event/ampm.html +41 -0
  188. data/vendor/tests/tests/microformats-v2/h-event/ampm.json +21 -0
  189. data/vendor/tests/tests/microformats-v2/h-event/attendees.html +13 -0
  190. data/vendor/tests/tests/microformats-v2/h-event/attendees.json +37 -0
  191. data/vendor/tests/tests/microformats-v2/h-event/change-log.html +82 -0
  192. data/vendor/tests/tests/microformats-v2/h-event/combining.html +13 -0
  193. data/vendor/tests/tests/microformats-v2/h-event/combining.json +25 -0
  194. data/vendor/tests/tests/microformats-v2/h-event/concatenate.html +8 -0
  195. data/vendor/tests/tests/microformats-v2/h-event/concatenate.json +12 -0
  196. data/vendor/tests/tests/microformats-v2/h-event/dates.html +13 -0
  197. data/vendor/tests/tests/microformats-v2/h-event/dates.json +26 -0
  198. data/vendor/tests/tests/microformats-v2/h-event/dt-property.html +23 -0
  199. data/vendor/tests/tests/microformats-v2/h-event/dt-property.json +20 -0
  200. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.html +1 -0
  201. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.json +11 -0
  202. data/vendor/tests/tests/microformats-v2/h-event/justaname.html +1 -0
  203. data/vendor/tests/tests/microformats-v2/h-event/justaname.json +10 -0
  204. data/vendor/tests/tests/microformats-v2/h-event/time.html +47 -0
  205. data/vendor/tests/tests/microformats-v2/h-event/time.json +25 -0
  206. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.html +30 -0
  207. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.json +23 -0
  208. data/vendor/tests/tests/microformats-v2/h-feed/simple.html +26 -0
  209. data/vendor/tests/tests/microformats-v2/h-feed/simple.json +33 -0
  210. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.html +5 -0
  211. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.json +12 -0
  212. data/vendor/tests/tests/microformats-v2/h-geo/altitude.html +8 -0
  213. data/vendor/tests/tests/microformats-v2/h-geo/altitude.json +13 -0
  214. data/vendor/tests/tests/microformats-v2/h-geo/change-log.html +67 -0
  215. data/vendor/tests/tests/microformats-v2/h-geo/hidden.html +10 -0
  216. data/vendor/tests/tests/microformats-v2/h-geo/hidden.json +12 -0
  217. data/vendor/tests/tests/microformats-v2/h-geo/justaname.html +3 -0
  218. data/vendor/tests/tests/microformats-v2/h-geo/justaname.json +10 -0
  219. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.html +5 -0
  220. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.json +12 -0
  221. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.html +11 -0
  222. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.json +12 -0
  223. data/vendor/tests/tests/microformats-v2/h-news/all.html +35 -0
  224. data/vendor/tests/tests/microformats-v2/h-news/all.json +51 -0
  225. data/vendor/tests/tests/microformats-v2/h-news/change-log.html +78 -0
  226. data/vendor/tests/tests/microformats-v2/h-news/minimum.html +24 -0
  227. data/vendor/tests/tests/microformats-v2/h-news/minimum.json +40 -0
  228. data/vendor/tests/tests/microformats-v2/h-org/change-log.html +57 -0
  229. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.html +1 -0
  230. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.json +11 -0
  231. data/vendor/tests/tests/microformats-v2/h-org/simple.html +1 -0
  232. data/vendor/tests/tests/microformats-v2/h-org/simple.json +10 -0
  233. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.html +4 -0
  234. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.json +12 -0
  235. data/vendor/tests/tests/microformats-v2/h-product/aggregate.html +21 -0
  236. data/vendor/tests/tests/microformats-v2/h-product/aggregate.json +45 -0
  237. data/vendor/tests/tests/microformats-v2/h-product/change-log.html +62 -0
  238. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.html +1 -0
  239. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.json +11 -0
  240. data/vendor/tests/tests/microformats-v2/h-product/justaname.html +1 -0
  241. data/vendor/tests/tests/microformats-v2/h-product/justaname.json +10 -0
  242. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.html +10 -0
  243. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.json +26 -0
  244. data/vendor/tests/tests/microformats-v2/h-recipe/all.html +63 -0
  245. data/vendor/tests/tests/microformats-v2/h-recipe/all.json +54 -0
  246. data/vendor/tests/tests/microformats-v2/h-recipe/change-log.html +62 -0
  247. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.html +7 -0
  248. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.json +17 -0
  249. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.html +12 -0
  250. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.json +20 -0
  251. data/vendor/tests/tests/microformats-v2/h-resume/change-log.html +78 -0
  252. data/vendor/tests/tests/microformats-v2/h-resume/contact.html +17 -0
  253. data/vendor/tests/tests/microformats-v2/h-resume/contact.json +26 -0
  254. data/vendor/tests/tests/microformats-v2/h-resume/education.html +13 -0
  255. data/vendor/tests/tests/microformats-v2/h-resume/education.json +30 -0
  256. data/vendor/tests/tests/microformats-v2/h-resume/justaname.html +1 -0
  257. data/vendor/tests/tests/microformats-v2/h-resume/justaname.json +10 -0
  258. data/vendor/tests/tests/microformats-v2/h-resume/skill.html +12 -0
  259. data/vendor/tests/tests/microformats-v2/h-resume/skill.json +12 -0
  260. data/vendor/tests/tests/microformats-v2/h-resume/work.html +16 -0
  261. data/vendor/tests/tests/microformats-v2/h-resume/work.json +31 -0
  262. data/vendor/tests/tests/microformats-v2/h-review-aggregate/change-log.html +78 -0
  263. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.html +13 -0
  264. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.json +23 -0
  265. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.html +8 -0
  266. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.json +19 -0
  267. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.html +18 -0
  268. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.json +26 -0
  269. data/vendor/tests/tests/microformats-v2/h-review/change-log.html +84 -0
  270. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.html +1 -0
  271. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.json +11 -0
  272. data/vendor/tests/tests/microformats-v2/h-review/implieditem.html +4 -0
  273. data/vendor/tests/tests/microformats-v2/h-review/implieditem.json +19 -0
  274. data/vendor/tests/tests/microformats-v2/h-review/item.html +8 -0
  275. data/vendor/tests/tests/microformats-v2/h-review/item.json +20 -0
  276. data/vendor/tests/tests/microformats-v2/h-review/justaname.html +1 -0
  277. data/vendor/tests/tests/microformats-v2/h-review/justaname.json +10 -0
  278. data/vendor/tests/tests/microformats-v2/h-review/photo.html +1 -0
  279. data/vendor/tests/tests/microformats-v2/h-review/photo.json +11 -0
  280. data/vendor/tests/tests/microformats-v2/h-review/vcard.html +23 -0
  281. data/vendor/tests/tests/microformats-v2/h-review/vcard.json +48 -0
  282. data/vendor/tests/tests/microformats-v2/rel/change-log.html +67 -0
  283. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.html +10 -0
  284. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.json +75 -0
  285. data/vendor/tests/tests/microformats-v2/rel/license.html +1 -0
  286. data/vendor/tests/tests/microformats-v2/rel/license.json +12 -0
  287. data/vendor/tests/tests/microformats-v2/rel/nofollow.html +1 -0
  288. data/vendor/tests/tests/microformats-v2/rel/nofollow.json +12 -0
  289. data/vendor/tests/tests/microformats-v2/rel/rel-urls.html +8 -0
  290. data/vendor/tests/tests/microformats-v2/rel/rel-urls.json +33 -0
  291. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.html +4 -0
  292. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.json +20 -0
  293. data/vendor/tests/tests/microformats-v2/rel/xfn-all.html +19 -0
  294. data/vendor/tests/tests/microformats-v2/rel/xfn-all.json +92 -0
  295. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.html +10 -0
  296. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.json +40 -0
  297. metadata +285 -37
  298. data/lib/microformats2/collection.rb +0 -136
  299. data/lib/microformats2/format.rb +0 -151
  300. data/lib/microformats2/implied_property/foundation.rb +0 -59
  301. data/lib/microformats2/implied_property/name.rb +0 -34
  302. data/lib/microformats2/implied_property/photo.rb +0 -28
  303. data/lib/microformats2/implied_property/url.rb +0 -24
  304. data/lib/microformats2/property.rb +0 -21
  305. data/lib/microformats2/property/date_time.rb +0 -28
  306. data/lib/microformats2/property/embedded.rb +0 -9
  307. data/lib/microformats2/property/foundation.rb +0 -143
  308. data/lib/microformats2/property/text.rb +0 -16
  309. data/lib/microformats2/property/url.rb +0 -26
  310. data/spec/lib/microformats2/collection_spec.rb +0 -252
  311. data/spec/lib/microformats2/implied_property/name_spec.rb +0 -31
  312. data/spec/lib/microformats2/implied_property/photo_spec.rb +0 -31
  313. data/spec/lib/microformats2/implied_property/url_spec.rb +0 -58
@@ -1,28 +0,0 @@
1
- module Microformats2
2
- module Property
3
- class DateTime < Foundation
4
-
5
- def value
6
- ::DateTime.parse(to_s)
7
- end
8
-
9
- def to_hash
10
- if items.empty?
11
- to_s
12
- else
13
- { value: to_s }.merge(items.first.to_hash)
14
- end
15
- end
16
-
17
- protected
18
-
19
- def attr_map
20
- @attr_map ||= {
21
- "time" => "datetime",
22
- "ins" => "datetime",
23
- "abbr" => "title",
24
- "data" => "value" }
25
- end
26
- end
27
- end
28
- end
@@ -1,9 +0,0 @@
1
- module Microformats2
2
- module Property
3
- class Embedded < Foundation
4
- def to_s
5
- @to_s ||= string_value || @element.inner_html.strip
6
- end
7
- end
8
- end
9
- end
@@ -1,143 +0,0 @@
1
- module Microformats2
2
- module Property
3
- class Foundation
4
-
5
- VALUE_CLASS_REG_EXP = /^(value)/
6
- VALUE_TITLE_CLASS_REG_EXP = /^(value-title)/
7
-
8
- attr_reader :method_name
9
-
10
- def initialize(element, html_class, string_value=nil, base=nil)
11
- @element = element
12
- @method_name = to_method_name(html_class)
13
- @string_value = string_value
14
- @base = base
15
- end
16
-
17
- def parse
18
- to_s
19
- items
20
- self
21
- end
22
-
23
- def to_s
24
- @to_s ||= string_value || value_class_pattern || element_value || text_value
25
- end
26
-
27
- def format
28
- warn "[DEPRECATION] `format` is deprecated and will be removed in the next release. Try just leaving this function out completely (example author.format.name.to_s => author.name.to_s). You can also call `items.first` instead."
29
- items.first
30
- end
31
-
32
- def formats
33
- warn "[DEPRECATION] `formats` is deprecated and will be removed in the next release. Please use `items` instead."
34
- items
35
- end
36
-
37
- def items
38
- @formats ||= format_classes.length >=1 ? FormatParser.parse(@element, @base) : []
39
- end
40
-
41
- def to_hash
42
- if items.empty?
43
- to_s
44
- else
45
- { value: to_s }.merge(items.first.to_hash)
46
- end
47
- end
48
-
49
- def to_json
50
- to_hash.to_json
51
- end
52
-
53
- def method_missing(name, *arg, &block)
54
- fmt = items.first
55
- if fmt.respond_to?(name)
56
- fmt.send(name)
57
- else
58
- super
59
- end
60
-
61
- end
62
-
63
- protected
64
-
65
- def value_class_pattern
66
- result = value_parse(@element)
67
- result = nil if result.empty?
68
- result
69
- end
70
-
71
- def value_parse(element)
72
- value_parse_node(element).flatten.compact
73
- end
74
-
75
- def value_parse_node(node)
76
- case
77
- when node.is_a?(Nokogiri::XML::NodeSet) then value_parse_nodeset(node)
78
- when node.is_a?(Nokogiri::XML::Element) then [parse_for_value_class_pattern(node)]
79
- end
80
- end
81
-
82
- def value_parse_nodeset(nodeset)
83
- nodeset.map { |node| value_parse_node(node) }
84
- end
85
-
86
- def parse_for_value_class_pattern(element)
87
- if value_title_classes(element).length >= 1
88
- element.attribute("title").to_s.gsub(/\n+/, " ").gsub(/\s+/, " ").strip
89
- elsif value_classes(element).length >= 1
90
- element.inner_text.gsub(/\n+/, " ").gsub(/\s+/, " ").strip
91
- end
92
- end
93
-
94
- def element_value
95
- @element.attribute(attribute).to_s if attribute && @element.attribute(attribute)
96
- end
97
-
98
- def text_value
99
- @element.inner_text.gsub(/\n+/, " ").gsub(/\s+/, " ").strip
100
- end
101
-
102
- def string_value
103
- @string_value
104
- end
105
-
106
- def attribute
107
- attr_map[@element.name]
108
- end
109
-
110
- def attr_map
111
- {}
112
- end
113
-
114
- private
115
-
116
- def to_method_name(html_class)
117
- # p-class-name -> class_name
118
- mn = html_class.downcase.split("-")[1..-1].join("_")
119
- # avoid overriding Object#class
120
- mn = "klass" if mn == "class"
121
- mn
122
- end
123
-
124
- def format_classes
125
- return [] unless @element
126
- @format_classes = @element.attribute("class").to_s.split.select do |html_class|
127
- html_class =~ Format::CLASS_REG_EXP
128
- end
129
- end
130
-
131
- def value_classes(element)
132
- element.attribute("class").to_s.split.select do |html_class|
133
- html_class =~ VALUE_CLASS_REG_EXP
134
- end
135
- end
136
- def value_title_classes(element)
137
- element.attribute("class").to_s.split.select do |html_class|
138
- html_class =~ VALUE_TITLE_CLASS_REG_EXP
139
- end
140
- end
141
- end
142
- end
143
- end
@@ -1,16 +0,0 @@
1
- module Microformats2
2
- module Property
3
- class Text < Foundation
4
-
5
- protected
6
-
7
- def attr_map
8
- @attr_map = {
9
- "abbr" => "title",
10
- "data" => "value",
11
- "img" => "alt",
12
- "area" => "alt" }
13
- end
14
- end
15
- end
16
- end
@@ -1,26 +0,0 @@
1
- module Microformats2
2
- module Property
3
- class Url < Foundation
4
-
5
- def to_s
6
- @to_s = Microformats2::AbsoluteUri.new(@base, super.to_s).absolutize
7
- end
8
-
9
- protected
10
-
11
- def attr_map
12
- @attr_map = {
13
- "a" => "href",
14
- "area" => "href",
15
- "audio" => "src",
16
- "img" => "src",
17
- "object" => "data",
18
- "source" => "src",
19
- "video" => "src",
20
- "abbr" => "title",
21
- "data" => "value",
22
- "input" => "value" }
23
- end
24
- end
25
- end
26
- end
@@ -1,252 +0,0 @@
1
- require "spec_helper"
2
- require "microformats2"
3
-
4
- describe Microformats2::Collection do
5
- describe "spec/support/lib/microformats2" do
6
-
7
- describe "simple.html" do
8
- before do
9
- html = "spec/support/lib/microformats2/simple.html"
10
- @collection = Microformats2.parse(html)
11
- end
12
- describe "#to_json" do
13
- it "should match simple.js" do
14
- json = "spec/support/lib/microformats2/simple.js"
15
- json = open(json).read
16
- JSON.parse(@collection.to_json).should == JSON.parse(json)
17
- end
18
- end
19
- describe "'.h-card'" do
20
- it "assigns all cards to Collection#cards" do
21
- @collection.cards.first.should be_kind_of HCard
22
- end
23
- it "assigns the first card to Collection#card" do
24
- @collection.card.should be_kind_of HCard
25
- end
26
- end
27
- describe "'.h-card .p-name'" do
28
- it "assigns all names to HCard#names" do
29
- @collection.card.names.map(&:to_s).should == ["Jessica Lynn Suttles"]
30
- end
31
- it "assigns the first name to HCard#name" do
32
- @collection.card.name.to_s.should == "Jessica Lynn Suttles"
33
- end
34
- it "HCard#name is a Property::Text" do
35
- @collection.card.name.should be_kind_of Microformats2::Property::Text
36
- end
37
- end
38
- describe "'.h-card .u-url'" do
39
- it "assigns all urls to HCard#urls" do
40
- urls = ["http://example.org/", "http://flickr.com/", "http://twitter.com/jlsuttles"]
41
- @collection.card.urls.map(&:to_s).should == urls
42
- end
43
- it "assigns then first url to HCard#url" do
44
- @collection.card.url.to_s.should == "http://example.org/"
45
- end
46
- it "HCard#url is a Property::Url" do
47
- @collection.card.url.should be_kind_of Microformats2::Property::Url
48
- end
49
- end
50
- describe "'.h-card .p-bday'" do
51
- it "assigns all bdays to HCard#bdays" do
52
- @collection.card.bdays.map(&:to_s).should == ["1990-10-15"]
53
- end
54
- it "assigns the first bday to HCard#bday" do
55
- @collection.card.bday.to_s.should == "1990-10-15"
56
- end
57
- it "HCard#bday is a Property::DateTime" do
58
- @collection.card.bday.should be_kind_of Microformats2::Property::DateTime
59
- end
60
- it "assigns DateTime object to Property::DateTime#value" do
61
- @collection.card.bday.value.should be_kind_of DateTime
62
- @collection.card.bday.value.to_s.should == "1990-10-15T00:00:00+00:00"
63
- end
64
- end
65
- describe "'.h-card .p-content'" do
66
- it "assigns all contents to HCard#contents" do
67
- @collection.card.contents.map(&:to_s).should == ["<p>Vegan. Cat lover. Coder.</p>"]
68
- end
69
- it "assigns the first content to HCard#content" do
70
- @collection.card.content.to_s.should == "<p>Vegan. Cat lover. Coder.</p>"
71
- end
72
- it "HCard#content is a Property::Embedded" do
73
- @collection.card.contents.first.should be_kind_of Microformats2::Property::Embedded
74
- end
75
- end
76
- describe "Format.add_property" do
77
- let(:value) { "bar" }
78
- it "creates the attr" do
79
- @collection.first.add_property("p-foo", value)
80
- @collection.first.foo.to_s.should == value
81
- end
82
- it "allows json output of the attribute" do
83
- @collection.first.add_property("p-foo", value)
84
- @collection.first.to_json.should include(value)
85
- end
86
- it "supports Embedded" do
87
- @collection.first.add_property("e-foo", value)
88
- @collection.first.foo.to_s.should == value
89
- end
90
- it "raises a InvalidPropertyPrefix error if the prefix is invalid" do
91
- expect {
92
- @collection.first.add_property("xxx-foo", value)
93
- }.to raise_error Microformats2::InvalidPropertyPrefix
94
- end
95
- end
96
- end
97
- describe "nested-property.html" do
98
- before do
99
- html = "spec/support/lib/microformats2/nested-property.html"
100
- @collection = Microformats2.parse(html)
101
- end
102
- describe "#to_json" do
103
- it "should match nested-property.js" do
104
- json = "spec/support/lib/microformats2/nested-property.js"
105
- json = open(json).read
106
- JSON.parse(@collection.to_json).should == JSON.parse(json)
107
- end
108
- end
109
- describe "'.h-card'" do
110
- it "assigns all cards to Collection#cards" do
111
- @collection.cards.first.should be_kind_of HCard
112
- end
113
- it "assigns the first card to Collection#card" do
114
- @collection.card.should be_kind_of HCard
115
- end
116
- end
117
- describe "'.h-card .p-name'" do
118
- it "assigns all names to HCard#names" do
119
- @collection.card.names.map(&:to_s).should == ["jlsuttles"]
120
- end
121
- it "assigns the first name to HCard#name" do
122
- @collection.card.name.to_s.should == "jlsuttles"
123
- end
124
- it "HCard#name is a Property::Text" do
125
- @collection.card.name.should be_kind_of Microformats2::Property::Text
126
- end
127
- end
128
- describe "'.h-card .p-name .p-nickname'" do
129
- it "assigns all nicknames to HCard#nicknames" do
130
- @collection.card.nicknames.map(&:to_s).should == ["jlsuttles"]
131
- end
132
- it "assigns the first nickname to HCard#nickname" do
133
- @collection.card.nickname.to_s.should == "jlsuttles"
134
- end
135
- it "HCard#nickname is a Property::Text" do
136
- @collection.card.nickname.should be_kind_of Microformats2::Property::Text
137
- end
138
- end
139
- end
140
-
141
- describe "nested-format-with-property-of-same-name.html" do
142
- before do
143
- html = "spec/support/lib/microformats2/nested-format-with-property-of-same-name.html"
144
- @collection = Microformats2.parse(html)
145
- end
146
- describe "#to_json" do
147
- it "should match nested-format-with-property-of-same-name.js" do
148
- json = "spec/support/lib/microformats2/nested-format-with-property-of-same-name.js"
149
- json = open(json).read
150
- JSON.parse(@collection.to_json).should == JSON.parse(json)
151
- end
152
- end
153
- end
154
-
155
- describe "nested-format-with-property.html" do
156
- before do
157
- html = "spec/support/lib/microformats2/nested-format-with-property.html"
158
- @collection = Microformats2.parse(html)
159
- end
160
- describe "#to_json" do
161
- it "should match nested-format-with-property.js" do
162
- json = "spec/support/lib/microformats2/nested-format-with-property.js"
163
- json = open(json).read
164
- JSON.parse(@collection.to_json).should == JSON.parse(json)
165
- end
166
- end
167
- describe "'.h-entry'" do
168
- it "assigns all entrys to Collection#entrys" do
169
- @collection.entries.first.should be_kind_of HEntry
170
- end
171
- it "assigns the first entry to Collection#entry" do
172
- @collection.entry.should be_kind_of HEntry
173
- end
174
- end
175
- describe "'.h-card .p-author.h-card'" do
176
- it "assigns all authors to HCard#authors" do
177
- @collection.entry.authors.map(&:to_s).should == ["Jessica Lynn Suttles"]
178
- end
179
- it "assigns the first author to HCard#author" do
180
- @collection.entry.author.to_s.should == "Jessica Lynn Suttles"
181
- end
182
- it "HCard#author is a Property::Text" do
183
- @collection.entry.author.should be_kind_of Microformats2::Property::Text
184
- end
185
- it "assigns all HCard to Property::Text#formats" do
186
- @collection.entry.author.formats.first.should be_kind_of HCard
187
- end
188
- it "assigns the first HCard to Property::Text#format" do
189
- @collection.entry.author.format.should be_kind_of HCard
190
- end
191
- end
192
- end
193
-
194
- describe "rels.html" do
195
- before do
196
- html = "spec/support/lib/microformats2/rels.html"
197
- @collection = Microformats2.parse(html)
198
- end
199
- describe "#to_json" do
200
- it "should match rels.js" do
201
- # this also tests the case of having rel="alternates"
202
- json = "spec/support/lib/microformats2/rels.js"
203
- json = open(json).read
204
- JSON.parse(@collection.to_json).should == JSON.parse(json)
205
- end
206
- end
207
- end
208
-
209
- describe "rels-with-unnormalized-urls.html" do
210
- before do
211
- html = "spec/support/lib/microformats2/rels-with-unnormalized-urls.html"
212
- @collection = Microformats2.parse(html)
213
- end
214
-
215
- it "should normalize the url" do
216
- @collection.to_hash[:rels]["me"].should eq([ "http://jessicard.com/" ])
217
- end
218
- end
219
-
220
- describe "rels-that-drop-the-base.html" do
221
- before do
222
- html = "spec/support/lib/microformats2/rels-that-drop-the-base.html"
223
- @collection = Microformats2.parse(html)
224
- end
225
-
226
- it "keeps the relative path" do
227
- @collection.to_hash[:rels]["stylesheet"].should eq([ "/path/to/stylesheet.css" ])
228
- end
229
- end
230
- end
231
-
232
-
233
- # these cases were scraped from the internet using `rake specs:update`
234
-
235
- describe "spec/support/cases" do
236
- cases_dir = "spec/support/cases/*"
237
- Dir[File.join(cases_dir, "*")].each do |page_dir|
238
- describe page_dir.split("/")[-2..-1].join("/") do
239
- Dir[File.join(page_dir, "*")].keep_if { |f| f =~ /([.]html$)/ }.each do |html_file|
240
- it "#{html_file.split("/").last}" do
241
- pending "These are dynamic tests that are not yet passing so commenting out for now"
242
- # json_file = html_file.gsub(/([.]html$)/, ".js")
243
- # html = open(html_file).read
244
- # json = open(json_file).read
245
-
246
- # JSON.parse(Microformats2.parse(html).to_json).should == JSON.parse(json)
247
- end
248
- end
249
- end
250
- end
251
- end
252
- end