microformats 4.0.7 → 4.0.9

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 (366) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +10 -0
  3. data/.gitignore +33 -15
  4. data/.rspec +3 -2
  5. data/.rubocop +3 -0
  6. data/.rubocop.yml +25 -0
  7. data/.ruby-version +1 -0
  8. data/.simplecov +11 -0
  9. data/.travis.yml +14 -2
  10. data/CONTRIBUTING.md +103 -0
  11. data/Guardfile +2 -2
  12. data/LICENSE +116 -0
  13. data/README.md +112 -172
  14. data/Rakefile +6 -7
  15. data/bin/microformats +10 -9
  16. data/lib/microformats.rb +15 -14
  17. data/lib/microformats/absolute_uri.rb +4 -8
  18. data/lib/microformats/format_parser.rb +271 -251
  19. data/lib/microformats/parser.rb +38 -38
  20. data/lib/microformats/parser_core.rb +142 -109
  21. data/lib/microformats/property_parser.rb +42 -65
  22. data/lib/microformats/results/collection.rb +19 -38
  23. data/lib/microformats/results/parser_result.rb +25 -37
  24. data/lib/microformats/results/property_set.rb +24 -31
  25. data/lib/microformats/time_property_parser.rb +122 -118
  26. data/lib/microformats/version.rb +1 -1
  27. data/logo.svg +23 -0
  28. data/microformats.gemspec +35 -33
  29. metadata +140 -442
  30. data/LICENSE.md +0 -36
  31. data/spec/lib/microformats/absolute_uri_spec.rb +0 -56
  32. data/spec/lib/microformats/parser_spec.rb +0 -132
  33. data/spec/lib/microformats_spec.rb +0 -33
  34. data/spec/spec_helper.rb +0 -10
  35. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.html +0 -2
  36. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.js +0 -9
  37. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.html +0 -2
  38. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.js +0 -10
  39. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.html +0 -5
  40. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.js +0 -11
  41. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.html +0 -17
  42. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.js +0 -20
  43. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.html +0 -16
  44. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.js +0 -24
  45. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.html +0 -7
  46. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.js +0 -11
  47. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.html +0 -9
  48. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.js +0 -18
  49. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.html +0 -9
  50. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.js +0 -18
  51. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.html +0 -9
  52. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.js +0 -17
  53. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.html +0 -9
  54. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.js +0 -17
  55. data/spec/support/lib/edge_cases/blank_href.html +0 -23
  56. data/spec/support/lib/edge_cases/blank_href.js +0 -15
  57. data/spec/support/lib/edge_cases/blank_rel.html +0 -23
  58. data/spec/support/lib/edge_cases/blank_rel.js +0 -41
  59. data/spec/support/lib/edge_cases/blank_src.html +0 -24
  60. data/spec/support/lib/edge_cases/blank_src.js +0 -16
  61. data/spec/support/lib/edge_cases/blank_value.html +0 -5
  62. data/spec/support/lib/edge_cases/blank_value.js +0 -19
  63. data/spec/support/lib/edge_cases/relative.html +0 -29
  64. data/spec/support/lib/edge_cases/relative.js +0 -15
  65. data/spec/support/lib/edge_cases/vcp-dates.html +0 -13
  66. data/spec/support/lib/edge_cases/vcp-dates.js +0 -30
  67. data/spec/support/lib/microformats/blank_href.html +0 -23
  68. data/spec/support/lib/microformats/blank_href.js +0 -11
  69. data/spec/support/lib/microformats/implied_property/name-fail.html +0 -60
  70. data/spec/support/lib/microformats/implied_property/name-pass.html +0 -30
  71. data/spec/support/lib/microformats/implied_property/photo-fail.html +0 -60
  72. data/spec/support/lib/microformats/implied_property/photo-pass.html +0 -30
  73. data/spec/support/lib/microformats/implied_property/url-fail.html +0 -18
  74. data/spec/support/lib/microformats/implied_property/url-pass.html +0 -12
  75. data/spec/support/lib/microformats/implied_property/url-relative.html +0 -13
  76. data/spec/support/lib/microformats/implied_property/url-unnormalized.html +0 -12
  77. data/spec/support/lib/microformats/nested-format-with-property-of-same-name.html +0 -13
  78. data/spec/support/lib/microformats/nested-format-with-property-of-same-name.js +0 -16
  79. data/spec/support/lib/microformats/nested-format-with-property.html +0 -12
  80. data/spec/support/lib/microformats/nested-format-with-property.js +0 -16
  81. data/spec/support/lib/microformats/nested-format-without-property.html +0 -13
  82. data/spec/support/lib/microformats/nested-property.html +0 -12
  83. data/spec/support/lib/microformats/nested-property.js +0 -10
  84. data/spec/support/lib/microformats/rels-that-drop-the-base.html +0 -11
  85. data/spec/support/lib/microformats/rels-with-unnormalized-urls.html +0 -11
  86. data/spec/support/lib/microformats/rels.html +0 -12
  87. data/spec/support/lib/microformats/rels.js +0 -13
  88. data/spec/support/lib/microformats/simple.html +0 -23
  89. data/spec/support/lib/microformats/simple.js +0 -11
  90. data/vendor/tests/.gitignore +0 -25
  91. data/vendor/tests/LICENSE.md +0 -36
  92. data/vendor/tests/README.md +0 -48
  93. data/vendor/tests/app.js +0 -84
  94. data/vendor/tests/composer.json +0 -5
  95. data/vendor/tests/css/testsuite.css +0 -159
  96. data/vendor/tests/interface.js +0 -18
  97. data/vendor/tests/package.json +0 -27
  98. data/vendor/tests/tests/microformats-mixed/h-card/change-log.html +0 -63
  99. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.html +0 -14
  100. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.json +0 -22
  101. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.html +0 -1
  102. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.json +0 -10
  103. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.html +0 -16
  104. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.json +0 -38
  105. data/vendor/tests/tests/microformats-mixed/h-resume/change-log.html +0 -68
  106. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.html +0 -16
  107. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.json +0 -31
  108. data/vendor/tests/tests/microformats-v1/adr/change-log.html +0 -63
  109. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.html +0 -8
  110. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.json +0 -15
  111. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.html +0 -5
  112. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.json +0 -11
  113. data/vendor/tests/tests/microformats-v1/geo/change-log.1.html +0 -78
  114. data/vendor/tests/tests/microformats-v1/geo/change-log.html +0 -63
  115. data/vendor/tests/tests/microformats-v1/geo/hidden.html +0 -10
  116. data/vendor/tests/tests/microformats-v1/geo/hidden.json +0 -11
  117. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.html +0 -6
  118. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.json +0 -11
  119. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.html +0 -11
  120. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.json +0 -11
  121. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.html +0 -41
  122. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.json +0 -21
  123. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.html +0 -13
  124. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.json +0 -37
  125. data/vendor/tests/tests/microformats-v1/hcalendar/change-log.html +0 -68
  126. data/vendor/tests/tests/microformats-v1/hcalendar/combining.html +0 -15
  127. data/vendor/tests/tests/microformats-v1/hcalendar/combining.json +0 -31
  128. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.html +0 -7
  129. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.json +0 -12
  130. data/vendor/tests/tests/microformats-v1/hcalendar/time.html +0 -44
  131. data/vendor/tests/tests/microformats-v1/hcalendar/time.json +0 -22
  132. data/vendor/tests/tests/microformats-v1/hcard/change-log.html +0 -68
  133. data/vendor/tests/tests/microformats-v1/hcard/email.html +0 -14
  134. data/vendor/tests/tests/microformats-v1/hcard/email.json +0 -11
  135. data/vendor/tests/tests/microformats-v1/hcard/format.html +0 -6
  136. data/vendor/tests/tests/microformats-v1/hcard/format.json +0 -11
  137. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.html +0 -3
  138. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.json +0 -8
  139. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.html +0 -1
  140. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.json +0 -8
  141. data/vendor/tests/tests/microformats-v1/hcard/justaname.html +0 -1
  142. data/vendor/tests/tests/microformats-v1/hcard/justaname.json +0 -8
  143. data/vendor/tests/tests/microformats-v1/hcard/multiple.html +0 -74
  144. data/vendor/tests/tests/microformats-v1/hcard/multiple.json +0 -65
  145. data/vendor/tests/tests/microformats-v1/hcard/name.html +0 -11
  146. data/vendor/tests/tests/microformats-v1/hcard/name.json +0 -15
  147. data/vendor/tests/tests/microformats-v1/hcard/single.html +0 -14
  148. data/vendor/tests/tests/microformats-v1/hcard/single.json +0 -24
  149. data/vendor/tests/tests/microformats-v1/hentry/change-log.html +0 -73
  150. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.html +0 -20
  151. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.json +0 -24
  152. data/vendor/tests/tests/microformats-v1/hfeed/simple.html +0 -30
  153. data/vendor/tests/tests/microformats-v1/hfeed/simple.json +0 -49
  154. data/vendor/tests/tests/microformats-v1/hnews/all.html +0 -37
  155. data/vendor/tests/tests/microformats-v1/hnews/all.json +0 -74
  156. data/vendor/tests/tests/microformats-v1/hnews/change-log.html +0 -72
  157. data/vendor/tests/tests/microformats-v1/hnews/minimum.html +0 -25
  158. data/vendor/tests/tests/microformats-v1/hnews/minimum.json +0 -48
  159. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.html +0 -26
  160. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.json +0 -52
  161. data/vendor/tests/tests/microformats-v1/hproduct/change-log.html +0 -62
  162. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.html +0 -13
  163. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.json +0 -33
  164. data/vendor/tests/tests/microformats-v1/hresume/affiliation.html +0 -12
  165. data/vendor/tests/tests/microformats-v1/hresume/affiliation.json +0 -25
  166. data/vendor/tests/tests/microformats-v1/hresume/change-log.html +0 -73
  167. data/vendor/tests/tests/microformats-v1/hresume/contact.html +0 -18
  168. data/vendor/tests/tests/microformats-v1/hresume/contact.json +0 -32
  169. data/vendor/tests/tests/microformats-v1/hresume/education.html +0 -13
  170. data/vendor/tests/tests/microformats-v1/hresume/education.json +0 -29
  171. data/vendor/tests/tests/microformats-v1/hresume/skill.html +0 -12
  172. data/vendor/tests/tests/microformats-v1/hresume/skill.json +0 -33
  173. data/vendor/tests/tests/microformats-v1/hresume/work.html +0 -16
  174. data/vendor/tests/tests/microformats-v1/hresume/work.json +0 -30
  175. data/vendor/tests/tests/microformats-v1/hreview-aggregate/change-log.html +0 -67
  176. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.html +0 -18
  177. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.json +0 -31
  178. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.html +0 -6
  179. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.json +0 -19
  180. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.html +0 -13
  181. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.json +0 -22
  182. data/vendor/tests/tests/microformats-v1/hreview/change-log.html +0 -73
  183. data/vendor/tests/tests/microformats-v1/hreview/item.html +0 -8
  184. data/vendor/tests/tests/microformats-v1/hreview/item.json +0 -19
  185. data/vendor/tests/tests/microformats-v1/hreview/vcard.html +0 -23
  186. data/vendor/tests/tests/microformats-v1/hreview/vcard.json +0 -58
  187. data/vendor/tests/tests/microformats-v1/includes/change-log.html +0 -72
  188. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.html +0 -16
  189. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.json +0 -49
  190. data/vendor/tests/tests/microformats-v1/includes/heventitemref.html +0 -25
  191. data/vendor/tests/tests/microformats-v1/includes/heventitemref.json +0 -33
  192. data/vendor/tests/tests/microformats-v1/includes/hyperlink.html +0 -18
  193. data/vendor/tests/tests/microformats-v1/includes/hyperlink.json +0 -43
  194. data/vendor/tests/tests/microformats-v1/includes/object.html +0 -23
  195. data/vendor/tests/tests/microformats-v1/includes/object.json +0 -42
  196. data/vendor/tests/tests/microformats-v1/includes/table.html +0 -12
  197. data/vendor/tests/tests/microformats-v1/includes/table.json +0 -19
  198. data/vendor/tests/tests/microformats-v2/h-adr/change-log.html +0 -62
  199. data/vendor/tests/tests/microformats-v2/h-adr/geo.html +0 -10
  200. data/vendor/tests/tests/microformats-v2/h-adr/geo.json +0 -16
  201. data/vendor/tests/tests/microformats-v2/h-adr/geourl.html +0 -4
  202. data/vendor/tests/tests/microformats-v2/h-adr/geourl.json +0 -13
  203. data/vendor/tests/tests/microformats-v2/h-adr/justaname.html +0 -1
  204. data/vendor/tests/tests/microformats-v2/h-adr/justaname.json +0 -10
  205. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.html +0 -21
  206. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.json +0 -12
  207. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.html +0 -8
  208. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.json +0 -16
  209. data/vendor/tests/tests/microformats-v2/h-as-note/note.html +0 -56
  210. data/vendor/tests/tests/microformats-v2/h-as-note/note.json +0 -98
  211. data/vendor/tests/tests/microformats-v2/h-card/baseurl.html +0 -6
  212. data/vendor/tests/tests/microformats-v2/h-card/baseurl.json +0 -26
  213. data/vendor/tests/tests/microformats-v2/h-card/change-log.html +0 -100
  214. data/vendor/tests/tests/microformats-v2/h-card/childimplied.html +0 -7
  215. data/vendor/tests/tests/microformats-v2/h-card/childimplied.json +0 -12
  216. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.html +0 -10
  217. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.json +0 -15
  218. data/vendor/tests/tests/microformats-v2/h-card/hcard.html +0 -4
  219. data/vendor/tests/tests/microformats-v2/h-card/hcard.json +0 -19
  220. data/vendor/tests/tests/microformats-v2/h-card/horghcard.html +0 -4
  221. data/vendor/tests/tests/microformats-v2/h-card/horghcard.json +0 -19
  222. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.html +0 -3
  223. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.json +0 -12
  224. data/vendor/tests/tests/microformats-v2/h-card/impliedname.html +0 -15
  225. data/vendor/tests/tests/microformats-v2/h-card/impliedname.json +0 -90
  226. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.html +0 -11
  227. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.json +0 -72
  228. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.html +0 -5
  229. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.json +0 -45
  230. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.html +0 -1
  231. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.json +0 -11
  232. data/vendor/tests/tests/microformats-v2/h-card/justaname.html +0 -1
  233. data/vendor/tests/tests/microformats-v2/h-card/justaname.json +0 -10
  234. data/vendor/tests/tests/microformats-v2/h-card/nested.html +0 -4
  235. data/vendor/tests/tests/microformats-v2/h-card/nested.json +0 -18
  236. data/vendor/tests/tests/microformats-v2/h-card/p-property.html +0 -21
  237. data/vendor/tests/tests/microformats-v2/h-card/p-property.json +0 -15
  238. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.html +0 -6
  239. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.json +0 -29
  240. data/vendor/tests/tests/microformats-v2/h-entry/change-log.html +0 -90
  241. data/vendor/tests/tests/microformats-v2/h-entry/encoding.html +0 -3
  242. data/vendor/tests/tests/microformats-v2/h-entry/encoding.json +0 -14
  243. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.html +0 -9
  244. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.json +0 -27
  245. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.html +0 -1
  246. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.json +0 -11
  247. data/vendor/tests/tests/microformats-v2/h-entry/justaname.html +0 -1
  248. data/vendor/tests/tests/microformats-v2/h-entry/justaname.json +0 -10
  249. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.html +0 -4
  250. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.json +0 -14
  251. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.html +0 -20
  252. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.json +0 -25
  253. data/vendor/tests/tests/microformats-v2/h-entry/u-property.html +0 -33
  254. data/vendor/tests/tests/microformats-v2/h-entry/u-property.json +0 -12
  255. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.html +0 -13
  256. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.json +0 -14
  257. data/vendor/tests/tests/microformats-v2/h-event/ampm.html +0 -41
  258. data/vendor/tests/tests/microformats-v2/h-event/ampm.json +0 -21
  259. data/vendor/tests/tests/microformats-v2/h-event/attendees.html +0 -13
  260. data/vendor/tests/tests/microformats-v2/h-event/attendees.json +0 -37
  261. data/vendor/tests/tests/microformats-v2/h-event/change-log.html +0 -82
  262. data/vendor/tests/tests/microformats-v2/h-event/combining.html +0 -13
  263. data/vendor/tests/tests/microformats-v2/h-event/combining.json +0 -25
  264. data/vendor/tests/tests/microformats-v2/h-event/concatenate.html +0 -8
  265. data/vendor/tests/tests/microformats-v2/h-event/concatenate.json +0 -12
  266. data/vendor/tests/tests/microformats-v2/h-event/dates.html +0 -13
  267. data/vendor/tests/tests/microformats-v2/h-event/dates.json +0 -26
  268. data/vendor/tests/tests/microformats-v2/h-event/dt-property.html +0 -23
  269. data/vendor/tests/tests/microformats-v2/h-event/dt-property.json +0 -20
  270. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.html +0 -1
  271. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.json +0 -11
  272. data/vendor/tests/tests/microformats-v2/h-event/justaname.html +0 -1
  273. data/vendor/tests/tests/microformats-v2/h-event/justaname.json +0 -10
  274. data/vendor/tests/tests/microformats-v2/h-event/time.html +0 -47
  275. data/vendor/tests/tests/microformats-v2/h-event/time.json +0 -25
  276. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.html +0 -30
  277. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.json +0 -23
  278. data/vendor/tests/tests/microformats-v2/h-feed/simple.html +0 -26
  279. data/vendor/tests/tests/microformats-v2/h-feed/simple.json +0 -33
  280. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.html +0 -5
  281. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.json +0 -12
  282. data/vendor/tests/tests/microformats-v2/h-geo/altitude.html +0 -8
  283. data/vendor/tests/tests/microformats-v2/h-geo/altitude.json +0 -13
  284. data/vendor/tests/tests/microformats-v2/h-geo/change-log.html +0 -67
  285. data/vendor/tests/tests/microformats-v2/h-geo/hidden.html +0 -10
  286. data/vendor/tests/tests/microformats-v2/h-geo/hidden.json +0 -12
  287. data/vendor/tests/tests/microformats-v2/h-geo/justaname.html +0 -3
  288. data/vendor/tests/tests/microformats-v2/h-geo/justaname.json +0 -10
  289. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.html +0 -5
  290. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.json +0 -12
  291. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.html +0 -11
  292. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.json +0 -12
  293. data/vendor/tests/tests/microformats-v2/h-news/all.html +0 -35
  294. data/vendor/tests/tests/microformats-v2/h-news/all.json +0 -51
  295. data/vendor/tests/tests/microformats-v2/h-news/change-log.html +0 -78
  296. data/vendor/tests/tests/microformats-v2/h-news/minimum.html +0 -24
  297. data/vendor/tests/tests/microformats-v2/h-news/minimum.json +0 -40
  298. data/vendor/tests/tests/microformats-v2/h-org/change-log.html +0 -57
  299. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.html +0 -1
  300. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.json +0 -11
  301. data/vendor/tests/tests/microformats-v2/h-org/simple.html +0 -1
  302. data/vendor/tests/tests/microformats-v2/h-org/simple.json +0 -10
  303. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.html +0 -4
  304. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.json +0 -12
  305. data/vendor/tests/tests/microformats-v2/h-product/aggregate.html +0 -21
  306. data/vendor/tests/tests/microformats-v2/h-product/aggregate.json +0 -45
  307. data/vendor/tests/tests/microformats-v2/h-product/change-log.html +0 -62
  308. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.html +0 -1
  309. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.json +0 -11
  310. data/vendor/tests/tests/microformats-v2/h-product/justaname.html +0 -1
  311. data/vendor/tests/tests/microformats-v2/h-product/justaname.json +0 -10
  312. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.html +0 -10
  313. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.json +0 -26
  314. data/vendor/tests/tests/microformats-v2/h-recipe/all.html +0 -63
  315. data/vendor/tests/tests/microformats-v2/h-recipe/all.json +0 -54
  316. data/vendor/tests/tests/microformats-v2/h-recipe/change-log.html +0 -62
  317. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.html +0 -7
  318. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.json +0 -17
  319. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.html +0 -12
  320. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.json +0 -20
  321. data/vendor/tests/tests/microformats-v2/h-resume/change-log.html +0 -78
  322. data/vendor/tests/tests/microformats-v2/h-resume/contact.html +0 -17
  323. data/vendor/tests/tests/microformats-v2/h-resume/contact.json +0 -26
  324. data/vendor/tests/tests/microformats-v2/h-resume/education.html +0 -13
  325. data/vendor/tests/tests/microformats-v2/h-resume/education.json +0 -30
  326. data/vendor/tests/tests/microformats-v2/h-resume/justaname.html +0 -1
  327. data/vendor/tests/tests/microformats-v2/h-resume/justaname.json +0 -10
  328. data/vendor/tests/tests/microformats-v2/h-resume/skill.html +0 -12
  329. data/vendor/tests/tests/microformats-v2/h-resume/skill.json +0 -12
  330. data/vendor/tests/tests/microformats-v2/h-resume/work.html +0 -16
  331. data/vendor/tests/tests/microformats-v2/h-resume/work.json +0 -31
  332. data/vendor/tests/tests/microformats-v2/h-review-aggregate/change-log.html +0 -78
  333. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.html +0 -13
  334. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.json +0 -23
  335. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.html +0 -8
  336. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.json +0 -19
  337. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.html +0 -18
  338. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.json +0 -26
  339. data/vendor/tests/tests/microformats-v2/h-review/change-log.html +0 -84
  340. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.html +0 -1
  341. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.json +0 -11
  342. data/vendor/tests/tests/microformats-v2/h-review/implieditem.html +0 -4
  343. data/vendor/tests/tests/microformats-v2/h-review/implieditem.json +0 -19
  344. data/vendor/tests/tests/microformats-v2/h-review/item.html +0 -8
  345. data/vendor/tests/tests/microformats-v2/h-review/item.json +0 -20
  346. data/vendor/tests/tests/microformats-v2/h-review/justaname.html +0 -1
  347. data/vendor/tests/tests/microformats-v2/h-review/justaname.json +0 -10
  348. data/vendor/tests/tests/microformats-v2/h-review/photo.html +0 -1
  349. data/vendor/tests/tests/microformats-v2/h-review/photo.json +0 -11
  350. data/vendor/tests/tests/microformats-v2/h-review/vcard.html +0 -23
  351. data/vendor/tests/tests/microformats-v2/h-review/vcard.json +0 -48
  352. data/vendor/tests/tests/microformats-v2/rel/change-log.html +0 -67
  353. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.html +0 -10
  354. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.json +0 -75
  355. data/vendor/tests/tests/microformats-v2/rel/license.html +0 -1
  356. data/vendor/tests/tests/microformats-v2/rel/license.json +0 -12
  357. data/vendor/tests/tests/microformats-v2/rel/nofollow.html +0 -1
  358. data/vendor/tests/tests/microformats-v2/rel/nofollow.json +0 -12
  359. data/vendor/tests/tests/microformats-v2/rel/rel-urls.html +0 -8
  360. data/vendor/tests/tests/microformats-v2/rel/rel-urls.json +0 -33
  361. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.html +0 -4
  362. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.json +0 -20
  363. data/vendor/tests/tests/microformats-v2/rel/xfn-all.html +0 -19
  364. data/vendor/tests/tests/microformats-v2/rel/xfn-all.json +0 -92
  365. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.html +0 -10
  366. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.json +0 -40
