microformats 0.3 → 4.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 (353) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/Guardfile +5 -0
  7. data/LICENSE.md +36 -0
  8. data/README.md +228 -0
  9. data/Rakefile +7 -25
  10. data/lib/microformats.rb +25 -9
  11. data/lib/microformats/absolute_uri.rb +30 -0
  12. data/lib/microformats/format_parser.rb +343 -0
  13. data/lib/microformats/parser.rb +105 -0
  14. data/lib/microformats/parser_core.rb +343 -0
  15. data/lib/microformats/property_parser.rb +122 -0
  16. data/lib/microformats/results/collection.rb +121 -0
  17. data/lib/microformats/results/parser_result.rb +111 -0
  18. data/lib/microformats/results/property_set.rb +87 -0
  19. data/lib/microformats/time_property_parser.rb +161 -0
  20. data/lib/microformats/version.rb +3 -0
  21. data/microformats.gemspec +37 -0
  22. data/spec/lib/microformats/absolute_uri_spec.rb +48 -0
  23. data/spec/lib/microformats/parser_spec.rb +72 -0
  24. data/spec/lib/microformats_spec.rb +33 -0
  25. data/spec/spec_helper.rb +10 -0
  26. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.html +2 -0
  27. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.js +9 -0
  28. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.html +2 -0
  29. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.js +10 -0
  30. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.html +5 -0
  31. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.js +11 -0
  32. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.html +17 -0
  33. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.js +20 -0
  34. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.html +16 -0
  35. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.js +24 -0
  36. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.html +7 -0
  37. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.js +11 -0
  38. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.html +9 -0
  39. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.js +18 -0
  40. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.html +9 -0
  41. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.js +18 -0
  42. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.html +9 -0
  43. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.js +17 -0
  44. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.html +9 -0
  45. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.js +17 -0
  46. data/spec/support/lib/microformats/implied_property/name-fail.html +60 -0
  47. data/spec/support/lib/microformats/implied_property/name-pass.html +30 -0
  48. data/spec/support/lib/microformats/implied_property/photo-fail.html +60 -0
  49. data/spec/support/lib/microformats/implied_property/photo-pass.html +30 -0
  50. data/spec/support/lib/microformats/implied_property/url-fail.html +18 -0
  51. data/spec/support/lib/microformats/implied_property/url-pass.html +12 -0
  52. data/spec/support/lib/microformats/implied_property/url-relative.html +13 -0
  53. data/spec/support/lib/microformats/implied_property/url-unnormalized.html +12 -0
  54. data/spec/support/lib/microformats/nested-format-with-property-of-same-name.html +13 -0
  55. data/spec/support/lib/microformats/nested-format-with-property-of-same-name.js +16 -0
  56. data/spec/support/lib/microformats/nested-format-with-property.html +12 -0
  57. data/spec/support/lib/microformats/nested-format-with-property.js +16 -0
  58. data/spec/support/lib/microformats/nested-format-without-property.html +13 -0
  59. data/spec/support/lib/microformats/nested-property.html +12 -0
  60. data/spec/support/lib/microformats/nested-property.js +10 -0
  61. data/spec/support/lib/microformats/rels-that-drop-the-base.html +11 -0
  62. data/spec/support/lib/microformats/rels-with-unnormalized-urls.html +11 -0
  63. data/spec/support/lib/microformats/rels.html +12 -0
  64. data/spec/support/lib/microformats/rels.js +13 -0
  65. data/spec/support/lib/microformats/simple.html +23 -0
  66. data/spec/support/lib/microformats/simple.js +11 -0
  67. data/vendor/tests/.gitignore +25 -0
  68. data/vendor/tests/LICENSE.md +36 -0
  69. data/vendor/tests/README.md +48 -0
  70. data/vendor/tests/app.js +84 -0
  71. data/vendor/tests/composer.json +5 -0
  72. data/vendor/tests/css/testsuite.css +159 -0
  73. data/vendor/tests/interface.js +18 -0
  74. data/vendor/tests/package.json +27 -0
  75. data/vendor/tests/tests/microformats-mixed/h-card/change-log.html +63 -0
  76. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.html +14 -0
  77. data/vendor/tests/tests/microformats-mixed/h-card/mixedpropertries.json +22 -0
  78. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.html +1 -0
  79. data/vendor/tests/tests/microformats-mixed/h-card/tworoots.json +10 -0
  80. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.html +16 -0
  81. data/vendor/tests/tests/microformats-mixed/h-entry/mixedroots.json +38 -0
  82. data/vendor/tests/tests/microformats-mixed/h-resume/change-log.html +68 -0
  83. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.html +16 -0
  84. data/vendor/tests/tests/microformats-mixed/h-resume/mixedroots.json +31 -0
  85. data/vendor/tests/tests/microformats-v1/adr/change-log.html +63 -0
  86. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.html +8 -0
  87. data/vendor/tests/tests/microformats-v1/adr/simpleproperties.json +15 -0
  88. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.html +5 -0
  89. data/vendor/tests/tests/microformats-v1/geo/abbrpattern.json +11 -0
  90. data/vendor/tests/tests/microformats-v1/geo/change-log.1.html +78 -0
  91. data/vendor/tests/tests/microformats-v1/geo/change-log.html +63 -0
  92. data/vendor/tests/tests/microformats-v1/geo/hidden.html +10 -0
  93. data/vendor/tests/tests/microformats-v1/geo/hidden.json +11 -0
  94. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.html +6 -0
  95. data/vendor/tests/tests/microformats-v1/geo/simpleproperties.json +11 -0
  96. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.html +11 -0
  97. data/vendor/tests/tests/microformats-v1/geo/valuetitleclass.json +11 -0
  98. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.html +41 -0
  99. data/vendor/tests/tests/microformats-v1/hcalendar/ampm.json +21 -0
  100. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.html +13 -0
  101. data/vendor/tests/tests/microformats-v1/hcalendar/attendees.json +37 -0
  102. data/vendor/tests/tests/microformats-v1/hcalendar/change-log.html +68 -0
  103. data/vendor/tests/tests/microformats-v1/hcalendar/combining.html +15 -0
  104. data/vendor/tests/tests/microformats-v1/hcalendar/combining.json +31 -0
  105. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.html +7 -0
  106. data/vendor/tests/tests/microformats-v1/hcalendar/concatenate.json +12 -0
  107. data/vendor/tests/tests/microformats-v1/hcalendar/time.html +44 -0
  108. data/vendor/tests/tests/microformats-v1/hcalendar/time.json +22 -0
  109. data/vendor/tests/tests/microformats-v1/hcard/change-log.html +68 -0
  110. data/vendor/tests/tests/microformats-v1/hcard/email.html +14 -0
  111. data/vendor/tests/tests/microformats-v1/hcard/email.json +11 -0
  112. data/vendor/tests/tests/microformats-v1/hcard/format.html +6 -0
  113. data/vendor/tests/tests/microformats-v1/hcard/format.json +11 -0
  114. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.html +3 -0
  115. data/vendor/tests/tests/microformats-v1/hcard/hyperlinkedphoto.json +8 -0
  116. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.html +1 -0
  117. data/vendor/tests/tests/microformats-v1/hcard/justahyperlink.json +8 -0
  118. data/vendor/tests/tests/microformats-v1/hcard/justaname.html +1 -0
  119. data/vendor/tests/tests/microformats-v1/hcard/justaname.json +8 -0
  120. data/vendor/tests/tests/microformats-v1/hcard/multiple.html +74 -0
  121. data/vendor/tests/tests/microformats-v1/hcard/multiple.json +65 -0
  122. data/vendor/tests/tests/microformats-v1/hcard/name.html +11 -0
  123. data/vendor/tests/tests/microformats-v1/hcard/name.json +15 -0
  124. data/vendor/tests/tests/microformats-v1/hcard/single.html +14 -0
  125. data/vendor/tests/tests/microformats-v1/hcard/single.json +24 -0
  126. data/vendor/tests/tests/microformats-v1/hentry/change-log.html +73 -0
  127. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.html +20 -0
  128. data/vendor/tests/tests/microformats-v1/hentry/summarycontent.json +24 -0
  129. data/vendor/tests/tests/microformats-v1/hfeed/simple.html +30 -0
  130. data/vendor/tests/tests/microformats-v1/hfeed/simple.json +49 -0
  131. data/vendor/tests/tests/microformats-v1/hnews/all.html +37 -0
  132. data/vendor/tests/tests/microformats-v1/hnews/all.json +74 -0
  133. data/vendor/tests/tests/microformats-v1/hnews/change-log.html +72 -0
  134. data/vendor/tests/tests/microformats-v1/hnews/minimum.html +25 -0
  135. data/vendor/tests/tests/microformats-v1/hnews/minimum.json +48 -0
  136. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.html +26 -0
  137. data/vendor/tests/tests/microformats-v1/hproduct/aggregate.json +52 -0
  138. data/vendor/tests/tests/microformats-v1/hproduct/change-log.html +62 -0
  139. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.html +13 -0
  140. data/vendor/tests/tests/microformats-v1/hproduct/simpleproperties.json +33 -0
  141. data/vendor/tests/tests/microformats-v1/hresume/affiliation.html +12 -0
  142. data/vendor/tests/tests/microformats-v1/hresume/affiliation.json +25 -0
  143. data/vendor/tests/tests/microformats-v1/hresume/change-log.html +73 -0
  144. data/vendor/tests/tests/microformats-v1/hresume/contact.html +18 -0
  145. data/vendor/tests/tests/microformats-v1/hresume/contact.json +32 -0
  146. data/vendor/tests/tests/microformats-v1/hresume/education.html +13 -0
  147. data/vendor/tests/tests/microformats-v1/hresume/education.json +29 -0
  148. data/vendor/tests/tests/microformats-v1/hresume/skill.html +12 -0
  149. data/vendor/tests/tests/microformats-v1/hresume/skill.json +33 -0
  150. data/vendor/tests/tests/microformats-v1/hresume/work.html +16 -0
  151. data/vendor/tests/tests/microformats-v1/hresume/work.json +30 -0
  152. data/vendor/tests/tests/microformats-v1/hreview-aggregate/change-log.html +67 -0
  153. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.html +18 -0
  154. data/vendor/tests/tests/microformats-v1/hreview-aggregate/hcard.json +31 -0
  155. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.html +6 -0
  156. data/vendor/tests/tests/microformats-v1/hreview-aggregate/justahyperlink.json +19 -0
  157. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.html +13 -0
  158. data/vendor/tests/tests/microformats-v1/hreview-aggregate/vevent.json +22 -0
  159. data/vendor/tests/tests/microformats-v1/hreview/change-log.html +73 -0
  160. data/vendor/tests/tests/microformats-v1/hreview/item.html +8 -0
  161. data/vendor/tests/tests/microformats-v1/hreview/item.json +19 -0
  162. data/vendor/tests/tests/microformats-v1/hreview/vcard.html +23 -0
  163. data/vendor/tests/tests/microformats-v1/hreview/vcard.json +58 -0
  164. data/vendor/tests/tests/microformats-v1/includes/change-log.html +72 -0
  165. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.html +16 -0
  166. data/vendor/tests/tests/microformats-v1/includes/hcarditemref.json +49 -0
  167. data/vendor/tests/tests/microformats-v1/includes/heventitemref.html +25 -0
  168. data/vendor/tests/tests/microformats-v1/includes/heventitemref.json +33 -0
  169. data/vendor/tests/tests/microformats-v1/includes/hyperlink.html +18 -0
  170. data/vendor/tests/tests/microformats-v1/includes/hyperlink.json +43 -0
  171. data/vendor/tests/tests/microformats-v1/includes/object.html +23 -0
  172. data/vendor/tests/tests/microformats-v1/includes/object.json +42 -0
  173. data/vendor/tests/tests/microformats-v1/includes/table.html +12 -0
  174. data/vendor/tests/tests/microformats-v1/includes/table.json +19 -0
  175. data/vendor/tests/tests/microformats-v2/h-adr/change-log.html +62 -0
  176. data/vendor/tests/tests/microformats-v2/h-adr/geo.html +10 -0
  177. data/vendor/tests/tests/microformats-v2/h-adr/geo.json +16 -0
  178. data/vendor/tests/tests/microformats-v2/h-adr/geourl.html +4 -0
  179. data/vendor/tests/tests/microformats-v2/h-adr/geourl.json +13 -0
  180. data/vendor/tests/tests/microformats-v2/h-adr/justaname.html +1 -0
  181. data/vendor/tests/tests/microformats-v2/h-adr/justaname.json +10 -0
  182. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.html +21 -0
  183. data/vendor/tests/tests/microformats-v2/h-adr/lettercase.json +12 -0
  184. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.html +8 -0
  185. data/vendor/tests/tests/microformats-v2/h-adr/simpleproperties.json +16 -0
  186. data/vendor/tests/tests/microformats-v2/h-as-note/note.html +56 -0
  187. data/vendor/tests/tests/microformats-v2/h-as-note/note.json +98 -0
  188. data/vendor/tests/tests/microformats-v2/h-card/baseurl.html +6 -0
  189. data/vendor/tests/tests/microformats-v2/h-card/baseurl.json +26 -0
  190. data/vendor/tests/tests/microformats-v2/h-card/change-log.html +100 -0
  191. data/vendor/tests/tests/microformats-v2/h-card/childimplied.html +7 -0
  192. data/vendor/tests/tests/microformats-v2/h-card/childimplied.json +12 -0
  193. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.html +10 -0
  194. data/vendor/tests/tests/microformats-v2/h-card/extendeddescription.json +15 -0
  195. data/vendor/tests/tests/microformats-v2/h-card/hcard.html +4 -0
  196. data/vendor/tests/tests/microformats-v2/h-card/hcard.json +19 -0
  197. data/vendor/tests/tests/microformats-v2/h-card/horghcard.html +4 -0
  198. data/vendor/tests/tests/microformats-v2/h-card/horghcard.json +19 -0
  199. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.html +3 -0
  200. data/vendor/tests/tests/microformats-v2/h-card/hyperlinkedphoto.json +12 -0
  201. data/vendor/tests/tests/microformats-v2/h-card/impliedname.html +15 -0
  202. data/vendor/tests/tests/microformats-v2/h-card/impliedname.json +90 -0
  203. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.html +11 -0
  204. data/vendor/tests/tests/microformats-v2/h-card/impliedphoto.json +72 -0
  205. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.html +5 -0
  206. data/vendor/tests/tests/microformats-v2/h-card/impliedurl.json +45 -0
  207. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.html +1 -0
  208. data/vendor/tests/tests/microformats-v2/h-card/justahyperlink.json +11 -0
  209. data/vendor/tests/tests/microformats-v2/h-card/justaname.html +1 -0
  210. data/vendor/tests/tests/microformats-v2/h-card/justaname.json +10 -0
  211. data/vendor/tests/tests/microformats-v2/h-card/nested.html +4 -0
  212. data/vendor/tests/tests/microformats-v2/h-card/nested.json +18 -0
  213. data/vendor/tests/tests/microformats-v2/h-card/p-property.html +21 -0
  214. data/vendor/tests/tests/microformats-v2/h-card/p-property.json +15 -0
  215. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.html +6 -0
  216. data/vendor/tests/tests/microformats-v2/h-card/relativeurls.json +29 -0
  217. data/vendor/tests/tests/microformats-v2/h-entry/change-log.html +90 -0
  218. data/vendor/tests/tests/microformats-v2/h-entry/encoding.html +3 -0
  219. data/vendor/tests/tests/microformats-v2/h-entry/encoding.json +14 -0
  220. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.html +9 -0
  221. data/vendor/tests/tests/microformats-v2/h-entry/impliedvalue-nested.json +27 -0
  222. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.html +1 -0
  223. data/vendor/tests/tests/microformats-v2/h-entry/justahyperlink.json +11 -0
  224. data/vendor/tests/tests/microformats-v2/h-entry/justaname.html +1 -0
  225. data/vendor/tests/tests/microformats-v2/h-entry/justaname.json +10 -0
  226. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.html +4 -0
  227. data/vendor/tests/tests/microformats-v2/h-entry/scriptstyletags.json +14 -0
  228. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.html +20 -0
  229. data/vendor/tests/tests/microformats-v2/h-entry/summarycontent.json +25 -0
  230. data/vendor/tests/tests/microformats-v2/h-entry/u-property.html +33 -0
  231. data/vendor/tests/tests/microformats-v2/h-entry/u-property.json +12 -0
  232. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.html +13 -0
  233. data/vendor/tests/tests/microformats-v2/h-entry/urlincontent.json +14 -0
  234. data/vendor/tests/tests/microformats-v2/h-event/ampm.html +41 -0
  235. data/vendor/tests/tests/microformats-v2/h-event/ampm.json +21 -0
  236. data/vendor/tests/tests/microformats-v2/h-event/attendees.html +13 -0
  237. data/vendor/tests/tests/microformats-v2/h-event/attendees.json +37 -0
  238. data/vendor/tests/tests/microformats-v2/h-event/change-log.html +82 -0
  239. data/vendor/tests/tests/microformats-v2/h-event/combining.html +13 -0
  240. data/vendor/tests/tests/microformats-v2/h-event/combining.json +25 -0
  241. data/vendor/tests/tests/microformats-v2/h-event/concatenate.html +8 -0
  242. data/vendor/tests/tests/microformats-v2/h-event/concatenate.json +12 -0
  243. data/vendor/tests/tests/microformats-v2/h-event/dates.html +13 -0
  244. data/vendor/tests/tests/microformats-v2/h-event/dates.json +26 -0
  245. data/vendor/tests/tests/microformats-v2/h-event/dt-property.html +23 -0
  246. data/vendor/tests/tests/microformats-v2/h-event/dt-property.json +20 -0
  247. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.html +1 -0
  248. data/vendor/tests/tests/microformats-v2/h-event/justahyperlink.json +11 -0
  249. data/vendor/tests/tests/microformats-v2/h-event/justaname.html +1 -0
  250. data/vendor/tests/tests/microformats-v2/h-event/justaname.json +10 -0
  251. data/vendor/tests/tests/microformats-v2/h-event/time.html +47 -0
  252. data/vendor/tests/tests/microformats-v2/h-event/time.json +25 -0
  253. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.html +30 -0
  254. data/vendor/tests/tests/microformats-v2/h-feed/implied-title.json +23 -0
  255. data/vendor/tests/tests/microformats-v2/h-feed/simple.html +26 -0
  256. data/vendor/tests/tests/microformats-v2/h-feed/simple.json +33 -0
  257. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.html +5 -0
  258. data/vendor/tests/tests/microformats-v2/h-geo/abbrpattern.json +12 -0
  259. data/vendor/tests/tests/microformats-v2/h-geo/altitude.html +8 -0
  260. data/vendor/tests/tests/microformats-v2/h-geo/altitude.json +13 -0
  261. data/vendor/tests/tests/microformats-v2/h-geo/change-log.html +67 -0
  262. data/vendor/tests/tests/microformats-v2/h-geo/hidden.html +10 -0
  263. data/vendor/tests/tests/microformats-v2/h-geo/hidden.json +12 -0
  264. data/vendor/tests/tests/microformats-v2/h-geo/justaname.html +3 -0
  265. data/vendor/tests/tests/microformats-v2/h-geo/justaname.json +10 -0
  266. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.html +5 -0
  267. data/vendor/tests/tests/microformats-v2/h-geo/simpleproperties.json +12 -0
  268. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.html +11 -0
  269. data/vendor/tests/tests/microformats-v2/h-geo/valuetitleclass.json +12 -0
  270. data/vendor/tests/tests/microformats-v2/h-news/all.html +35 -0
  271. data/vendor/tests/tests/microformats-v2/h-news/all.json +51 -0
  272. data/vendor/tests/tests/microformats-v2/h-news/change-log.html +78 -0
  273. data/vendor/tests/tests/microformats-v2/h-news/minimum.html +24 -0
  274. data/vendor/tests/tests/microformats-v2/h-news/minimum.json +40 -0
  275. data/vendor/tests/tests/microformats-v2/h-org/change-log.html +57 -0
  276. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.html +1 -0
  277. data/vendor/tests/tests/microformats-v2/h-org/hyperlink.json +11 -0
  278. data/vendor/tests/tests/microformats-v2/h-org/simple.html +1 -0
  279. data/vendor/tests/tests/microformats-v2/h-org/simple.json +10 -0
  280. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.html +4 -0
  281. data/vendor/tests/tests/microformats-v2/h-org/simpleproperties.json +12 -0
  282. data/vendor/tests/tests/microformats-v2/h-product/aggregate.html +21 -0
  283. data/vendor/tests/tests/microformats-v2/h-product/aggregate.json +45 -0
  284. data/vendor/tests/tests/microformats-v2/h-product/change-log.html +62 -0
  285. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.html +1 -0
  286. data/vendor/tests/tests/microformats-v2/h-product/justahyperlink.json +11 -0
  287. data/vendor/tests/tests/microformats-v2/h-product/justaname.html +1 -0
  288. data/vendor/tests/tests/microformats-v2/h-product/justaname.json +10 -0
  289. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.html +10 -0
  290. data/vendor/tests/tests/microformats-v2/h-product/simpleproperties.json +26 -0
  291. data/vendor/tests/tests/microformats-v2/h-recipe/all.html +63 -0
  292. data/vendor/tests/tests/microformats-v2/h-recipe/all.json +54 -0
  293. data/vendor/tests/tests/microformats-v2/h-recipe/change-log.html +62 -0
  294. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.html +7 -0
  295. data/vendor/tests/tests/microformats-v2/h-recipe/minimum.json +17 -0
  296. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.html +12 -0
  297. data/vendor/tests/tests/microformats-v2/h-resume/affiliation.json +20 -0
  298. data/vendor/tests/tests/microformats-v2/h-resume/change-log.html +78 -0
  299. data/vendor/tests/tests/microformats-v2/h-resume/contact.html +17 -0
  300. data/vendor/tests/tests/microformats-v2/h-resume/contact.json +26 -0
  301. data/vendor/tests/tests/microformats-v2/h-resume/education.html +13 -0
  302. data/vendor/tests/tests/microformats-v2/h-resume/education.json +30 -0
  303. data/vendor/tests/tests/microformats-v2/h-resume/justaname.html +1 -0
  304. data/vendor/tests/tests/microformats-v2/h-resume/justaname.json +10 -0
  305. data/vendor/tests/tests/microformats-v2/h-resume/skill.html +12 -0
  306. data/vendor/tests/tests/microformats-v2/h-resume/skill.json +12 -0
  307. data/vendor/tests/tests/microformats-v2/h-resume/work.html +16 -0
  308. data/vendor/tests/tests/microformats-v2/h-resume/work.json +31 -0
  309. data/vendor/tests/tests/microformats-v2/h-review-aggregate/change-log.html +78 -0
  310. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.html +13 -0
  311. data/vendor/tests/tests/microformats-v2/h-review-aggregate/hevent.json +23 -0
  312. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.html +8 -0
  313. data/vendor/tests/tests/microformats-v2/h-review-aggregate/justahyperlink.json +19 -0
  314. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.html +18 -0
  315. data/vendor/tests/tests/microformats-v2/h-review-aggregate/simpleproperties.json +26 -0
  316. data/vendor/tests/tests/microformats-v2/h-review/change-log.html +84 -0
  317. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.html +1 -0
  318. data/vendor/tests/tests/microformats-v2/h-review/hyperlink.json +11 -0
  319. data/vendor/tests/tests/microformats-v2/h-review/implieditem.html +4 -0
  320. data/vendor/tests/tests/microformats-v2/h-review/implieditem.json +19 -0
  321. data/vendor/tests/tests/microformats-v2/h-review/item.html +8 -0
  322. data/vendor/tests/tests/microformats-v2/h-review/item.json +20 -0
  323. data/vendor/tests/tests/microformats-v2/h-review/justaname.html +1 -0
  324. data/vendor/tests/tests/microformats-v2/h-review/justaname.json +10 -0
  325. data/vendor/tests/tests/microformats-v2/h-review/photo.html +1 -0
  326. data/vendor/tests/tests/microformats-v2/h-review/photo.json +11 -0
  327. data/vendor/tests/tests/microformats-v2/h-review/vcard.html +23 -0
  328. data/vendor/tests/tests/microformats-v2/h-review/vcard.json +48 -0
  329. data/vendor/tests/tests/microformats-v2/rel/change-log.html +67 -0
  330. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.html +10 -0
  331. data/vendor/tests/tests/microformats-v2/rel/duplicate-rels.json +75 -0
  332. data/vendor/tests/tests/microformats-v2/rel/license.html +1 -0
  333. data/vendor/tests/tests/microformats-v2/rel/license.json +12 -0
  334. data/vendor/tests/tests/microformats-v2/rel/nofollow.html +1 -0
  335. data/vendor/tests/tests/microformats-v2/rel/nofollow.json +12 -0
  336. data/vendor/tests/tests/microformats-v2/rel/rel-urls.html +8 -0
  337. data/vendor/tests/tests/microformats-v2/rel/rel-urls.json +33 -0
  338. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.html +4 -0
  339. data/vendor/tests/tests/microformats-v2/rel/varying-text-duplicate-rels.json +20 -0
  340. data/vendor/tests/tests/microformats-v2/rel/xfn-all.html +19 -0
  341. data/vendor/tests/tests/microformats-v2/rel/xfn-all.json +92 -0
  342. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.html +10 -0
  343. data/vendor/tests/tests/microformats-v2/rel/xfn-elsewhere.json +40 -0
  344. metadata +533 -57
  345. data/CHANGELOG.rdoc +0 -6
  346. data/LICENSE +0 -20
  347. data/README.rdoc +0 -147
  348. data/lib/address.rb +0 -97
  349. data/lib/calendar.rb +0 -40
  350. data/lib/event.rb +0 -156
  351. data/lib/formatting_helpers.rb +0 -57
  352. data/lib/helpers.rb +0 -74
  353. data/lib/vcard.rb +0 -177
