microformats 0.3 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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