@@ -1,14 +1,13 @@
1
1
  module Microformats
2
-
3
2
  class Parser < ParserCore
4
3
  attr_reader :http_headers, :http_body
4
+
5
5
  def initialize
6
6
  @http_headers = {}
7
7
  super
8
8
  end
9
9
 
10
- def parse(html, base: nil, headers:{})
11
-
10
+ def parse(html, base: nil, headers: {})
12
11
  @http_headers = {}
13
12
 
14
13
  @items = []
@@ -26,49 +25,51 @@ module Microformats
26
25
  @base = found_base unless found_base.nil?
27
26
 
28
27
  document.traverse do |node|
29
- if not node.attribute('src').nil?
28
+ if !node.attribute('src').nil?
30
29
  absolute_url = Microformats::AbsoluteUri.new(node.attribute('src').value.to_s, base: @base).absolutize
31
30
  node.attribute('src').value = absolute_url.to_s
32
-
33
- elsif not node.attribute('href').nil?
31
+ elsif !node.attribute('href').nil?
34
32
  absolute_url = Microformats::AbsoluteUri.new(node.attribute('href').value.to_s, base: @base).absolutize
35
33
  node.attribute('href').value = absolute_url.to_s
36
34
  end
37
35
  end
36
+
38
37
  parse_node(document)
