microformats2 2.9.0 → 3.0.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.
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,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
@@ -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