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,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