39
38
  parse_rels(document)
40
39
 
41
- Collection.new({'items' => @items, 'rels' => @rels, 'rel-urls' => @rel_urls})
40
+ Collection.new('items' => @items, 'rels' => @rels, 'rel-urls' => @rel_urls)
42
41
  end
43
42
 
44
- def read_html(html, headers:{})
43
+ def read_html(html, headers: {})
45
44
  stripped_html = html.strip
45
+
46
46
  open(stripped_html, headers) do |response|
47
47
  @http_headers = response.meta if response.respond_to?(:meta)
48
48
  @http_body = response.read
49
49
  end
50
- if @base.nil?
51
- @base = stripped_html
52
- end
50
+
51
+ @base = stripped_html if @base.nil?
52
+
53
53
  @http_body
54
- rescue Errno::ENOENT, Errno::ENAMETOOLONG => e
54
+ rescue Errno::ENOENT, Errno::ENAMETOOLONG
55
55
  @http_body = html
56
56
  end
57
57
 
58
58
  private
59
59
 
60
60
  def parse_element(element)
61
-
62
61
  fmt_classes = format_classes(element)
62
+
63
63
  bc_fmt_classes = backcompat_format_classes(element).reject do |format_class|
64
- fmt_classes.include? format_class
64
+ fmt_classes.include?(format_class)
65
65
  end