data/CHANGELOG.rdoc DELETED
@@ -1,6 +0,0 @@
1
- = Microformats CHANGELOG
2
-
3
- == Version 0.1
4
- * Initial Implementation of Vcard
5
- * Implements hCard microformat
6
- * Implements Google's Person microdata http://www.data-vocabulary.org/Person/
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2010 Chris Powers
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc DELETED
@@ -1,147 +0,0 @@
1
- = Microformats
2
-
3
- <b>STILL IN DEVELOPMENT, IT SHOULD WORK, BUT USE AT YOUR OWN RISK!</b>
4
-
5
- <em>Created by Chris Powers, September 11, 2010</em>
6
-
7
- == Two Great Tastes, One Great Library
8
-
9
- The goal of this Microformats library is to give the developer
10
- a series of simple view helper methods to richly markup their
11
- HTML documents using both the older Microformats standard and
12
- the new HTML5 Microdata standard.
13
-
14
- By using microformats, you are opening your data up to Google
15
- and other consumers for easy and intelligent consumption. In
16
- the future, Google plans on making consumed microdata
17
- directly searchable, which yields all sorts of new potential
18
- for relevant results.
19
-
20
- == Installation
21
-
22
- Install the Microformats gem as usual:
23
-
24
- gem install microformats
25
-
26
- == Getting Started
27
-
28
- To use Microformats, first include the Microformats::Helper
29
- mixin into your view layer, like this in Rails:
30
-
31
- # in app/helpers/application_helper.rb
32
- module Application Helper
33
- include Microformats::Helpers
34
- end
35
-
36
- == Usage: vCards and Addresses
37
-
38
- You can easily markup a person and/or organization using the
39
- <tt>vcard</tt> helper method. This will use both the hCard Microformat
40
- and the http://www.data-vocabulary.org/Person microdata.
41
-
42
- <b>PLEASE NOTE:</b> These two microdata standards do
43
- not support the same fields. For example, hCard gives a person
44
- telephone numbers and email addresses. The Person microdata only
45
- gives organizations a single telephone number and has no support
46
- for email.
47
-
48
- vCards can embed addresses using the Microformats::Vcard#address
49
- method, which gives you a block to run with a new
50
- Microformats::Address object.
51
-
52
- EXAMPLE (using ERB):
53
-
54
- <% vcard do |card| %>
55
- <%= card.photo "/images/me.jpg", :size => '200x300' %>
56
- <%= card.name "John Doe" %>
57
- <%= card.url "Visit my Site", :href => "http://mydomain.com" %>
58
- <%= card.phone "999.888.7766", :type => 'Home' %>
59
- <%= card.phone "111.222.3344", :type => 'Work' %>
60
- <%= card.email "me@mydomain.com", :type => 'Home' %>
61
-
62
- I work at <%= card.company "Acme Co." %>
63
- <% card.address(:type => 'Work') do |adr| %>
64
- <%= adr.street "123 Main" %>
65
- <%= adr.city "Chicago" %>, <%= adr.state 'IL' %> <%= adr.zip '60010' %>
66
- <% end %>
67
- <%= card.download_link "http://mydomain.com" %>
68
- <% end %>
69
-
70
- This will output the following markup:
71
-
72
- <div class='vcard' itemscope='itemscope' itemtype='http://data-vocabulary.org/Person'>
73
- <img class='photo' itemprop='photo' src='/images/me.jpg' width='200' height='300' />
74
- <span class='fn' itemprop='name'>John Doe</span>
75
- <a class='url' href='http://mydomain.com' itemprop='url'>Visit my Site</a>
76
- <span class='tel'><span class='type'><span class='value-title' title='Home'></span></span>999.888.7766</span>
77
- <span class='tel'><span class='type'><span class='value-title' title='Work'></span></span> 111.222.3344</span>
78
- <a class='email' href='mailto:me@mydomain.com'><span class='value-title' title='Home'></span>me@mydomain.com</span>
79
-
80
- I work at <span class='org' itemprop='affiliation'>Acme Co.</span>
81
- <div class='adr' itemscope='itemscope' itemtype='http://data-vocabulary.org/Address'>
82
- <span class='type'><span class='value-title' title='Work'></span></span>
83
- <span class='street-address' itemprop='street-address'>123 Main</span>
84
- <span class='locality' itemprop='locality'>Chicago</span>, <span class='region' itemprop='region'>IL</span> <span class='postal-code' itemprop='postal-code'>60010</span>
85
- </div>
86
- <a href='http://h2vx.com/vcf/mydomain.com/page' type='text/directory'>Download vCard</a>
87
- </div>
88
-
89
- While these helper methods default to using <span> tags
90
- (and <a> tags as appropriate), you can easily customize
91
- the tag used for any given piece of microdata by using the
92
- <tt>:tag</tt> option:
93
-
94
- <%= card.name "John Doe", :tag => :h1 %>
95
-
96
- Also note that you get the <tt>download_link</tt> method
97
- that builds a link to h2vx.com that will automatically let
98
- the user download vCards from whatever page url you pass in.
99
- Usually you will just want to pass in the page that you are
100
- currently on, so this is a quick way to do this in Rails:
101
-
102
- <%= card.download_link request.request_uri %>
103
-
104
- == Usage: Calendars and Events
105
-
106
- Calendars with many events can be represented using the
107
- Microformats::Calendar and Microformats::Event classes.
108
- This employs the hCal and hEvent microformats along with the
109
- http://www.data-vocabulary.org/Event microdata.
110
-
111
- <b>NOTE:</b> An Event can use a nested vCard to represent
112
- its location information.
113
-
114
- EXAMPLE:
115
-
116
- <% vcalendar :id => "my_calendar" do |cal| %>
117
- <h1>Upcoming Events</h1>
118
- <% cal.event do |event| %>
119
- <h2><%= event.url(event.name("Happy Hour"), :href => "http://meetup.com/happyhour") %></h2>
120
- <%= event.photo "/images/happy_hour.jpg", :size => "250x150" %>
121
- <%= event.description "Come hang out with us for half price drinks at lots of fun!" %>
122
- <span class='time_range'>
123
- From <%= event.starts_at "October 30, 2010 at 7:30PM" %> -
124
- <%= event.ends_at "October 30, 2010 at 10:00PM", :text => "10:00PM" %>
125
- </span>
126
- <% event.location do |card| %>
127
- <%= card.url(card.company("Frank's Bar", :is_company => true), :href => "http://franksbar.com") %>
128
- <% card.address do |adr| %>
129
- <%= adr.street "784 N Main St" %><br />
130
- <%= adr.city "Chicago" %>, <%= adr.state "IL" %> <%= adr.zip "60016" %>
131
- <% end %>
132
- <% end %>
133
- <% end %>
134
- <!-- More events could be added... -->
135
- <% end %>
136
-
137
- == Resources
138
-
139
- * http://www.data-vocabulary.org
140
- * http://microformats.org
141
-
142
- == Care to Help?
143
-
144
- There are still a lot of standards that need to be implemented into
145
- this library, including but not limited to: Events, Products, Reviews,
146
- Organizations. I will continue to work on these, but I'd be happy to
147
- accept pull requests!
data/lib/address.rb DELETED
@@ -1,97 +0,0 @@
1
- class Microformats::Address
2
- include Microformats::FormattingHelpers
3
-
4
- def initialize(template)
5
- @template = template
6
- @default_tag = :span
7
- end
8
-
9
- # You can directly initialize and run this class, but it's easier
10
- # to use the Microformats::Helpers#vaddress helper method or the
11
- # Microformats::Vcard#address method.
12
- #
13
- # OPTIONS:
14
- # * :type - A string that specifies the type of address('home', 'work', etc)
15
- # * :tag - The HTML wrapper element (defaults to :div)
16
- # * Any other passed options will be treated as HTML attributes.
17
- #
18
- def run(opts = {}, &block)
19
- type = opts[:type] ? self.type(opts.delete(:type)) : nil
20
- opts[:class] = combine_class_names('adr', opts[:class])
21
- opts[:itemscope] = 'itemscope'
22
- opts[:itemtype] = 'http://data-vocabulary.org/Address'
23
- opts[:tag] ||= :div
24
- concat_tag(opts) do
25
- concat type if type
26
- block.call(self)
27
- end
28
- end
29
-
30
- # Outputs markup for the type of address ('work', 'home', etc.)
31
- # There will be no visible text unless provided with the :text option.
32
- #
33
- # <em>NOTE: You get this for free with the :type option of
34
- # Microformats::Helpers#vaddress, Microformats::Vcard#address and #run methods.</em>
35
- #
36
- # OPTIONS
37
- # * :text - String, the text you want displayed as a text node (default is '')
38
- # * Any other passed options will be treated as HTML attributes.
39
- #
40
- def type(str, opts = {})
41
- inner = content_tag('', :class => 'value-title', :title => str)
42
- text = opts.delete(:text) || ''
43
- content_tag(inner + text, merge_html_attrs({:class => 'type'}, opts))
44
- end
45
-
46
- # Outputs the passed string as a street address.
47
- #
48
- # OPTIONS
49
- # * :tag - The HTML wrapper element (defaults to :span)
50
- # * Any other passed options will be treated as HTML attributes.
51
- #
52
- def street(str, opts = {})
53
- content_tag(str, merge_html_attrs({:class => 'street-address', :itemprop => 'street-address'}, opts))
54
- end
55
-
56
- # Outputs the passed string as a city.
57
- #
58
- # OPTIONS
59
- # * :tag - The HTML wrapper element (defaults to :span)
60
- # * Any other passed options will be treated as HTML attributes.
61
- #
62
- def city(str, opts = {})
63
- content_tag(str, merge_html_attrs({:class => 'locality', :itemprop => 'locality'}, opts))
64
- end
65
-
66
- # Outputs the passed string as a state.
67
- #
68
- # OPTIONS
69
- # * :tag - The HTML wrapper element (defaults to :span)
70
- # * Any other passed options will be treated as HTML attributes.
71
- #
72
- def state(str, opts = {})
73
- content_tag(str, merge_html_attrs({:class => 'region', :itemprop => 'region'}, opts))
74
- end
75
-
76
- # Outputs the passed string as a postal code.
77
- #
78
- # OPTIONS
79
- # * :tag - The HTML wrapper element (defaults to :span)
80
- # * Any other passed options will be treated as HTML attributes.
81
- #
82
- def zip(str, opts = {})
83
- content_tag(str, merge_html_attrs({:class => 'postal-code', :itemprop => 'postal-code'}, opts))
84
- end
85
- alias_method :postal_code, :zip
86
-
87
- # Outputs the passed string as a country.
88
- #
89
- # OPTIONS
90
- # * :tag - The HTML wrapper element (defaults to :span)
91
- # * Any other passed options will be treated as HTML attributes.
92
- #
93
- def country(str, opts = {})
94
- content_tag(str, merge_html_attrs({:class => 'country-name', :itemprop => 'country-name'}, opts))
95
- end
96
-
97
- end
data/lib/calendar.rb DELETED
@@ -1,40 +0,0 @@
1
- class Microformats::Calendar
2
- include Microformats::FormattingHelpers
3
-
4
- def initialize(template)
5
- @template = template
6
- @default_tag = :span
7
- end
8
-
9
- # You can directly initialize and run this class, but it's easier
10
- # to use the Microformats::Helpers#vcalendar helper method.
11
- #
12
- # OPTIONS:
13
- # * :tag - The HTML wrapper element (defaults to :div)
14
- # * Any other passed options will be treated as HTML attributes.
15
- #
16
- def run(opts = {}, &block)
17
- opts[:class] = combine_class_names('vcalendar', opts[:class])
18
- opts[:tag] ||= :div
19
- concat_tag(opts) do
20
- block.call(self)
21
- end
22
- end
23
-
24
- # Creates a vEvent with the given options and a block.
25
- #
26
- # OPTIONS:
27
- # * :tag - The HTML wrapper element (defaults to :div)
28
- # * Any other passed options will be treated as HTML attributes.
29
- #
30
- # EXAMPLE:
31
- # <% calendar.event :id => 'my_event' do |event| %>
32
- # This event is called <%= event.name "Cool Event" %>.
33
- # <% end %>
34
- #
35
- def event(opts = {}, &block)
36
- ev = Microformats::Event.new(@template)
37
- opts[:class] = combine_class_names('vevent', opts[:class])
38
- ev.run(opts, &block)
39
- end
40
- end
data/lib/event.rb DELETED
@@ -1,156 +0,0 @@
1
- class Microformats::Event
2
- include Microformats::FormattingHelpers
3
-
4
- def initialize(template)
5
- @template = template
6
- @default_tag = :span
7
- end
8
-
9
- # You can directly initialize and run this class, but it's easier
10
- # to use the Microformats::Helpers#vevent helper method or the
11
- # Microformats::Calendar#event method.
12
- #
13
- # OPTIONS:
14
- # * :tag - The HTML wrapper element (defaults to :div)
15
- # * Any other passed options will be treated as HTML attributes.
16
- #
17
- def run(opts = {}, &block)
18
- opts[:class] = combine_class_names('vevent', opts[:class])
19
- opts[:itemscope] = 'itemscope'
20
- opts[:itemtype] = 'http://data-vocabulary.org/Event'
21
- opts[:tag] ||= :div
22
- concat_tag(opts) do
23
- block.call(self)
24
- end
25
- end
26
-
27
- # Marks up an event's name.
28
- #
29
- # OPTIONS:
30
- # * :tag - The HTML wrapper element (defaults to :span)
31
- # * Any other passed options will be treated as HTML attributes.
32
- #
33
- def name(str, opts={})
34
- content_tag(str, merge_html_attrs({:itemprop => 'summary', :class => 'summary'}, opts))
35
- end
36
-
37
- # Marks up the event's URL. By default, it will output an <a> tag using
38
- # the passed in string as both the href and the text. If the :href option
39
- # is passed, then the string argument is treated as text.
40
- #
41
- # OPTIONS:
42
- # * :href - If passed, the string argument will be treated as the text node.
43
- # * :tag - The HTML wrapper element (defaults to :span)
44
- # * Any other passed options will be treated as HTML attributes.
45
- #
46
- # EXAMPLES:
47
- # event.url('http://google.com') #=> <a class='url' href='http://google.com' itemprop='url'>http://google.com</a>
48
- # event.url('Google', :href => 'http://google.com') #=> <a class='url' href='http://google.com' itemprop='url'>Google</a>
49
- # event.url('http://google.com', :tag => :span) #=> <span class='url' itemprop='url'>http://google.com</span>
50
- #
51
- def url(str, opts = {})
52
- if opts[:href]
53
- content_tag(str, merge_html_attrs({:tag => :a, :class => 'url', :itemprop => 'url'}, opts))
54
- elsif opts[:tag]
55
- content_tag(str, merge_html_attrs({:class => 'url', :itemprop => 'url'}, opts))
56
- else
57
- content_tag(str, merge_html_attrs({:tag => :a, :class => 'url', :href => str, :itemprop => 'url'}, opts))
58
- end
59
- end
60
-
61
- # Marks up the event photo as an <img> tag. Takes the image URL as the first argument.
62
- #
63
- # OPTIONS
64
- # * :size - Pass a string with WIDTHxHEIGHT like "200x100" in lieu of the :width and :height options.
65
- # * Any other passed options will be treated as HTML attributes.
66
- #
67
- def photo(str, opts = {})
68
- if size = opts.delete(:size)
69
- opts[:width], opts[:height] = size.split('x')
70
- end
71
- content_tag(nil, merge_html_attrs({:tag => :img, :class => 'photo', :itemprop => 'photo', :src => str}, opts))
72
- end
73
-
74
- # Marks up an event's description.
75
- #
76
- # OPTIONS:
77
- # * :tag - The HTML wrapper element (defaults to :span)
78
- # * Any other passed options will be treated as HTML attributes.
79
- #
80
- def description(str, opts={})
81
- content_tag(str, merge_html_attrs({:itemprop => 'description', :class => 'description'}, opts))
82
- end
83
-
84
- # Marks up the event's start time/date. Accepts either a Time object
85
- # or a time String as the first argument. By default, the text node
86
- # will be the date and time output like "Oct 20, 2010 at 7:30PM", but
87
- # this can be overridden by the :text option.
88
- #
89
- # OPTIONS:
90
- # * :text - String, will be displayed as the text node.
91
- # * Any other passed options will be treated as HTML attributes.
92
- #
93
- def starts_at(time_or_str, opts={})
94
- if time_or_str.is_a?(String)
95
- time = Time.parse(time_or_str)
96
- encoded_time = encode_time(time)
97
- humanized_time = opts.delete(:text) || time_or_str
98
- else
99
- encoded_time = encode_time(time_or_str)
100
- humanized_time = opts.delete(:text) || humanize_time(time_or_str)
101
- end
102
- inner_span = content_tag('', :class => 'value-title', :title => encoded_time)
103
- content_tag(inner_span + humanized_time, merge_html_attrs({:tag => :time, :itemprop => 'startDate', :class => 'dtstart', :datetime => encoded_time}, opts))
104
- end
105
-
106
- # Marks up the event's end time/date. Accepts either a Time object
107
- # or a time String as the first argument. By default, the text node
108
- # will be the date and time output like "Oct 20, 2010 at 7:30PM", but
109
- # this can be overridden by the :text option.
110
- #
111
- # OPTIONS:
112
- # * :text - String, will be displayed as the text node.
113
- # * Any other passed options will be treated as HTML attributes.
114
- #
115
- def ends_at(time_or_str, opts={})
116
- if time_or_str.is_a?(String)
117
- time = Time.parse(time_or_str)
118
- encoded_time = encode_time(time)
119
- humanized_time = opts.delete(:text) || time_or_str
120
- else
121
- encoded_time = encode_time(time_or_str)
122
- humanized_time = opts.delete(:text) || humanize_time(time_or_str)
123
- end
124
- inner_span = content_tag('', :class => 'value-title', :title => encoded_time)
125
- content_tag(inner_span + humanized_time, merge_html_attrs({:tag => :time, :itemprop => 'endDate', :class => 'dtend', :datetime => encoded_time}, opts))
126
- end
127
-
128
- # Marks up an event's category name.
129
- #
130
- # OPTIONS:
131
- # * :tag - The HTML wrapper element (defaults to :span)
132
- # * Any other passed options will be treated as HTML attributes.
133
- #
134
- def category(str, opts = {})
135
- content_tag(str, merge_html_attrs({:itemprop => 'eventType', :class => 'category'}, opts))
136
- end
137
-
138
- # Creates a vCard with the given options and a block to represent
139
- # the event's location.
140
- #
141
- # OPTIONS:
142
- # * :tag - The HTML wrapper element (defaults to :div)
143
- # * Any other passed options will be treated as HTML attributes.
144
- #
145
- # EXAMPLE:
146
- # <% event.location :id => 'my_location' do |card| %>
147
- # We will be meeting at the <%= card.company "Obtiva" %> office.
148
- # <% end %>
149
- #
150
- def location(opts = {}, &block)
151
- card = Microformats::Vcard.new(@template)
152
- opts[:class] = combine_class_names('location', opts[:class])
153
- card.run(opts, &block)
154
- end
155
-
156
- end