66
- joined_classes = fmt_classes + bc_fmt_classes
66
+
67
+ joined_classes = fmt_classes + bc_fmt_classes
67
68
 
68
69
  if bc_fmt_classes.length >= 1
69
70
  @items << FormatParser.new.parse(element, base: @base, format_class_array: joined_classes, backcompat: true)
70
71
  elsif fmt_classes.length >= 1
71
- @items << FormatParser.new.parse(element, base: @base, format_class_array: fmt_classes )
72
+ @items << FormatParser.new.parse(element, base: @base, format_class_array: fmt_classes)
72
73
  else
73
74
  parse_nodeset(element.children)
74
75
  end
@@ -76,36 +77,35 @@ module Microformats
76
77
 
77
78
  def parse_base(document)
78
79
  base = document.search('base').first
80
+
79
81
  base.values.first unless base.nil?
80
82
  end
81
83
 
82
84
  def parse_rels(element)
83
85
  element.search('*[@rel]').each do |rel|
84
- unless rel.attribute('href').nil?
85
- url = Microformats::AbsoluteUri.new(rel.attribute('href').text, base: @base).absolutize
86
-
87
- rel_values = rel.attribute('rel').text.split(' ')
88
- rel_values.each do |rel_value|
89
- @rels[rel_value] = [] unless @rels.has_key?(rel_value)
90
- @rels[rel_value] << Microformats::AbsoluteUri.new(rel.attribute('href').text, base: @base).absolutize
91
- @rels[rel_value].uniq!
92
- end
93
-
94
- unless rel_values.empty?
95
- @rel_urls[url] = {} unless @rel_urls.has_key?(url)
96
-
97
- @rel_urls[url]['hreflang'] = rel.attribute('hreflang').value if @rel_urls[url]['hreflang'].nil? and not rel.attribute('hreflang').nil?
98
- @rel_urls[url]['media'] = rel.attribute('media').value if @rel_urls[url]['media'].nil? and not rel.attribute('media').nil?
99
- @rel_urls[url]['title'] = rel.attribute('title').value if @rel_urls[url]['title'].nil? and not rel.attribute('title').nil?
100
- @rel_urls[url]['type'] = rel.attribute('type').value if @rel_urls[url]['type'].nil? and not rel.attribute('type').nil?
101
- @rel_urls[url]['text'] = rel.text.strip if @rel_urls[url]['text'].nil? and not rel.text.empty?
102
- @rel_urls[url]['rels'] = rel_values
103
- end
86
+ next if rel.attribute('href').nil?
87
+
88
+ url = Microformats::AbsoluteUri.new(rel.attribute('href').text, base: @base).absolutize
89
+
90
+ rel_values = rel.attribute('rel').text.split(' ')
104
91
 
92
+ rel_values.each do |rel_value|
93
+ @rels[rel_value] = [] unless @rels.key?(rel_value)
94
+ @rels[rel_value] << Microformats::AbsoluteUri.new(rel.attribute('href').text, base: @base).absolutize
95
+ @rels[rel_value].uniq!
105
96
  end
97
+
98
+ next if rel_values.empty?
99
+
100
+ @rel_urls[url] = {} unless @rel_urls.key?(url)
101
+
102
+ @rel_urls[url]['hreflang'] = rel.attribute('hreflang').value if @rel_urls[url]['hreflang'].nil? && !rel.attribute('hreflang').nil?
103
+ @rel_urls[url]['media'] = rel.attribute('media').value if @rel_urls[url]['media'].nil? && !rel.attribute('media').nil?
104
+ @rel_urls[url]['title'] = rel.attribute('title').value if @rel_urls[url]['title'].nil? && !rel.attribute('title').nil?
105
+ @rel_urls[url]['type'] = rel.attribute('type').value if @rel_urls[url]['type'].nil? && !rel.attribute('type').nil?
106
+ @rel_urls[url]['text'] = rel.text.strip if @rel_urls[url]['text'].nil? && !rel.text.empty?
107
+ @rel_urls[url]['rels'] = rel_values
106
108
  end
107
109
  end
108
-
109
110
  end
110
111
  end
111
-
@@ -1,12 +1,10 @@
1
1
  module Microformats
2
2
  class ParserCore
3
-
4
3
  VALUE_CLASS_REG_EXP = /^value$/
5
4
  VALUE_TITLE_CLASS_REG_EXP = /^value-title$/
6
5
  FORMAT_CLASS_REG_EXP = /^h-[a-z-]+$/
7
6
  PROPERTY_CLASS_REG_EXP = /^(p-|u-|dt-|e-)[a-z-]+$/
8
7
 
9
-
10
8
  def initialize
11
9
  @mode_backcompat = false
12
10
  @fmt_classes = []
@@ -15,18 +13,15 @@ module Microformats
15
13
  private
16
14
 
17
15
  def parse_node(node)
18
- if node.is_a?(Nokogiri::HTML::Document) then
16
+ if node.is_a?(Nokogiri::HTML::Document)
19
17
  parse_node(node.children)
20
- elsif node.is_a?(Nokogiri::XML::NodeSet) then
18
+ elsif node.is_a?(Nokogiri::XML::NodeSet)
21
19
  parse_nodeset(node)
22
- elsif node.is_a?(Nokogiri::XML::Element) then
20
+ elsif node.is_a?(Nokogiri::XML::Element)
23
21
  parse_element(node)
24
- else
25
- nil
26
22
  end
27
23
  end
28
24
 
29
-
30
25
  def parse_nodeset(nodeset)
31
26
  nodeset.each do |node|
32
27
  parse_node(node)
@@ -67,60 +62,71 @@ module Microformats
67
62
  when /^[vh][cC]ard$/
68
63
  result_set << 'h-card'
69
64
 
70
- #these aren't actually specified by the backcompat faq, but probably should parse them
65
+ # these aren't actually specified by the backcompat faq, but probably should parse them
71
66
  when /^h[fF]eed$/
72
67
  result_set << 'h-feed'
73
68
  when /^h[nN]ews$/
74
69
  result_set << 'h-news'
75
-
76
70
  else
77
- if @fmt_classes.include? 'h-entry' and html_class == 'author'
71
+ if @fmt_classes.include?('h-entry') && html_class == 'author'
78
72
  result_set << 'h-card'
79
73
  end
80
- if @fmt_classes.include? 'h-product' and html_class == 'review'
74
+
75
+ if @fmt_classes.include?('h-product') && html_class == 'review'
81
76
  result_set << 'h-review'
82
77
  end
83
- if @fmt_classes.include? 'h-recipe' and html_class == 'author'
78
+
79
+ if @fmt_classes.include?('h-recipe') && html_class == 'author'
84
80
  result_set << 'h-card'
85
81
  end
86
- if @fmt_classes.include? 'h-resume' and html_class == 'contact'
82
+
83
+ if @fmt_classes.include?('h-resume') && html_class == 'contact'
87
84
  result_set << 'h-card'
88
85
  end
89
- if @fmt_classes.include? 'h-resume' and html_class == 'education'
86
+
87
+ if @fmt_classes.include?('h-resume') && html_class == 'education'
90
88
  result_set << 'h-event'
91
89
  end
92
- if @fmt_classes.include? 'h-resume' and html_class == 'experience'
90
+
91
+ if @fmt_classes.include?('h-resume') && html_class == 'experience'
93
92
  result_set << 'h-event'
94
93
  end
95
- if @fmt_classes.include? 'h-resume' and html_class == 'affiliation'
94
+
95
+ if @fmt_classes.include?('h-resume') && html_class == 'affiliation'
96
96
  result_set << 'h-card'
97
97
  end
98
- if @fmt_classes.include? 'h-review' and html_class == 'reviewer'
98
+
99
+ if @fmt_classes.include?('h-review') && html_class == 'reviewer'
99
100
  result_set << 'h-card'
100
101
  end
101
- if @fmt_classes.include? 'h-review' and html_class == 'item'
102
- if not html_classes.include? 'vcard' and not html_classes.include? 'vevent' and not html_classes.include? 'hproduct'
102
+
103
+ if @fmt_classes.include?('h-review') && html_class == 'item'
104
+ if !html_classes.include?('vcard') && !html_classes.include?('vevent') && !html_classes.include?('hproduct')
103
105
  result_set << 'h-item'
104
106
  end
105
107
  end
106
- if @fmt_classes.include? 'h-review-aggregate' and html_class == 'item'
107
- if not html_classes.include? 'vcard' and not html_classes.include? 'vevent' and not html_classes.include? 'hproduct'
108
+
109
+ if @fmt_classes.include?('h-review-aggregate') && html_class == 'item'
110
+ if !html_classes.include?('vcard') && !html_classes.include?('vevent') && !html_classes.include?('hproduct')
108
111
  result_set << 'h-item'
109
112
  end
110
113
  end
111
- if @fmt_classes.include? 'h-review-aggregate' and html_class == 'reviewer'
114
+
115
+ if @fmt_classes.include?('h-review-aggregate') && html_class == 'reviewer'
112
116
  result_set << 'h-card'
113
117
  end
114
- if @fmt_classes.include? 'h-entry' and html_class == 'location'
118
+
119
+ if @fmt_classes.include?('h-entry') && html_class == 'location'
115
120
  result_set << 'h-adr'
116
121
  result_set << 'h-card'
117
122
  end
118
- if @fmt_classes.include? 'h-feed' and html_class == 'author'
123
+
124
+ if @fmt_classes.include?('h-feed') && html_class == 'author'
119
125
  result_set << 'h-card'
120
126
  end
121
127
  end
122
-
123
128
  end
129
+
124
130
  result_set.uniq
125
131
  end
126
132
 
@@ -134,195 +140,199 @@ module Microformats
134
140
  result_set = []
135
141
  rels = element.attribute('rel').to_s.split
136
142
 
137
- if @fmt_classes.include? 'h-entry' and rels.include? 'bookmark'
143
+ if @fmt_classes.include?('h-entry') && rels.include?('bookmark')
138
144
  result_set << 'u-url'
139
145
  end
140
- if @fmt_classes.include? 'h-entry' and rels.include? 'tag'
146
+
147
+ if @fmt_classes.include?('h-entry') && rels.include?('tag')
141
148
  result_set << 'p-category'
142
149
  end
143
- if @fmt_classes.include? 'h-recipe' and rels.include? 'tag'
150
+
151
+ if @fmt_classes.include?('h-recipe') && rels.include?('tag')
144
152
  result_set << 'p-category'
145
153
  end
146
- if @fmt_classes.include? 'h-review' and rels.include? 'tag'
154
+
155
+ if @fmt_classes.include?('h-review') && rels.include?('tag')
147
156
  result_set << 'p-category'
148
157
  end
149
- if @fmt_classes.include? 'h-feed' and rels.include? 'tag'
158
+
159
+ if @fmt_classes.include?('h-feed') && rels.include?('tag')
150
160
  result_set << 'p-category'
151
161
  end
152
- if @fmt_classes.include? 'h-review' and rels.include? 'self' and rels.include? 'bookmark'
162
+
163
+ if @fmt_classes.include?('h-review') && rels.include?('self') && rels.include?('bookmark')
153
164
  result_set << 'u-url'
154
165
  end
155
- if @fmt_classes.include? 'h-news' and rels.include? 'principles'
166
+
167
+ if @fmt_classes.include?('h-news') && rels.include?('principles')
156
168
  result_set << 'u-principles'
157
169
  end
158
170
 
159
- #TODO PROPOSED convert time.entry-date[datetime] to dt-published see wiki/h-entry
160
- #TODO PROPOSED convert rel=author to u-author see wiki/h-entry
171
+ # TODO: PROPOSED convert time.entry-date[datetime] to dt-published see wiki/h-entry
172
+ # TODO: PROPOSED convert rel=author to u-author see wiki/h-entry
161
173
 
162
174
  element.attribute('class').to_s.split.each do |html_class|
163
-
164
- if @fmt_classes.include? 'h-adr'
165
- if [ 'post-office-box', 'extended-address', 'street-address', 'locality', 'region', 'postal-code', 'country-name' ].include? html_class
175
+ if @fmt_classes.include?('h-adr')
176
+ if %w[post-office-box extended-address street-address locality region postal-code country-name].include?(html_class)
166
177
  result_set << 'p-' + html_class
167
178
  end
168
179
  end
169
180
 
170
- if @fmt_classes.include? 'h-geo'
171
- if [ 'longitude', 'latitude' ].include? html_class
181
+ if @fmt_classes.include?('h-geo')
182
+ if %w[longitude latitude].include?(html_class)
172
183
  result_set << 'p-' + html_class
173
184
  end
174
185
  end
175
186
 
176
- if @fmt_classes.include? 'h-entry'
177
- if html_class == 'entry-title'
187
+ if @fmt_classes.include?('h-entry')
188
+ if html_class == 'entry-title'
178
189
  result_set << 'p-name'
179
- elsif html_class == 'entry-summary'
190
+ elsif html_class == 'entry-summary'
180
191
  result_set << 'p-summary'
181
- elsif html_class == 'entry-content'
192
+ elsif html_class == 'entry-content'
182
193
  result_set << 'e-content'
183
- elsif ['updated', 'published'].include? html_class
194
+ elsif %w[updated published].include?(html_class)
184
195
  result_set << 'dt-' + html_class
185
- elsif [ 'category', 'author' ].include? html_class
196
+ elsif %w[category author].include?(html_class)
186
197
  result_set << 'p-' + html_class
187
198
  end
188
199
  end
189
200
 
190
- #h-news isn't even listed in backcompat list, adding to follow test suite
191
- if @fmt_classes.include? 'h-news'
192
- if [ 'source-org', 'entry', 'dateline', 'geo' ].include? html_class
201
+ # h-news isn't even listed in backcompat list, adding to follow test suite
202
+ if @fmt_classes.include?('h-news')
203
+ if %w[source-org entry dateline geo].include?(html_class)
193
204
  result_set << 'p-' + html_class
194
205
  end
195
206
  end
196
207
 
197
- if @fmt_classes.include? 'h-feed'
198
- if html_class == 'fn'
208
+ if @fmt_classes.include?('h-feed')
209
+ if html_class == 'fn'
199
210
  result_set << 'p-name'
200
- elsif [ 'author', 'summary' ].include? html_class
211
+ elsif %w[author summary].include?(html_class)
201
212
  result_set << 'p-' + html_class
202
- elsif ['photo', 'url'].include? html_class
213
+ elsif %w[photo url].include?(html_class)
203
214
  result_set << 'u-' + html_class
204
215
  end
205
216
  end
206
217
 
207
- if @fmt_classes.include? 'h-item'
208
- if html_class == 'fn'
218
+ if @fmt_classes.include?('h-item')
219
+ if html_class == 'fn'
209
220
  result_set << 'p-name'
210
- elsif ['photo', 'url'].include? html_class
221
+ elsif %w[photo url].include?(html_class)
211
222
  result_set << 'u-' + html_class
212
223
  end
213
224
  end
214
225
 
215
- if @fmt_classes.include? 'h-product'
216
- if html_class == 'fn'
226
+ if @fmt_classes.include?('h-product')
227
+ if html_class == 'fn'
217
228
  result_set << 'p-name'
218
- elsif ['photo', 'url', 'identifier'].include? html_class
229
+ elsif %w[photo url identifier].include?(html_class)
219
230
  result_set << 'u-' + html_class
220
- elsif [ 'brand', 'category', 'price', 'review', 'description' ].include? html_class
231
+ elsif %w[brand category price review description].include?(html_class)
221
232
  result_set << 'p-' + html_class
222
233
  end
223
234
  end
224
235
 
225
- if @fmt_classes.include? 'h-recipe'
226
- if html_class == 'fn'
236
+ if @fmt_classes.include?('h-recipe')
237
+ if html_class == 'fn'
227
238
  result_set << 'p-name'
228
- elsif html_class == 'instructions'
239
+ elsif html_class == 'instructions'
229
240
  result_set << 'e-instructions'
230
- elsif html_class == 'duration'
241
+ elsif html_class == 'duration'
231
242
  result_set << 'dt-duration'
232
- elsif html_class == 'photo'
243
+ elsif html_class == 'photo'
233
244
  result_set << 'u-photo'
234
- elsif [ 'ingredient', 'category', 'yield', 'summary', 'nutrition', 'author' ].include? html_class
245
+ elsif %w[ingredient category yield summary nutrition author].include?(html_class)
235
246
  result_set << 'p-' + html_class
236
247
  end
237
248
  end
238
249
 
239
- if @fmt_classes.include? 'h-resume'
240
- if [ 'skill', 'summary', 'contact', 'education', 'experience', 'affiliation' ].include? html_class
250
+ if @fmt_classes.include?('h-resume')
251
+ if %w[skill summary contact education experience affiliation].include?(html_class)
241
252
  result_set << 'p-' + html_class
242
253
  end
243
254
  end
244
255
 
245
- if @fmt_classes.include? 'h-review'
246
- if html_class == 'summary'
256
+ if @fmt_classes.include?('h-review')
257
+ if html_class == 'summary'
247
258
  result_set << 'p-name'
248
- elsif html_class == 'fn'
259
+ elsif html_class == 'fn'
249
260
  result_set << 'p-name'
250
- elsif html_class == 'reviewer'
261
+ elsif html_class == 'reviewer'
251
262
  result_set << 'p-author'
252
- elsif html_class == 'dtreviewed'
263
+ elsif html_class == 'dtreviewed'
253
264
  result_set << 'dt-published'
254
- elsif html_class == 'description'
265
+ elsif html_class == 'description'
255
266
  result_set << 'e-content'
256
- elsif ['photo', 'url', 'identifier'].include? html_class
267
+ elsif %w[photo url identifier].include?(html_class)
257
268
  result_set << 'u-' + html_class
258
- elsif [ 'rating', 'best', 'worst', 'item'].include? html_class
269
+ elsif %w[rating best worst item].include?(html_class)
259
270
  result_set << 'p-' + html_class
260
271
  end
261
272
  end
262
273
 
263
- if @fmt_classes.include? 'h-review-aggregate'
264
- if html_class == 'summary'
274
+ if @fmt_classes.include?('h-review-aggregate')
275
+ if html_class == 'summary'
265
276
  result_set << 'p-name'
266
- elsif html_class == 'fn'
277
+ elsif html_class == 'fn'
267
278
  result_set << 'p-name'
268
- elsif html_class == 'reviewer'
279
+ elsif html_class == 'reviewer'
269
280
  result_set << 'p-author'
270
- elsif html_class == 'dtreviewed'
281
+ elsif html_class == 'dtreviewed'
271
282
  result_set << 'dt-published'
272
- elsif html_class == 'description'
283
+ elsif html_class == 'description'
273
284
  result_set << 'e-content'
274
- elsif ['photo', 'url', 'identifier'].include? html_class
285
+ elsif %w[photo url identifier].include?(html_class)
275
286
  result_set << 'u-' + html_class
276
- elsif [ 'rating', 'best', 'worst', 'item', 'count', 'votes', 'average' ].include? html_class
287
+ elsif %w[rating best worst item count votes average].include?(html_class)
277
288
  result_set << 'p-' + html_class
278
289
  end
279
290
  end
280
291
 
281
- if @fmt_classes.include? 'h-event'
282
- if html_class == 'summary'
292
+ if @fmt_classes.include?('h-event')
293
+ if html_class == 'summary'
283
294
  result_set << 'p-name'
284
- elsif html_class == 'dtstart'
295
+ elsif html_class == 'dtstart'
285
296
  result_set << 'dt-start'
286
- elsif html_class == 'dtend'
297
+ elsif html_class == 'dtend'
287
298
  result_set << 'dt-end'
288
- elsif html_class == 'duration'
299
+ elsif html_class == 'duration'
289
300
  result_set << 'dt-duration'
290
- elsif html_class == 'geo'
301
+ elsif html_class == 'geo'
291
302
  result_set << 'p-location'
292
- elsif ['url'].include? html_class
303
+ elsif %w[url].include?(html_class)
293
304
  result_set << 'u-' + html_class
294
- elsif [ 'description', 'category', 'location', 'attendee'].include? html_class
305
+ elsif %w[description category location attendee].include?(html_class)
295
306
  result_set << 'p-' + html_class
296
307
  end
297
308
  end
298
309
 
299
- if @fmt_classes.include? 'h-card'
300
- if html_class == 'fn'
310
+ if @fmt_classes.include?('h-card')
311
+ if html_class == 'fn'
301
312
  result_set << 'p-name'
302
- elsif html_class == 'bday'
313
+ elsif html_class == 'bday'
303
314
  result_set << 'dt-bday'
304
- elsif html_class == 'title'
315
+ elsif html_class == 'title'
305
316
  result_set << 'p-job-title'
306
- elsif html_class == 'rev'
317
+ elsif html_class == 'rev'
307
318
  result_set << 'dt-rev'
308
- elsif ['email', 'logo', 'photo', 'url', 'uid', 'key'].include? html_class
319
+ elsif %w[email logo photo url uid key].include?(html_class)
309
320
  result_set << 'u-' + html_class
310
- elsif [ 'honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix', 'nickname',
311
- 'category', 'adr', 'extended-address', 'street-address', 'locality', 'region', 'postal-code', 'country-name',
312
- 'label', 'geo', 'latitude', 'longitude', 'tel', 'note', 'org', 'organization-name', 'organization-unit', 'role', 'tz' ].include? html_class
321
+ elsif %w[honorific-prefix given-name additional-name family-name honorific-suffix nickname
322
+ category adr extended-address street-address locality region postal-code country-name
323
+ label geo latitude longitude tel note org organization-name organization-unit role tz].include?(html_class)
313
324
  result_set << 'p-' + html_class
314
325
 
315
- #these aren't listed in the wiki, may be removed
316
- elsif ['sound'].include? html_class
326
+ # these aren't listed in the wiki, may be removed
327
+ elsif %w[sound].include?(html_class)
317
328
  result_set << 'u-' + html_class
318
- #these aren't listed in the wiki, may be removed
319
- elsif ['agent', 'mailer', 'sort-string', 'class'].include? html_class
329
+ # these aren't listed in the wiki, may be removed
330
+ elsif %w[agent mailer sort-string class].include?(html_class)
320
331
  result_set << 'p-' + html_class
321
-
322
332
  end
323
333
  end
324
-
325
334
  end
335
+
326
336
  result_set.uniq
327
337
  end
328
338
 
@@ -331,13 +341,36 @@ module Microformats
331
341
  html_class =~ VALUE_CLASS_REG_EXP
332
342
  end
333
343
  end
344
+
334
345
  def value_title_classes(element)
335
346
  element.attribute('class').to_s.split.select do |html_class|
336
347
  html_class =~ VALUE_TITLE_CLASS_REG_EXP
337
348
  end
338
349
  end
339
350
 
340
- end
351
+ def render_and_strip(data)
352
+ new_doc = Nokogiri::HTML(data)
353
+ new_doc.xpath('//script|//style').remove
354
+ new_doc.text.strip
355
+ end
341
356
 
342
- end
357
+ def render_text(in_node, base: nil)
358
+ doc = Nokogiri::HTML(in_node.inner_html)
359
+
360
+ doc.xpath('//script|//style').remove
361
+
362
+ # cannot use doc.css('img').each as it makes a copy of them, it does not modify the original
363
+ doc.traverse do |node|
364
+ next unless node.name == 'img'
365
+
366
+ if !node.attribute('alt').nil?
367
+ node.replace(node.attribute('alt').value.to_s)
368
+ elsif !node.attribute('src').nil?
369
+ node.replace(Microformats::AbsoluteUri.new(node.attribute('src').value.to_s, base: @base).absolutize)
370
+ end
371
+ end
343
372
 
373
+ doc.text.strip
374
+ end
375
+ end
376
+ end