runeblog 0.2.9 → 0.2.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (517) hide show
  1. checksums.yaml +4 -4
  2. data/empty_view.tgz +0 -0
  3. data/lib/helpers-blog.rb +46 -10
  4. data/lib/liveblog.rb +64 -38
  5. data/lib/pathmagic.rb +14 -0
  6. data/lib/runeblog.rb +167 -104
  7. data/lib/runeblog_version.rb +1 -1
  8. data/runeblog.gemspec +2 -3
  9. data/test/make_blog.rb +3 -5
  10. metadata +5 -511
  11. data/lib/BAD.liveblog.rb +0 -724
  12. data/lib/KEEP.liveblog +0 -646
  13. data/lib/NEW-liveblog.rb +0 -757
  14. data/lib/OLD-liveblog.rb +0 -661
  15. data/test/.blogs/VERSION +0 -2
  16. data/test/.blogs/config +0 -3
  17. data/test/.blogs/drafts/0001-whats-at-stubbs.lt3 +0 -16
  18. data/test/.blogs/drafts/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  19. data/test/.blogs/drafts/0003-elixir-conf-coming-up.lt3 +0 -17
  20. data/test/.blogs/drafts/0004-does-indie-still-matter.lt3 +0 -16
  21. data/test/.blogs/drafts/0005-the-genius-of-scenic.lt3 +0 -16
  22. data/test/.blogs/drafts/0006-the-future-of-coding.lt3 +0 -16
  23. data/test/.blogs/drafts/0007-the-graffiti-wall.lt3 +0 -17
  24. data/test/.blogs/drafts/0008-the-waller-creek-project.lt3 +0 -16
  25. data/test/.blogs/drafts/0009-life-on-sabine-street.lt3 +0 -16
  26. data/test/.blogs/drafts/0010-remember-modest-mouse.lt3 +0 -17
  27. data/test/.blogs/sequence +0 -1
  28. data/test/.blogs/views/around_austin/last_published +0 -1
  29. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/0001-whats-at-stubbs.lt3 +0 -16
  30. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/metadata.txt +0 -6
  31. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/teaser.txt +0 -1
  32. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/whats-at-stubbs.html +0 -11
  33. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  34. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/metadata.txt +0 -6
  35. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/teaser.txt +0 -1
  36. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/the-new-amphitheatre-is-overrated.html +0 -11
  37. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/0007-the-graffiti-wall.lt3 +0 -17
  38. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/metadata.txt +0 -6
  39. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/teaser.txt +0 -1
  40. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/the-graffiti-wall.html +0 -12
  41. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/0008-the-waller-creek-project.lt3 +0 -16
  42. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/metadata.txt +0 -6
  43. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/teaser.txt +0 -1
  44. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/the-waller-creek-project.html +0 -11
  45. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/0009-life-on-sabine-street.lt3 +0 -16
  46. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/life-on-sabine-street.html +0 -11
  47. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/metadata.txt +0 -6
  48. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/teaser.txt +0 -1
  49. data/test/.blogs/views/around_austin/publish +0 -5
  50. data/test/.blogs/views/around_austin/remote/etc/blog.css +0 -34
  51. data/test/.blogs/views/around_austin/remote/etc/blog.css.lt3 +0 -36
  52. data/test/.blogs/views/around_austin/remote/etc/externals.lt3 +0 -19
  53. data/test/.blogs/views/around_austin/remote/etc/favicon.ico +0 -0
  54. data/test/.blogs/views/around_austin/remote/etc/misc.js +0 -6
  55. data/test/.blogs/views/around_austin/remote/life-on-sabine-street.html +0 -10
  56. data/test/.blogs/views/around_austin/remote/permalink/life-on-sabine-street.html +0 -10
  57. data/test/.blogs/views/around_austin/remote/permalink/the-graffiti-wall.html +0 -10
  58. data/test/.blogs/views/around_austin/remote/permalink/the-new-amphitheatre-is-overrated.html +0 -50
  59. data/test/.blogs/views/around_austin/remote/permalink/the-waller-creek-project.html +0 -50
  60. data/test/.blogs/views/around_austin/remote/permalink/whats-at-stubbs.html +0 -50
  61. data/test/.blogs/views/around_austin/remote/recent.html +0 -104
  62. data/test/.blogs/views/around_austin/remote/the-graffiti-wall.html +0 -10
  63. data/test/.blogs/views/around_austin/remote/the-new-amphitheatre-is-overrated.html +0 -50
  64. data/test/.blogs/views/around_austin/remote/the-waller-creek-project.html +0 -50
  65. data/test/.blogs/views/around_austin/remote/whats-at-stubbs.html +0 -50
  66. data/test/.blogs/views/around_austin/remote/widgets/README +0 -4
  67. data/test/.blogs/views/around_austin/remote/widgets/ad/ad.lt3 +0 -12
  68. data/test/.blogs/views/around_austin/remote/widgets/calendar/calendar.lt3 +0 -6
  69. data/test/.blogs/views/around_austin/remote/widgets/news/list.data +0 -4
  70. data/test/.blogs/views/around_austin/remote/widgets/news/news.lt3 +0 -3
  71. data/test/.blogs/views/around_austin/remote/widgets/pages/README +0 -2
  72. data/test/.blogs/views/around_austin/remote/widgets/pages/disclaim.lt3 +0 -6
  73. data/test/.blogs/views/around_austin/remote/widgets/pages/faq.lt3 +0 -6
  74. data/test/.blogs/views/around_austin/remote/widgets/pages/generated.lt3 +0 -4
  75. data/test/.blogs/views/around_austin/remote/widgets/pages/lifestory.lt3 +0 -6
  76. data/test/.blogs/views/around_austin/remote/widgets/pages/like-dislike.lt3 +0 -6
  77. data/test/.blogs/views/around_austin/remote/widgets/pages/list.data +0 -4
  78. data/test/.blogs/views/around_austin/remote/widgets/pages/main.html +0 -9
  79. data/test/.blogs/views/around_austin/remote/widgets/pages/main.lt3 +0 -18
  80. data/test/.blogs/views/around_austin/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  81. data/test/.blogs/views/around_austin/staging/0001-whats-at-stubbs.lt3 +0 -16
  82. data/test/.blogs/views/around_austin/staging/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  83. data/test/.blogs/views/around_austin/staging/0007-the-graffiti-wall.lt3 +0 -17
  84. data/test/.blogs/views/around_austin/staging/0008-the-waller-creek-project.lt3 +0 -16
  85. data/test/.blogs/views/around_austin/staging/0009-life-on-sabine-street.lt3 +0 -16
  86. data/test/.blogs/views/around_austin/staging/README +0 -59
  87. data/test/.blogs/views/around_austin/staging/blog/generate.lt3 +0 -17
  88. data/test/.blogs/views/around_austin/staging/blog/head.lt3 +0 -9
  89. data/test/.blogs/views/around_austin/staging/blog/index.lt3 +0 -6
  90. data/test/.blogs/views/around_austin/staging/blog/post_entry.lt3 +0 -19
  91. data/test/.blogs/views/around_austin/staging/etc/blog.css +0 -34
  92. data/test/.blogs/views/around_austin/staging/etc/blog.css.lt3 +0 -36
  93. data/test/.blogs/views/around_austin/staging/etc/externals.lt3 +0 -19
  94. data/test/.blogs/views/around_austin/staging/etc/favicon.ico +0 -0
  95. data/test/.blogs/views/around_austin/staging/etc/misc.js +0 -6
  96. data/test/.blogs/views/around_austin/staging/global.lt3 +0 -22
  97. data/test/.blogs/views/around_austin/staging/life-on-sabine-street.html +0 -10
  98. data/test/.blogs/views/around_austin/staging/navbar/about.html +0 -6
  99. data/test/.blogs/views/around_austin/staging/navbar/contact.html +0 -6
  100. data/test/.blogs/views/around_austin/staging/navbar/navbar.lt3 +0 -6
  101. data/test/.blogs/views/around_austin/staging/post/generate.lt3 +0 -26
  102. data/test/.blogs/views/around_austin/staging/post/head.lt3 +0 -4
  103. data/test/.blogs/views/around_austin/staging/post/index.html +0 -16
  104. data/test/.blogs/views/around_austin/staging/post/index.lt3 +0 -16
  105. data/test/.blogs/views/around_austin/staging/post/permalink.lt3 +0 -26
  106. data/test/.blogs/views/around_austin/staging/recent.html +0 -104
  107. data/test/.blogs/views/around_austin/staging/sidebar/README +0 -3
  108. data/test/.blogs/views/around_austin/staging/the-graffiti-wall.html +0 -10
  109. data/test/.blogs/views/around_austin/staging/the-new-amphitheatre-is-overrated.html +0 -50
  110. data/test/.blogs/views/around_austin/staging/the-waller-creek-project.html +0 -50
  111. data/test/.blogs/views/around_austin/staging/vars.lt3 +0 -2
  112. data/test/.blogs/views/around_austin/staging/whats-at-stubbs.html +0 -50
  113. data/test/.blogs/views/around_austin/staging/widgets/README +0 -4
  114. data/test/.blogs/views/around_austin/staging/widgets/ad/ad.lt3 +0 -12
  115. data/test/.blogs/views/around_austin/staging/widgets/calendar/calendar.lt3 +0 -6
  116. data/test/.blogs/views/around_austin/staging/widgets/news/list.data +0 -4
  117. data/test/.blogs/views/around_austin/staging/widgets/news/news.lt3 +0 -3
  118. data/test/.blogs/views/around_austin/staging/widgets/pages/README +0 -2
  119. data/test/.blogs/views/around_austin/staging/widgets/pages/disclaim.lt3 +0 -6
  120. data/test/.blogs/views/around_austin/staging/widgets/pages/faq.lt3 +0 -6
  121. data/test/.blogs/views/around_austin/staging/widgets/pages/generated.lt3 +0 -4
  122. data/test/.blogs/views/around_austin/staging/widgets/pages/lifestory.lt3 +0 -6
  123. data/test/.blogs/views/around_austin/staging/widgets/pages/like-dislike.lt3 +0 -6
  124. data/test/.blogs/views/around_austin/staging/widgets/pages/list.data +0 -4
  125. data/test/.blogs/views/around_austin/staging/widgets/pages/main.html +0 -9
  126. data/test/.blogs/views/around_austin/staging/widgets/pages/main.lt3 +0 -18
  127. data/test/.blogs/views/around_austin/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  128. data/test/.blogs/views/around_austin/themes/standard/README +0 -59
  129. data/test/.blogs/views/around_austin/themes/standard/blog/generate.lt3 +0 -17
  130. data/test/.blogs/views/around_austin/themes/standard/blog/head.lt3 +0 -9
  131. data/test/.blogs/views/around_austin/themes/standard/blog/index.lt3 +0 -6
  132. data/test/.blogs/views/around_austin/themes/standard/blog/post_entry.lt3 +0 -19
  133. data/test/.blogs/views/around_austin/themes/standard/etc/blog.css +0 -34
  134. data/test/.blogs/views/around_austin/themes/standard/etc/blog.css.lt3 +0 -36
  135. data/test/.blogs/views/around_austin/themes/standard/etc/externals.lt3 +0 -19
  136. data/test/.blogs/views/around_austin/themes/standard/etc/favicon.ico +0 -0
  137. data/test/.blogs/views/around_austin/themes/standard/etc/misc.js +0 -6
  138. data/test/.blogs/views/around_austin/themes/standard/global.lt3 +0 -22
  139. data/test/.blogs/views/around_austin/themes/standard/navbar/about.html +0 -6
  140. data/test/.blogs/views/around_austin/themes/standard/navbar/contact.html +0 -6
  141. data/test/.blogs/views/around_austin/themes/standard/navbar/navbar.lt3 +0 -6
  142. data/test/.blogs/views/around_austin/themes/standard/post/generate.lt3 +0 -26
  143. data/test/.blogs/views/around_austin/themes/standard/post/head.lt3 +0 -4
  144. data/test/.blogs/views/around_austin/themes/standard/post/index.lt3 +0 -16
  145. data/test/.blogs/views/around_austin/themes/standard/post/permalink.lt3 +0 -26
  146. data/test/.blogs/views/around_austin/themes/standard/sidebar/README +0 -3
  147. data/test/.blogs/views/around_austin/themes/standard/widgets/README +0 -4
  148. data/test/.blogs/views/around_austin/themes/standard/widgets/ad/ad.lt3 +0 -12
  149. data/test/.blogs/views/around_austin/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  150. data/test/.blogs/views/around_austin/themes/standard/widgets/news/list.data +0 -4
  151. data/test/.blogs/views/around_austin/themes/standard/widgets/news/news.lt3 +0 -3
  152. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/README +0 -2
  153. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  154. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/faq.lt3 +0 -6
  155. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/generated.lt3 +0 -4
  156. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  157. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  158. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/list.data +0 -4
  159. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/main.html +0 -9
  160. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/main.lt3 +0 -18
  161. data/test/.blogs/views/around_austin/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  162. data/test/.blogs/views/computing/last_published +0 -1
  163. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/0003-elixir-conf-coming-up.lt3 +0 -17
  164. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/elixir-conf-coming-up.html +0 -12
  165. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/metadata.txt +0 -6
  166. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/teaser.txt +0 -1
  167. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/0005-the-genius-of-scenic.lt3 +0 -16
  168. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/metadata.txt +0 -6
  169. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/teaser.txt +0 -1
  170. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/the-genius-of-scenic.html +0 -11
  171. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/0006-the-future-of-coding.lt3 +0 -16
  172. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/metadata.txt +0 -6
  173. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/teaser.txt +0 -1
  174. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/the-future-of-coding.html +0 -11
  175. data/test/.blogs/views/computing/publish +0 -5
  176. data/test/.blogs/views/computing/remote/elixir-conf-coming-up.html +0 -51
  177. data/test/.blogs/views/computing/remote/etc/blog.css +0 -34
  178. data/test/.blogs/views/computing/remote/etc/blog.css.lt3 +0 -36
  179. data/test/.blogs/views/computing/remote/etc/externals.lt3 +0 -19
  180. data/test/.blogs/views/computing/remote/etc/favicon.ico +0 -0
  181. data/test/.blogs/views/computing/remote/etc/misc.js +0 -6
  182. data/test/.blogs/views/computing/remote/permalink/elixir-conf-coming-up.html +0 -51
  183. data/test/.blogs/views/computing/remote/permalink/the-future-of-coding.html +0 -50
  184. data/test/.blogs/views/computing/remote/permalink/the-genius-of-scenic.html +0 -50
  185. data/test/.blogs/views/computing/remote/recent.html +0 -64
  186. data/test/.blogs/views/computing/remote/the-future-of-coding.html +0 -50
  187. data/test/.blogs/views/computing/remote/the-genius-of-scenic.html +0 -50
  188. data/test/.blogs/views/computing/remote/widgets/README +0 -4
  189. data/test/.blogs/views/computing/remote/widgets/ad/ad.lt3 +0 -12
  190. data/test/.blogs/views/computing/remote/widgets/calendar/calendar.lt3 +0 -6
  191. data/test/.blogs/views/computing/remote/widgets/news/list.data +0 -4
  192. data/test/.blogs/views/computing/remote/widgets/news/news.lt3 +0 -3
  193. data/test/.blogs/views/computing/remote/widgets/pages/README +0 -2
  194. data/test/.blogs/views/computing/remote/widgets/pages/disclaim.lt3 +0 -6
  195. data/test/.blogs/views/computing/remote/widgets/pages/faq.lt3 +0 -6
  196. data/test/.blogs/views/computing/remote/widgets/pages/generated.lt3 +0 -4
  197. data/test/.blogs/views/computing/remote/widgets/pages/lifestory.lt3 +0 -6
  198. data/test/.blogs/views/computing/remote/widgets/pages/like-dislike.lt3 +0 -6
  199. data/test/.blogs/views/computing/remote/widgets/pages/list.data +0 -4
  200. data/test/.blogs/views/computing/remote/widgets/pages/main.html +0 -9
  201. data/test/.blogs/views/computing/remote/widgets/pages/main.lt3 +0 -18
  202. data/test/.blogs/views/computing/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  203. data/test/.blogs/views/computing/staging/0003-elixir-conf-coming-up.lt3 +0 -17
  204. data/test/.blogs/views/computing/staging/0005-the-genius-of-scenic.lt3 +0 -16
  205. data/test/.blogs/views/computing/staging/0006-the-future-of-coding.lt3 +0 -16
  206. data/test/.blogs/views/computing/staging/README +0 -59
  207. data/test/.blogs/views/computing/staging/blog/generate.lt3 +0 -17
  208. data/test/.blogs/views/computing/staging/blog/head.lt3 +0 -9
  209. data/test/.blogs/views/computing/staging/blog/index.lt3 +0 -6
  210. data/test/.blogs/views/computing/staging/blog/post_entry.lt3 +0 -19
  211. data/test/.blogs/views/computing/staging/elixir-conf-coming-up.html +0 -51
  212. data/test/.blogs/views/computing/staging/etc/blog.css +0 -34
  213. data/test/.blogs/views/computing/staging/etc/blog.css.lt3 +0 -36
  214. data/test/.blogs/views/computing/staging/etc/externals.lt3 +0 -19
  215. data/test/.blogs/views/computing/staging/etc/favicon.ico +0 -0
  216. data/test/.blogs/views/computing/staging/etc/misc.js +0 -6
  217. data/test/.blogs/views/computing/staging/global.lt3 +0 -22
  218. data/test/.blogs/views/computing/staging/navbar/about.html +0 -6
  219. data/test/.blogs/views/computing/staging/navbar/contact.html +0 -6
  220. data/test/.blogs/views/computing/staging/navbar/navbar.lt3 +0 -6
  221. data/test/.blogs/views/computing/staging/post/generate.lt3 +0 -26
  222. data/test/.blogs/views/computing/staging/post/head.lt3 +0 -4
  223. data/test/.blogs/views/computing/staging/post/index.html +0 -16
  224. data/test/.blogs/views/computing/staging/post/index.lt3 +0 -16
  225. data/test/.blogs/views/computing/staging/post/permalink.lt3 +0 -26
  226. data/test/.blogs/views/computing/staging/recent.html +0 -64
  227. data/test/.blogs/views/computing/staging/sidebar/README +0 -3
  228. data/test/.blogs/views/computing/staging/the-future-of-coding.html +0 -50
  229. data/test/.blogs/views/computing/staging/the-genius-of-scenic.html +0 -50
  230. data/test/.blogs/views/computing/staging/vars.lt3 +0 -2
  231. data/test/.blogs/views/computing/staging/widgets/README +0 -4
  232. data/test/.blogs/views/computing/staging/widgets/ad/ad.lt3 +0 -12
  233. data/test/.blogs/views/computing/staging/widgets/calendar/calendar.lt3 +0 -6
  234. data/test/.blogs/views/computing/staging/widgets/news/list.data +0 -4
  235. data/test/.blogs/views/computing/staging/widgets/news/news.lt3 +0 -3
  236. data/test/.blogs/views/computing/staging/widgets/pages/README +0 -2
  237. data/test/.blogs/views/computing/staging/widgets/pages/disclaim.lt3 +0 -6
  238. data/test/.blogs/views/computing/staging/widgets/pages/faq.lt3 +0 -6
  239. data/test/.blogs/views/computing/staging/widgets/pages/generated.lt3 +0 -4
  240. data/test/.blogs/views/computing/staging/widgets/pages/lifestory.lt3 +0 -6
  241. data/test/.blogs/views/computing/staging/widgets/pages/like-dislike.lt3 +0 -6
  242. data/test/.blogs/views/computing/staging/widgets/pages/list.data +0 -4
  243. data/test/.blogs/views/computing/staging/widgets/pages/main.html +0 -9
  244. data/test/.blogs/views/computing/staging/widgets/pages/main.lt3 +0 -18
  245. data/test/.blogs/views/computing/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  246. data/test/.blogs/views/computing/themes/standard/README +0 -59
  247. data/test/.blogs/views/computing/themes/standard/blog/generate.lt3 +0 -17
  248. data/test/.blogs/views/computing/themes/standard/blog/head.lt3 +0 -9
  249. data/test/.blogs/views/computing/themes/standard/blog/index.lt3 +0 -6
  250. data/test/.blogs/views/computing/themes/standard/blog/post_entry.lt3 +0 -19
  251. data/test/.blogs/views/computing/themes/standard/etc/blog.css +0 -34
  252. data/test/.blogs/views/computing/themes/standard/etc/blog.css.lt3 +0 -36
  253. data/test/.blogs/views/computing/themes/standard/etc/externals.lt3 +0 -19
  254. data/test/.blogs/views/computing/themes/standard/etc/favicon.ico +0 -0
  255. data/test/.blogs/views/computing/themes/standard/etc/misc.js +0 -6
  256. data/test/.blogs/views/computing/themes/standard/global.lt3 +0 -22
  257. data/test/.blogs/views/computing/themes/standard/navbar/about.html +0 -6
  258. data/test/.blogs/views/computing/themes/standard/navbar/contact.html +0 -6
  259. data/test/.blogs/views/computing/themes/standard/navbar/navbar.lt3 +0 -6
  260. data/test/.blogs/views/computing/themes/standard/post/generate.lt3 +0 -26
  261. data/test/.blogs/views/computing/themes/standard/post/head.lt3 +0 -4
  262. data/test/.blogs/views/computing/themes/standard/post/index.lt3 +0 -16
  263. data/test/.blogs/views/computing/themes/standard/post/permalink.lt3 +0 -26
  264. data/test/.blogs/views/computing/themes/standard/sidebar/README +0 -3
  265. data/test/.blogs/views/computing/themes/standard/widgets/README +0 -4
  266. data/test/.blogs/views/computing/themes/standard/widgets/ad/ad.lt3 +0 -12
  267. data/test/.blogs/views/computing/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  268. data/test/.blogs/views/computing/themes/standard/widgets/news/list.data +0 -4
  269. data/test/.blogs/views/computing/themes/standard/widgets/news/news.lt3 +0 -3
  270. data/test/.blogs/views/computing/themes/standard/widgets/pages/README +0 -2
  271. data/test/.blogs/views/computing/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  272. data/test/.blogs/views/computing/themes/standard/widgets/pages/faq.lt3 +0 -6
  273. data/test/.blogs/views/computing/themes/standard/widgets/pages/generated.lt3 +0 -4
  274. data/test/.blogs/views/computing/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  275. data/test/.blogs/views/computing/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  276. data/test/.blogs/views/computing/themes/standard/widgets/pages/list.data +0 -4
  277. data/test/.blogs/views/computing/themes/standard/widgets/pages/main.html +0 -9
  278. data/test/.blogs/views/computing/themes/standard/widgets/pages/main.lt3 +0 -18
  279. data/test/.blogs/views/computing/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  280. data/test/.blogs/views/music/last_published +0 -1
  281. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/0004-does-indie-still-matter.lt3 +0 -16
  282. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/does-indie-still-matter.html +0 -11
  283. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/metadata.txt +0 -6
  284. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/teaser.txt +0 -1
  285. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/0010-remember-modest-mouse.lt3 +0 -17
  286. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/metadata.txt +0 -6
  287. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/remember-modest-mouse.html +0 -12
  288. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/teaser.txt +0 -1
  289. data/test/.blogs/views/music/publish +0 -5
  290. data/test/.blogs/views/music/remote/does-indie-still-matter.html +0 -50
  291. data/test/.blogs/views/music/remote/etc/blog.css +0 -34
  292. data/test/.blogs/views/music/remote/etc/blog.css.lt3 +0 -36
  293. data/test/.blogs/views/music/remote/etc/externals.lt3 +0 -19
  294. data/test/.blogs/views/music/remote/etc/favicon.ico +0 -0
  295. data/test/.blogs/views/music/remote/etc/misc.js +0 -6
  296. data/test/.blogs/views/music/remote/permalink/does-indie-still-matter.html +0 -50
  297. data/test/.blogs/views/music/remote/permalink/remember-modest-mouse.html +0 -51
  298. data/test/.blogs/views/music/remote/recent.html +0 -44
  299. data/test/.blogs/views/music/remote/remember-modest-mouse.html +0 -51
  300. data/test/.blogs/views/music/remote/widgets/README +0 -4
  301. data/test/.blogs/views/music/remote/widgets/ad/ad.lt3 +0 -12
  302. data/test/.blogs/views/music/remote/widgets/calendar/calendar.lt3 +0 -6
  303. data/test/.blogs/views/music/remote/widgets/news/list.data +0 -4
  304. data/test/.blogs/views/music/remote/widgets/news/news.lt3 +0 -3
  305. data/test/.blogs/views/music/remote/widgets/pages/README +0 -2
  306. data/test/.blogs/views/music/remote/widgets/pages/disclaim.lt3 +0 -6
  307. data/test/.blogs/views/music/remote/widgets/pages/faq.lt3 +0 -6
  308. data/test/.blogs/views/music/remote/widgets/pages/generated.lt3 +0 -4
  309. data/test/.blogs/views/music/remote/widgets/pages/lifestory.lt3 +0 -6
  310. data/test/.blogs/views/music/remote/widgets/pages/like-dislike.lt3 +0 -6
  311. data/test/.blogs/views/music/remote/widgets/pages/list.data +0 -4
  312. data/test/.blogs/views/music/remote/widgets/pages/main.html +0 -9
  313. data/test/.blogs/views/music/remote/widgets/pages/main.lt3 +0 -18
  314. data/test/.blogs/views/music/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  315. data/test/.blogs/views/music/staging/0004-does-indie-still-matter.lt3 +0 -16
  316. data/test/.blogs/views/music/staging/0010-remember-modest-mouse.lt3 +0 -17
  317. data/test/.blogs/views/music/staging/README +0 -59
  318. data/test/.blogs/views/music/staging/blog/generate.lt3 +0 -17
  319. data/test/.blogs/views/music/staging/blog/head.lt3 +0 -9
  320. data/test/.blogs/views/music/staging/blog/index.lt3 +0 -6
  321. data/test/.blogs/views/music/staging/blog/post_entry.lt3 +0 -19
  322. data/test/.blogs/views/music/staging/does-indie-still-matter.html +0 -50
  323. data/test/.blogs/views/music/staging/etc/blog.css +0 -34
  324. data/test/.blogs/views/music/staging/etc/blog.css.lt3 +0 -36
  325. data/test/.blogs/views/music/staging/etc/externals.lt3 +0 -19
  326. data/test/.blogs/views/music/staging/etc/favicon.ico +0 -0
  327. data/test/.blogs/views/music/staging/etc/misc.js +0 -6
  328. data/test/.blogs/views/music/staging/global.lt3 +0 -22
  329. data/test/.blogs/views/music/staging/navbar/about.html +0 -6
  330. data/test/.blogs/views/music/staging/navbar/contact.html +0 -6
  331. data/test/.blogs/views/music/staging/navbar/navbar.lt3 +0 -6
  332. data/test/.blogs/views/music/staging/post/generate.lt3 +0 -26
  333. data/test/.blogs/views/music/staging/post/head.lt3 +0 -4
  334. data/test/.blogs/views/music/staging/post/index.html +0 -17
  335. data/test/.blogs/views/music/staging/post/index.lt3 +0 -16
  336. data/test/.blogs/views/music/staging/post/permalink.lt3 +0 -26
  337. data/test/.blogs/views/music/staging/recent.html +0 -44
  338. data/test/.blogs/views/music/staging/remember-modest-mouse.html +0 -51
  339. data/test/.blogs/views/music/staging/sidebar/README +0 -3
  340. data/test/.blogs/views/music/staging/vars.lt3 +0 -2
  341. data/test/.blogs/views/music/staging/widgets/README +0 -4
  342. data/test/.blogs/views/music/staging/widgets/ad/ad.lt3 +0 -12
  343. data/test/.blogs/views/music/staging/widgets/calendar/calendar.lt3 +0 -6
  344. data/test/.blogs/views/music/staging/widgets/news/list.data +0 -4
  345. data/test/.blogs/views/music/staging/widgets/news/news.lt3 +0 -3
  346. data/test/.blogs/views/music/staging/widgets/pages/README +0 -2
  347. data/test/.blogs/views/music/staging/widgets/pages/disclaim.lt3 +0 -6
  348. data/test/.blogs/views/music/staging/widgets/pages/faq.lt3 +0 -6
  349. data/test/.blogs/views/music/staging/widgets/pages/generated.lt3 +0 -4
  350. data/test/.blogs/views/music/staging/widgets/pages/lifestory.lt3 +0 -6
  351. data/test/.blogs/views/music/staging/widgets/pages/like-dislike.lt3 +0 -6
  352. data/test/.blogs/views/music/staging/widgets/pages/list.data +0 -4
  353. data/test/.blogs/views/music/staging/widgets/pages/main.html +0 -9
  354. data/test/.blogs/views/music/staging/widgets/pages/main.lt3 +0 -18
  355. data/test/.blogs/views/music/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  356. data/test/.blogs/views/music/themes/standard/README +0 -59
  357. data/test/.blogs/views/music/themes/standard/blog/generate.lt3 +0 -17
  358. data/test/.blogs/views/music/themes/standard/blog/head.lt3 +0 -9
  359. data/test/.blogs/views/music/themes/standard/blog/index.lt3 +0 -6
  360. data/test/.blogs/views/music/themes/standard/blog/post_entry.lt3 +0 -19
  361. data/test/.blogs/views/music/themes/standard/etc/blog.css +0 -34
  362. data/test/.blogs/views/music/themes/standard/etc/blog.css.lt3 +0 -36
  363. data/test/.blogs/views/music/themes/standard/etc/externals.lt3 +0 -19
  364. data/test/.blogs/views/music/themes/standard/etc/favicon.ico +0 -0
  365. data/test/.blogs/views/music/themes/standard/etc/misc.js +0 -6
  366. data/test/.blogs/views/music/themes/standard/global.lt3 +0 -22
  367. data/test/.blogs/views/music/themes/standard/navbar/about.html +0 -6
  368. data/test/.blogs/views/music/themes/standard/navbar/contact.html +0 -6
  369. data/test/.blogs/views/music/themes/standard/navbar/navbar.lt3 +0 -6
  370. data/test/.blogs/views/music/themes/standard/post/generate.lt3 +0 -26
  371. data/test/.blogs/views/music/themes/standard/post/head.lt3 +0 -4
  372. data/test/.blogs/views/music/themes/standard/post/index.lt3 +0 -16
  373. data/test/.blogs/views/music/themes/standard/post/permalink.lt3 +0 -26
  374. data/test/.blogs/views/music/themes/standard/sidebar/README +0 -3
  375. data/test/.blogs/views/music/themes/standard/widgets/README +0 -4
  376. data/test/.blogs/views/music/themes/standard/widgets/ad/ad.lt3 +0 -12
  377. data/test/.blogs/views/music/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  378. data/test/.blogs/views/music/themes/standard/widgets/news/list.data +0 -4
  379. data/test/.blogs/views/music/themes/standard/widgets/news/news.lt3 +0 -3
  380. data/test/.blogs/views/music/themes/standard/widgets/pages/README +0 -2
  381. data/test/.blogs/views/music/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  382. data/test/.blogs/views/music/themes/standard/widgets/pages/faq.lt3 +0 -6
  383. data/test/.blogs/views/music/themes/standard/widgets/pages/generated.lt3 +0 -4
  384. data/test/.blogs/views/music/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  385. data/test/.blogs/views/music/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  386. data/test/.blogs/views/music/themes/standard/widgets/pages/list.data +0 -4
  387. data/test/.blogs/views/music/themes/standard/widgets/pages/main.html +0 -9
  388. data/test/.blogs/views/music/themes/standard/widgets/pages/main.lt3 +0 -18
  389. data/test/.blogs/views/music/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  390. data/test/.blogs/views/test_view/last_published +0 -1
  391. data/test/.blogs/views/test_view/publish +0 -5
  392. data/test/.blogs/views/test_view/remote/etc/blog.css +0 -34
  393. data/test/.blogs/views/test_view/remote/etc/blog.css.lt3 +0 -36
  394. data/test/.blogs/views/test_view/remote/etc/externals.lt3 +0 -19
  395. data/test/.blogs/views/test_view/remote/etc/favicon.ico +0 -0
  396. data/test/.blogs/views/test_view/remote/etc/misc.js +0 -6
  397. data/test/.blogs/views/test_view/remote/widgets/README +0 -4
  398. data/test/.blogs/views/test_view/remote/widgets/ad/ad.lt3 +0 -12
  399. data/test/.blogs/views/test_view/remote/widgets/calendar/calendar.lt3 +0 -6
  400. data/test/.blogs/views/test_view/remote/widgets/news/list.data +0 -4
  401. data/test/.blogs/views/test_view/remote/widgets/news/news.lt3 +0 -3
  402. data/test/.blogs/views/test_view/remote/widgets/pages/README +0 -2
  403. data/test/.blogs/views/test_view/remote/widgets/pages/disclaim.lt3 +0 -6
  404. data/test/.blogs/views/test_view/remote/widgets/pages/faq.lt3 +0 -6
  405. data/test/.blogs/views/test_view/remote/widgets/pages/generated.lt3 +0 -4
  406. data/test/.blogs/views/test_view/remote/widgets/pages/lifestory.lt3 +0 -6
  407. data/test/.blogs/views/test_view/remote/widgets/pages/like-dislike.lt3 +0 -6
  408. data/test/.blogs/views/test_view/remote/widgets/pages/list.data +0 -4
  409. data/test/.blogs/views/test_view/remote/widgets/pages/main.html +0 -9
  410. data/test/.blogs/views/test_view/remote/widgets/pages/main.lt3 +0 -18
  411. data/test/.blogs/views/test_view/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  412. data/test/.blogs/views/test_view/staging/README +0 -59
  413. data/test/.blogs/views/test_view/staging/blog/generate.lt3 +0 -17
  414. data/test/.blogs/views/test_view/staging/blog/head.lt3 +0 -9
  415. data/test/.blogs/views/test_view/staging/blog/index.lt3 +0 -6
  416. data/test/.blogs/views/test_view/staging/blog/post_entry.lt3 +0 -19
  417. data/test/.blogs/views/test_view/staging/etc/blog.css +0 -34
  418. data/test/.blogs/views/test_view/staging/etc/blog.css.lt3 +0 -36
  419. data/test/.blogs/views/test_view/staging/etc/externals.lt3 +0 -19
  420. data/test/.blogs/views/test_view/staging/etc/favicon.ico +0 -0
  421. data/test/.blogs/views/test_view/staging/etc/misc.js +0 -6
  422. data/test/.blogs/views/test_view/staging/global.lt3 +0 -22
  423. data/test/.blogs/views/test_view/staging/navbar/about.html +0 -6
  424. data/test/.blogs/views/test_view/staging/navbar/contact.html +0 -6
  425. data/test/.blogs/views/test_view/staging/navbar/navbar.lt3 +0 -6
  426. data/test/.blogs/views/test_view/staging/post/generate.lt3 +0 -26
  427. data/test/.blogs/views/test_view/staging/post/head.lt3 +0 -4
  428. data/test/.blogs/views/test_view/staging/post/index.lt3 +0 -16
  429. data/test/.blogs/views/test_view/staging/post/permalink.lt3 +0 -26
  430. data/test/.blogs/views/test_view/staging/sidebar/README +0 -3
  431. data/test/.blogs/views/test_view/staging/widgets/README +0 -4
  432. data/test/.blogs/views/test_view/staging/widgets/ad/ad.lt3 +0 -12
  433. data/test/.blogs/views/test_view/staging/widgets/calendar/calendar.lt3 +0 -6
  434. data/test/.blogs/views/test_view/staging/widgets/news/list.data +0 -4
  435. data/test/.blogs/views/test_view/staging/widgets/news/news.lt3 +0 -3
  436. data/test/.blogs/views/test_view/staging/widgets/pages/README +0 -2
  437. data/test/.blogs/views/test_view/staging/widgets/pages/disclaim.lt3 +0 -6
  438. data/test/.blogs/views/test_view/staging/widgets/pages/faq.lt3 +0 -6
  439. data/test/.blogs/views/test_view/staging/widgets/pages/generated.lt3 +0 -4
  440. data/test/.blogs/views/test_view/staging/widgets/pages/lifestory.lt3 +0 -6
  441. data/test/.blogs/views/test_view/staging/widgets/pages/like-dislike.lt3 +0 -6
  442. data/test/.blogs/views/test_view/staging/widgets/pages/list.data +0 -4
  443. data/test/.blogs/views/test_view/staging/widgets/pages/main.html +0 -9
  444. data/test/.blogs/views/test_view/staging/widgets/pages/main.lt3 +0 -18
  445. data/test/.blogs/views/test_view/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  446. data/test/.blogs/views/test_view/themes/standard/README +0 -59
  447. data/test/.blogs/views/test_view/themes/standard/blog/generate.lt3 +0 -17
  448. data/test/.blogs/views/test_view/themes/standard/blog/head.lt3 +0 -9
  449. data/test/.blogs/views/test_view/themes/standard/blog/index.lt3 +0 -6
  450. data/test/.blogs/views/test_view/themes/standard/blog/post_entry.lt3 +0 -19
  451. data/test/.blogs/views/test_view/themes/standard/etc/blog.css +0 -34
  452. data/test/.blogs/views/test_view/themes/standard/etc/blog.css.lt3 +0 -36
  453. data/test/.blogs/views/test_view/themes/standard/etc/externals.lt3 +0 -19
  454. data/test/.blogs/views/test_view/themes/standard/etc/favicon.ico +0 -0
  455. data/test/.blogs/views/test_view/themes/standard/etc/misc.js +0 -6
  456. data/test/.blogs/views/test_view/themes/standard/global.lt3 +0 -22
  457. data/test/.blogs/views/test_view/themes/standard/navbar/about.html +0 -6
  458. data/test/.blogs/views/test_view/themes/standard/navbar/contact.html +0 -6
  459. data/test/.blogs/views/test_view/themes/standard/navbar/navbar.lt3 +0 -6
  460. data/test/.blogs/views/test_view/themes/standard/post/generate.lt3 +0 -26
  461. data/test/.blogs/views/test_view/themes/standard/post/head.lt3 +0 -4
  462. data/test/.blogs/views/test_view/themes/standard/post/index.lt3 +0 -16
  463. data/test/.blogs/views/test_view/themes/standard/post/permalink.lt3 +0 -26
  464. data/test/.blogs/views/test_view/themes/standard/sidebar/README +0 -3
  465. data/test/.blogs/views/test_view/themes/standard/widgets/README +0 -4
  466. data/test/.blogs/views/test_view/themes/standard/widgets/ad/ad.lt3 +0 -12
  467. data/test/.blogs/views/test_view/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  468. data/test/.blogs/views/test_view/themes/standard/widgets/news/list.data +0 -4
  469. data/test/.blogs/views/test_view/themes/standard/widgets/news/news.lt3 +0 -3
  470. data/test/.blogs/views/test_view/themes/standard/widgets/pages/README +0 -2
  471. data/test/.blogs/views/test_view/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  472. data/test/.blogs/views/test_view/themes/standard/widgets/pages/faq.lt3 +0 -6
  473. data/test/.blogs/views/test_view/themes/standard/widgets/pages/generated.lt3 +0 -4
  474. data/test/.blogs/views/test_view/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  475. data/test/.blogs/views/test_view/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  476. data/test/.blogs/views/test_view/themes/standard/widgets/pages/list.data +0 -4
  477. data/test/.blogs/views/test_view/themes/standard/widgets/pages/main.html +0 -9
  478. data/test/.blogs/views/test_view/themes/standard/widgets/pages/main.lt3 +0 -18
  479. data/test/.blogs/views/test_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  480. data/themes/standard/README +0 -59
  481. data/themes/standard/blog/generate.lt3 +0 -17
  482. data/themes/standard/blog/head.lt3 +0 -9
  483. data/themes/standard/blog/index.lt3 +0 -5
  484. data/themes/standard/blog/post_entry.lt3 +0 -19
  485. data/themes/standard/blog/recent.lt3 +0 -2
  486. data/themes/standard/etc/blog.css.lt3 +0 -36
  487. data/themes/standard/etc/externals.lt3 +0 -19
  488. data/themes/standard/etc/favicon.ico +0 -0
  489. data/themes/standard/etc/misc.js +0 -6
  490. data/themes/standard/global.lt3 +0 -22
  491. data/themes/standard/navbar/about.html +0 -6
  492. data/themes/standard/navbar/contact.html +0 -6
  493. data/themes/standard/navbar/navbar.lt3 +0 -6
  494. data/themes/standard/post/generate.lt3 +0 -24
  495. data/themes/standard/post/head.lt3 +0 -4
  496. data/themes/standard/post/index.lt3 +0 -16
  497. data/themes/standard/post/permalink.lt3 +0 -26
  498. data/themes/standard/sidebar/README +0 -3
  499. data/themes/standard/widgets/README +0 -4
  500. data/themes/standard/widgets/ad/ad.lt3 +0 -15
  501. data/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  502. data/themes/standard/widgets/news/list.data +0 -4
  503. data/themes/standard/widgets/news/news.lt3 +0 -2
  504. data/themes/standard/widgets/pages/README +0 -2
  505. data/themes/standard/widgets/pages/disclaim.html +0 -6
  506. data/themes/standard/widgets/pages/disclaim.lt3 +0 -5
  507. data/themes/standard/widgets/pages/faq.html +0 -7
  508. data/themes/standard/widgets/pages/faq.lt3 +0 -6
  509. data/themes/standard/widgets/pages/generated.lt3 +0 -4
  510. data/themes/standard/widgets/pages/lifestory.html +0 -7
  511. data/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  512. data/themes/standard/widgets/pages/like-dislike.html +0 -7
  513. data/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  514. data/themes/standard/widgets/pages/list.data +0 -4
  515. data/themes/standard/widgets/pages/main.html +0 -9
  516. data/themes/standard/widgets/pages/pages.lt3 +0 -2
  517. data/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae634ff247c9e37f85f453412336c0256c6c2d51277b602d3d6a730cc6690d0f
4
- data.tar.gz: 6c1820b2b838177cf75ae2762143ac476d63800ca47fdd5965885c4e84c653c9
3
+ metadata.gz: e1ecf6f4cbaffb7d77bd5669b64be6f790db0f8cd59b6c7f8a7d1385685b35df
4
+ data.tar.gz: ef364507a3a26dc3c53167b430c8261e9fd4fd244e44978810ff64a960645a96
5
5
  SHA512:
6
- metadata.gz: 373bb671173802b8a18391facbaa1f08623e2983b4af30e85b9df581fad0a8513aa0da517bead1be0cee1ae8ef1cf36d24d3be84741741dbdb1c51c30e40041b
7
- data.tar.gz: 326dee189dd41fe401004684e05bc4b8587809911d2ad4ac0c9555e7da238a3febc9e4fd12b970ac4db9c47818cc4ece7b420f67807216456ed3639b6e0611b9
6
+ metadata.gz: 917b2921787dfdf80eeda5dd4fa02dbca23b7f96798d07328cfa5809c226f2cb5db5c7c08c31eab6cdc40216c67766340951f08b6b007de28a195bb280093363
7
+ data.tar.gz: 1e64d1d1746b7d9939845f2da30da8ad5e70173307d37fcabb22a147d0a1aba9e1098613fe5e082593f3f4033a74ffe8d27a0b3607f7667322a8d949a26e3427
Binary file
@@ -3,6 +3,8 @@ require 'fileutils'
3
3
 
4
4
  # Home = Dir.pwd # unless Home
5
5
 
6
+ LEXT = ".lt3"
7
+
6
8
  module RuneBlog::Helpers
7
9
 
8
10
  def copy(src, dst)
@@ -31,23 +33,57 @@ exit unless rc
31
33
  # end
32
34
  end
33
35
 
34
- def stale?(src, dst)
36
+ def stale?(src, dst, force = false)
35
37
  log!(enter: __method__, args: [src, dst])
38
+ raise "Source #{src} not found in #{Dir.pwd}" unless File.exist?(src)
39
+ return true if force
36
40
  return true unless File.exist?(dst)
37
41
  return true if File.mtime(src) > File.mtime(dst)
38
42
  return false
39
43
  end
40
44
 
41
- def livetext(src, dst=nil)
42
- log!(enter: __method__, args: [src, dst])
43
- src << ".lt3" unless src.end_with?(".lt3")
44
- if dst
45
- dst << ".html" unless dst.end_with?(".html")
46
- else
47
- dst = src.sub(/.lt3$/, "")
45
+ # def livetext(src, dst=nil, dir=".")
46
+ # log!(enter: __method__, args: [src, dst])
47
+ # src << ".lt3" unless src.end_with?(".lt3")
48
+ # if dst
49
+ # dst << ".html" unless dst.end_with?(".html")
50
+ # else
51
+ # dst = src.sub(/.lt3$/, "")
52
+ # end
53
+ ## return unless stale?(src, dst)
54
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
55
+ # end
56
+ #
57
+ # def livetext!(src, dst=nil, dir=".")
58
+ # log!(enter: __method__, args: [src, dst])
59
+ # src << ".lt3" unless src.end_with?(".lt3")
60
+ # if dst
61
+ # dst << ".html" unless dst.end_with?(".html")
62
+ # else
63
+ # dst = src.sub(/.lt3$/, "")
64
+ # end
65
+ ## return unless stale?(src, dst)
66
+ #STDERR.puts "-- livetext #{src} >#{dst} \n in: #{Dir.pwd}\n from: #{caller[0]}"
67
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
68
+ #STDERR.puts "... completed"
69
+ # end
70
+
71
+ def xlate(cwd: Dir.pwd, src:,
72
+ dst: (strip = true; src.sub(/.lt3$/,"")),
73
+ copy: nil, debug: false, force: false)
74
+ src += LEXT unless src.end_with?(LEXT)
75
+ dst += ".html" unless dst.end_with?(".html") || strip
76
+ Dir.chdir(cwd) do
77
+ return unless stale?(src, dst, force)
78
+ if debug
79
+ STDERR.puts "-- xlate #{src} >#{dst}"
80
+ STDERR.puts " in: #{Dir.pwd}"
81
+ STDERR.puts " from: #{caller[0]}"
82
+ STDERR.puts " copy: #{copy}" if copy
83
+ end
84
+ rc = system("livetext #{src} >#{dst}")
48
85
  end
49
- # return unless stale?(src, dst)
50
- system("livetext #{src} >#{dst}")
86
+ STDERR.puts "...completed (shell returned #{rc})" if debug
51
87
  end
52
88
 
53
89
  def get_root
@@ -19,7 +19,7 @@ def init_liveblog # FIXME - a lot of this logic sucks
19
19
  @view_name = @blog.view.name
20
20
  @vdir = @blog.view.dir
21
21
  @version = RuneBlog::VERSION
22
- @theme = @vdir + "/themes/standard/"
22
+ @theme = @vdir/:themes/:standard
23
23
  end
24
24
 
25
25
  # FIXME - stale? and livetext are duplicated from helpers-blog
@@ -96,38 +96,30 @@ def list!
96
96
  _optional_blank_line
97
97
  end
98
98
 
99
- def html_body(file)
99
+ def _html_body(file)
100
100
  file.puts "<html>\n <body>"
101
101
  yield
102
102
  file.puts " </body>\n</html>"
103
103
  end
104
104
 
105
- def make_news_links
106
- # FIXME remember strings may not be safe
107
- line = _data.chomp
108
- input, cardfile, mainfile, card_title = *line.split(" ", 4)
109
- pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
110
- # HTML for main area (iframe)
111
- File.open("#{mainfile}.html", "w") do |f|
112
- html_body(f) do
113
- f.puts "<h1>#{card_title}</h1>"
114
- pairs.each do |file, title|
115
- f.puts %[<a style="text-decoration: none; font-size: 24px" href="#{file}">#{title}</a> <br>]
116
- end
117
- end
118
- end
105
+ def _write_card(cardfile, mainfile, pairs, card_title, tag, relative: true)
119
106
  # HTML for sidebar card
107
+ log!(str: "Creating #{cardfile}.html", pwd: true)
108
+ # TTY.puts "Creating #{cardfile}.html - pwd = #{Dir.pwd}"
120
109
  File.open("#{cardfile}.html", "w") do |f|
121
110
  f.puts <<-EOS
122
111
  <div class="card mb-3">
123
112
  <div class="card-body">
124
113
  <h5 class="card-title">
125
114
  <a href="javascript: void(0)"
126
- onclick="javascript:open_main('widgets/news/#{mainfile}.html')"
115
+ onclick="javascript:open_main('widgets/#{tag}/#{mainfile}.html')"
127
116
  style="text-decoration: none; color: black">#{card_title}</a>
128
117
  </h5>
129
118
  EOS
119
+ log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
120
+ top = :widgets/tag # FIXME ???
130
121
  pairs.each do |file, title|
122
+ # took out #{top}#{file}
131
123
  f.puts <<-EOS
132
124
  <li class="list-group-item"> <a href="javascript: void(0)"
133
125
  onclick="javascript:open_main('#{file}')">#{title}</a> </li>
@@ -140,6 +132,35 @@ def make_news_links
140
132
  end
141
133
  end
142
134
 
135
+ def _write_main(mainfile, pairs, card_title)
136
+ # HTML for main area (iframe)
137
+ log!(str: "Creating #{mainfile}.html", pwd: true)
138
+ File.open("#{mainfile}.html", "w") do |f|
139
+ _html_body(f) do
140
+ f.puts "<h1>#{card_title}</h1>"
141
+ pairs.each do |file, title|
142
+ main = _main(file)
143
+ f.puts %[<a style="text-decoration: none; font-size: 24px" #{main}>#{title}</a> <br>]
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ def make_main_links
150
+ log!(enter: __method__)
151
+ # FIXME remember strings may not be safe
152
+ line = _data.chomp
153
+ tag, card_title = *line.split(" ", 2)
154
+ cardfile, mainfile = "#{tag}-card", "#{tag}-main"
155
+ input = "list.data"
156
+ log!(str: "Reading #{input}", pwd: true)
157
+ pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
158
+ _write_main(mainfile, pairs, card_title)
159
+ widget_relative = false # (tag != "news") # FIXME kludge!!!
160
+ _write_card(cardfile, mainfile, pairs, card_title, tag, relative: widget_relative)
161
+ log!(str: "...returning from method", pwd: true)
162
+ end
163
+
143
164
  ### inset
144
165
 
145
166
  def inset
@@ -209,7 +230,7 @@ end
209
230
  def image # primitive so far
210
231
  _debug "img: huh? <img src=#{_args.first}></img>"
211
232
  fname = _args.first
212
- path = "assets/#{fname}"
233
+ path = :assets/fname
213
234
  _out "<img src=#{path}></img>"
214
235
  _optional_blank_line
215
236
  end
@@ -236,23 +257,20 @@ def pin
236
257
  _optional_blank_line
237
258
  end
238
259
 
239
- def write_post
240
- raise "'post' was not called" unless @meta
241
- save = Dir.pwd
242
- @postdir.gsub!(/\/\//, "/") # FIXME unneeded?
243
- Dir.mkdir(@postdir) unless Dir.exist?(@postdir) # FIXME remember assets!
244
- Dir.chdir(@postdir)
245
- @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
246
- @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
260
+ def _write_metadata
247
261
  File.write("teaser.txt", @meta.teaser)
248
-
249
262
  fields = [:num, :title, :date, :pubdate, :views, :tags]
250
-
251
263
  fname2 = "metadata.txt"
252
264
  f2 = File.open(fname2, "w") do |f2|
253
265
  fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" }
254
266
  end
255
- Dir.chdir(save)
267
+ end
268
+
269
+ def write_post
270
+ raise "'post' was not called" unless @meta
271
+ @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
272
+ @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
273
+ _write_metadata
256
274
  rescue => err
257
275
  puts "err = #{err}"
258
276
  puts err.backtrace.join("\n")
@@ -267,19 +285,25 @@ def teaser
267
285
  end
268
286
 
269
287
  def finalize
288
+ STDERR.puts :cp1
270
289
  unless @meta
271
290
  puts @live.body
272
291
  return
273
292
  end
293
+ STDERR.puts :cp4
274
294
  if @blog.nil?
275
295
  return @meta
276
296
  end
277
297
 
298
+ STDERR.puts :cp6
278
299
  @slug = @blog.make_slug(@meta)
300
+ STDERR.puts :cp7
279
301
  slug_dir = @slug
280
- @postdir = @blog.view.dir + "/posts/#{slug_dir}"
302
+ @postdir = @blog.view.dir/:posts/slug_dir
281
303
  STDERR.puts "--- finalize: pwd = #{Dir.pwd} postdir = #@postdir"
304
+ STDERR.puts :cp8
282
305
  write_post
306
+ STDERR.puts :cp9
283
307
  @meta
284
308
  end
285
309
 
@@ -423,10 +447,12 @@ def sidebar
423
447
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
424
448
  _args do |token|
425
449
  tag = token.chomp.strip.downcase
426
- # Doesn't handle "split personality" widgets yet
427
- Dir.chdir("widgets/#{tag}") do
428
- livetext tag, "card-#{tag}.html"
429
- _include_file "card-#{tag}.html"
450
+ wtag = :widgets/tag
451
+ raise "Can't find #{wtag}" unless Dir.exist?(wtag)
452
+ Dir.chdir(wtag) do
453
+ tcard = "#{tag}-card.html"
454
+ livetext tag, tcard
455
+ _include_file tcard
430
456
  end
431
457
  end
432
458
  _out %[</div>]
@@ -490,8 +516,8 @@ def _post_lookup(postid) # side-effect
490
516
  # .. = templates, ../.. = views/thisview
491
517
  slug = title = date = teaser_text = nil
492
518
 
493
- dir_posts = @vdir + "/posts"
494
- posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
519
+ dir_posts = @vdir/:posts
520
+ posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
495
521
  posts.select! {|x| File.directory?(x) }
496
522
 
497
523
  post = posts.select {|x| File.basename(x).to_i == postid }
@@ -606,7 +632,7 @@ def tag_cloud
606
632
  _out open
607
633
  _body do |line|
608
634
  line.chomp!
609
- url, classname, cdata = line.split(",", 4)
635
+ url, classname, cdata = line.split(",", 3)
610
636
  main = _main(url)
611
637
  _out %[<a #{main} class="#{classname}">#{cdata}</a>]
612
638
  end
@@ -648,7 +674,7 @@ def navbar
648
674
  first = false
649
675
  _out %[<li class="nav-item active"> <a class="nav-link" href="#{href}">#{cdata}<span class="sr-only">(current)</span></a> </li>]
650
676
  else
651
- main = _main("navbar/#{href}")
677
+ main = _main(:navbar/href)
652
678
  _out %[<li class="nav-item"> <a class="nav-link" #{main}>#{cdata}</a> </li>]
653
679
  end
654
680
  end
@@ -0,0 +1,14 @@
1
+ module PathSep
2
+ def /(right)
3
+ s1 = self.to_s.dup
4
+ s2 = right.to_s.dup
5
+ s1 << "/" unless s2.end_with?("/") || s2.start_with?("/")
6
+ path = s1 + s2
7
+ path.gsub!("//", "/")
8
+ path
9
+ end
10
+ end
11
+
12
+ String.include(PathSep)
13
+ Symbol.include(PathSep)
14
+
@@ -10,23 +10,25 @@ require 'view'
10
10
  require 'publish'
11
11
  require 'post'
12
12
 
13
+ require 'pathmagic'
14
+
13
15
  ###
14
16
 
15
17
  class RuneBlog
16
18
 
17
19
  DotDir = ".blogs"
18
20
  ConfigFile = "config"
19
- Themes = RuneBlog::Path + "/../themes"
21
+ Themes = RuneBlog::Path/"../themes"
20
22
 
21
- make_exception(:FileNotFound, "File $1 was not found")
23
+ make_exception(:FileNotFound, "File $1 was not found")
22
24
  make_exception(:BlogRepoAlreadyExists, "Blog repo $1 already exists")
23
- make_exception(:CantAssignView, "$1 is not a view")
24
- make_exception(:ViewAlreadyExists, "View $1 already exists")
25
- make_exception(:DirAlreadyExists, "Directory $1 already exists")
26
- make_exception(:CantCreateDir, "Can't create directory $1")
27
- make_exception(:EditorProblem, "Could not edit $1")
28
- make_exception(:NoSuchView, "No such view: $1")
29
- make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
25
+ make_exception(:CantAssignView, "$1 is not a view")
26
+ make_exception(:ViewAlreadyExists, "View $1 already exists")
27
+ make_exception(:DirAlreadyExists, "Directory $1 already exists")
28
+ make_exception(:CantCreateDir, "Can't create directory $1")
29
+ make_exception(:EditorProblem, "Could not edit $1")
30
+ make_exception(:NoSuchView, "No such view: $1")
31
+ make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
30
32
 
31
33
  class << self
32
34
  attr_accessor :blog
@@ -43,7 +45,7 @@ class RuneBlog
43
45
  def self.create_new_blog_repo(dir = ".blogs")
44
46
  log!(enter: __method__, args: [dir])
45
47
  raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
46
- root_dir = Dir.pwd + "/" + dir
48
+ root_dir = Dir.pwd/dir
47
49
  self.create(dir)
48
50
  rescue => err
49
51
  puts "Can't create blog repo: '#{dir}' - #{err}"
@@ -55,12 +57,12 @@ class RuneBlog
55
57
  # Crude - FIXME later - # What views are there? Publishing, etc.
56
58
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
57
59
  $_blog = self # Dumber still?
58
- root = Dir.pwd + "/" + root
60
+ root = Dir.pwd/root
59
61
  raise BlogRepoAlreadyExists if Dir.exist?(root)
60
62
  create_dirs(root)
61
63
  Dir.chdir(root) do
62
64
  system("cp #{RuneBlog::Path}/../empty_view.tgz .")
63
- create_dirs(:drafts, :views)
65
+ create_dirs(:drafts, :views, :posts)
64
66
  new_sequence
65
67
  end
66
68
  put_config(root: root)
@@ -74,7 +76,7 @@ class RuneBlog
74
76
  # Crude - FIXME later - # What views are there? Publishing, etc.
75
77
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
76
78
  $_blog = self # Dumber still?
77
- root = Dir.pwd + "/" + root
79
+ root = Dir.pwd/root
78
80
  blog = self.new(root)
79
81
  end
80
82
 
@@ -85,7 +87,7 @@ class RuneBlog
85
87
  $_blog = self # Dumber still?
86
88
 
87
89
  @root = root_dir
88
- file = @root + "/" + ConfigFile
90
+ file = @root/ConfigFile
89
91
  errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
90
92
  raise errmsg unless File.exist?(file)
91
93
 
@@ -99,6 +101,23 @@ class RuneBlog
99
101
  @post_tags = []
100
102
  end
101
103
 
104
+ def _deploy_local(dir)
105
+ log!(enter: __method__, args: [dir])
106
+ Dir.chdir(dir) do
107
+ views = File.readlines("metadata.txt").grep(/^.views /).first[7..-1].split
108
+ views.each {|v| system("cp *html #@root/views/#{v}/remote") }
109
+ end
110
+ end
111
+
112
+ def process_post(sourcefile)
113
+ log!(enter: __method__, args: [dir])
114
+ nslug = sourcefile.sub(/.lt3/, "")
115
+ dir = @root/:posts/nslug
116
+ create_dir(dir)
117
+ xlate cwd: dir, src: sourcefile, debug: true
118
+ _deploy_local(dir)
119
+ end
120
+
102
121
  def inspect
103
122
  log!(enter: __method__)
104
123
  str = "blog: "
@@ -130,7 +149,7 @@ class RuneBlog
130
149
 
131
150
  def _set_publisher
132
151
  log!(enter: __method__)
133
- file = @view.dir + "/publish"
152
+ file = @view.dir/:publish
134
153
  @view.publisher = nil
135
154
  return unless File.exist?(file)
136
155
  @view.publisher = RuneBlog::Publishing.new(read_config(file))
@@ -154,13 +173,13 @@ class RuneBlog
154
173
 
155
174
  def get_sequence
156
175
  log!(enter: __method__)
157
- File.read(root + "/sequence").to_i
176
+ File.read(@root/:sequence).to_i
158
177
  end
159
178
 
160
179
  def next_sequence
161
180
  log!(enter: __method__)
162
181
  @sequence += 1
163
- dump(@sequence, "#@root/sequence")
182
+ dump(@sequence, @root/:sequence)
164
183
  @sequence
165
184
  end
166
185
 
@@ -169,60 +188,73 @@ class RuneBlog
169
188
  v = str2view(v) if v.is_a?(String)
170
189
  raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
171
190
  v ||= @view
172
- @root + "/views/#{v}/"
191
+ return @root/:views/v
173
192
  end
174
193
 
175
194
  def self.exist?
176
195
  log!(enter: __method__)
177
- Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
196
+ Dir.exist?(DotDir) && File.exist?(DotDir/ConfigFile)
178
197
  end
179
198
 
180
- def _copy_to_staging
181
- copy!("themes/standard/", "staging/")
182
- copy!("themes/standard/widgets/", "staging/")
199
+ def make_dummy_publish_file(view_name)
200
+ log!(enter: __method__, args: [view_name])
201
+ vdir = @root/:views/view_name
202
+ pub = [:user, :server, :docroot, :path, :proto]
203
+ pub = pub.map {|x| x.to_s + ": undefined" }
204
+ pub = pub.join("\n") + "\n"
205
+ dump(pub, vdir/:publish)
183
206
  end
184
207
 
185
- def _copy_to_remote
186
- copy!("themes/standard/etc", "remote/")
187
- copy!("themes/standard/assets", "remote/")
188
- copy!("themes/standard/widgets", "remote/")
208
+ def mark_last_published(str)
209
+ log!(enter: __method__, args: [str])
210
+ dump(str, "last_published")
189
211
  end
190
212
 
191
- def create_view(arg)
192
- log!(enter: __method__, args: [arg])
193
- raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
194
-
195
- names = self.views.map(&:to_s)
196
- raise ViewAlreadyExists(arg) if names.include?(arg)
197
-
198
- vdir = arg.dup
199
- raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
213
+ def add_view(view_name)
214
+ log!(enter: __method__, args: [view_name])
215
+ view = RuneBlog::View.new(view_name)
216
+ @view = view # current view
217
+ @views << view # all views
218
+ view
219
+ end
200
220
 
221
+ def make_empty_view_tree(view_name)
222
+ log!(enter: __method__, args: [view_name])
201
223
  Dir.chdir(@root) do
202
224
  cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
203
- cmd2 = "cp -r empty_view views/#{arg}"
225
+ cmd2 = "cp -r empty_view views/#{view_name}"
204
226
  system(cmd1)
205
227
  system(cmd2)
206
228
  end
229
+ end
207
230
 
208
- Dir.chdir("#@root/views/#{vdir}") do
209
- livetext "themes/standard/blog/generate", "remote/index"
210
- pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
211
- dump(pub, "publish")
231
+ def check_valid_new_view(view_name)
232
+ log!(enter: __method__, args: [view_name])
233
+ raise ArgumentError unless view_name.is_a?(String)
234
+ raise ArgumentError if view_name.empty?
235
+ names = self.views.map(&:to_s)
236
+ bad = names.include?(view_name)
237
+ raise ViewAlreadyExists(view_name) if bad
238
+ vdir = @root/:views/view_name
239
+ raise DirAlreadyExists(view_name) if Dir.exist?(vdir)
240
+ return true # hm?
241
+ end
212
242
 
213
- view = RuneBlog::View.new(arg)
214
- self.view = view
215
- dump("Initial creation", "last_published")
216
- end
217
- @views << view
218
- @views
243
+ def create_view(view_name)
244
+ log!(enter: __method__, args: [view_name])
245
+ check_valid_new_view(view_name)
246
+ make_empty_view_tree(view_name)
247
+ make_dummy_publish_file(view_name)
248
+ mark_last_published("Initial creation")
249
+ add_view(view_name)
219
250
  end
220
251
 
221
252
  def delete_view(name, force = false)
222
253
  log!(enter: __method__, args: [name, force])
223
254
  raise ArgumentError unless name.is_a?(String) && ! name.empty?
224
255
  if force
225
- system("rm -rf #@root/views/#{name}")
256
+ vname = @root/:views/name
257
+ system("rm -rf #{vname}")
226
258
  @views -= [str2view(name)]
227
259
  end
228
260
  end
@@ -230,18 +262,17 @@ class RuneBlog
230
262
  def view_files
231
263
  log!(enter: __method__)
232
264
  vdir = self.view.dir
233
- files = ["#{vdir}/index.html"]
234
- files += posts.map {|x| "#{vdir}/#{x}" }
235
- # Huh?
236
- files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_published") }
265
+ files = [vdir/"index.html"]
266
+ files += posts.map {|x| vdir/x }
267
+ files.reject! {|f| File.mtime(f) < File.mtime(vdir/:last_published) }
237
268
  end
238
269
 
239
270
  def post_lookup(postid) # side-effect?
240
271
  log!(enter: __method__, args: [postid])
241
272
  slug = title = date = teaser_text = nil
242
273
 
243
- dir_posts = @vdir + "/posts"
244
- posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
274
+ dir_posts = @vdir/:posts
275
+ posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
245
276
  posts.select! {|x| File.directory?(x) }
246
277
 
247
278
  post = posts.select {|x| File.basename(x).to_i == postid }
@@ -255,13 +286,13 @@ class RuneBlog
255
286
  log!(enter: __method__, args: [slug])
256
287
  id = slug.to_i
257
288
  text = nil
258
- post_entry_name = @theme + "/blog/post_entry.lt3"
289
+ post_entry_name = @theme/"blog/post_entry.lt3"
259
290
  @_post_entry ||= File.read(post_entry_name)
260
291
  vp = post_lookup(id)
261
292
  nslug, aslug, title, date, teaser_text =
262
293
  vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
263
294
  path = vp.path
264
- url = "#{aslug}.html" # Should be relative to .blogs!! FIXME
295
+ url = aslug + ".html"
265
296
  date = ::Date.parse(date)
266
297
  date = date.strftime("%B %e<br>%Y")
267
298
  text = interpolate(@_post_entry, binding)
@@ -271,9 +302,9 @@ class RuneBlog
271
302
  def collect_recent_posts(file)
272
303
  log!(enter: __method__, args: [file])
273
304
  posts = nil
274
- dir_posts = @vdir + "/posts"
305
+ dir_posts = @vdir/:posts
275
306
  entries = Dir.entries(dir_posts)
276
- posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
307
+ posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts/x }
277
308
  posts.select! {|x| File.directory?(x) }
278
309
  # directories that start with four digits
279
310
  posts = posts.sort {|a, b| b.to_i <=> a.to_i } # sort descending
@@ -283,7 +314,6 @@ class RuneBlog
283
314
  <head><link rel="stylesheet" href="etc/blog.css"></head>
284
315
  <body>
285
316
  HTML
286
- # posts = _find_recent_posts
287
317
  wanted = [5, posts.size].min # estimate how many we want?
288
318
  enum = posts.each
289
319
  wanted.times do
@@ -292,19 +322,19 @@ class RuneBlog
292
322
  text << teaser(postid) # side effect! calls _out
293
323
  end
294
324
  text << "</body></html>"
295
- File.write("#@vdir/remote/"+file, text) # FIXME ???
296
- iframe_text = <<-HTML
297
- <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
298
- src='recent.html' width=100% frameborder="0" allowfullscreen>
299
- </iframe>
300
- HTML
325
+ File.write(@vdir/:remote/file, text)
326
+ # iframe_text = <<-HTML
327
+ # <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
328
+ # src='recent.html' width=100% frameborder="0" allowfullscreen>
329
+ # </iframe>
330
+ # HTML
301
331
  # FIXME ^ serves no purpose??
302
332
  end
303
333
 
304
334
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
305
335
  log!(enter: __method__, args: [title, testing, teaser, body, other_views])
306
336
  meta = nil
307
- Dir.chdir(self.view.dir) do
337
+ Dir.chdir(@root/:posts) do
308
338
  post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
309
339
  post.edit unless testing
310
340
  post.build
@@ -319,9 +349,10 @@ class RuneBlog
319
349
  def edit_initial_post(file, testing = false)
320
350
  log!(enter: __method__, args: [file, testing])
321
351
  debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
322
- sourcefile = "#@root/drafts/#{file}"
352
+ sourcefile = @root/:drafts/file
323
353
  result = system("#@editor #{sourcefile} +8") unless testing
324
354
  raise EditorProblem(sourcefile) unless result
355
+ process_post(sourcefile)
325
356
  nil
326
357
  rescue => err
327
358
  error(err)
@@ -329,14 +360,14 @@ class RuneBlog
329
360
 
330
361
  def posts
331
362
  log!(enter: __method__)
332
- dir = self.view.dir + "/posts"
363
+ dir = self.view.dir/:posts
333
364
  posts = Dir.entries(dir).grep(/^\d{4}/)
334
365
  posts
335
366
  end
336
367
 
337
368
  def drafts
338
369
  log!(enter: __method__)
339
- dir = "#@root/drafts"
370
+ dir = @root/:drafts
340
371
  drafts = Dir.entries(dir).grep(/^\d{4}.*/)
341
372
  end
342
373
 
@@ -352,16 +383,16 @@ class RuneBlog
352
383
  def generate_index(view) # FIXME delete?
353
384
  log!(enter: __method__, args: [view], pwd: true, dir: true)
354
385
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
355
- @vdir = @root + "/views/#{view}"
386
+ @vdir = @root/:views/view
356
387
  collect_recent_posts("recent.html")
357
388
  end
358
389
 
359
390
  def generate_view(view) # huh?
360
391
  log!(enter: __method__, args: [view])
361
392
  generate_index(view) # recent posts (recent.html)
362
- Dir.chdir(@root + "/views/#{view}/themes/standard") do
363
- livetext "blog/generate.lt3", "../../remote/index.html"
364
- end
393
+ vdir = @root/:views/view
394
+ xlate cwd: vdir/:themes/:standard,
395
+ src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
365
396
  end
366
397
 
367
398
  def _get_views(draft)
@@ -379,45 +410,77 @@ class RuneBlog
379
410
  log!(enter: __method__, args: [draft, view])
380
411
  fname = File.basename(draft)
381
412
  noext = fname.sub(/.lt3$/, "")
382
- vdir = "#@root/views/#{view}"
383
- dir = "#{vdir}/posts/#{noext}/"
413
+ vdir = @root/:views/view
414
+ dir = vdir/:posts/noext
384
415
  Dir.mkdir(dir) unless Dir.exist?(dir)
385
416
  system("cp #{draft} #{dir}")
386
417
  viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
387
- theme = viewdir + "/themes/standard"
418
+ theme = viewdir/:themes/:standard
388
419
  [noext, viewdir, slugdir, aslug, theme]
389
420
  end
390
421
 
422
+ def _post_metadata(draft, pdraft)
423
+ log!(enter: __method__, args: [draft, pdraft])
424
+ title_line = File.readlines(draft).grep(/^.title /).first
425
+ title = title_line.split(" ", 2)[1]
426
+ # pdir = "
427
+ Dir.chdir(pdraft) do
428
+ excerpt = File.read("teaser.txt")
429
+ vars = %[.set title="#{title.chomp}"\n] +
430
+ %[.set teaser="#{excerpt.chomp}"]
431
+ File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
432
+ end
433
+ end
434
+
435
+ def copy_widget_html(view)
436
+ log!(enter: __method__)
437
+ vdir = @root/:views/view
438
+ remote = vdir/:remote
439
+ wdir = vdir/:themes/:standard/:widgets
440
+ widgets = Dir[wdir/"*"].select {|w| File.directory?(w) }
441
+ widgets.each do |w|
442
+ dir = File.basename(w)
443
+ rem = w.sub(/themes.standard/, "remote")
444
+ create_dirs(rem)
445
+ next unless Dir[w/"*"].any? {|x| x =~ /html$/ }
446
+ system("cp #{w}/*html #{rem}")
447
+ end
448
+ end
449
+
450
+ def _handle_post(draft, view)
451
+ log!(enter: __method__, args: [draft, view])
452
+
453
+ fname = File.basename(draft) # 0001-this-is-a-post.lt3
454
+ nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
455
+ aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
456
+ ahtml = aslug + ".html" # this-is-a-post.html
457
+ pdraft = @root/:posts/nslug
458
+ remote = @root/:views/view/:remote
459
+ @theme = @root/:views/view/:themes/:standard
460
+ # Step 1...
461
+ create_dirs(pdraft)
462
+ xlate cwd: pdraft, src: draft, dst: "guts.html"
463
+ _post_metadata(draft, pdraft)
464
+ # Step 2...
465
+ vposts = @root/:views/view/:posts
466
+ copy!(pdraft, vposts) # ??
467
+ # Step 3..
468
+ copy(pdraft/"guts.html", @theme/:post)
469
+ copy(pdraft/"vars.lt3", @theme/:post)
470
+ # Step 4...
471
+ xlate cwd: @theme/:post, src: "generate.lt3",
472
+ dst: remote/ahtml, copy: @theme/:post
473
+ xlate cwd: @theme/:post, src: "permalink.lt3",
474
+ dst: remote/:permalink/ahtml
475
+ copy_widget_html(view)
476
+ end
477
+
391
478
  def generate_post(draft)
392
479
  log!(enter: __method__, args: [draft])
393
480
  views = _get_views(draft)
394
- views.each do |view|
395
- noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
396
- remote = viewdir + "/remote"
397
- Dir.chdir(slugdir) do
398
- copy(draft, ".")
399
- lt3 = draft.split("/")[-1]
400
- # Remember: Some posts may be in more than one view -- careful with links back
401
- copy(lt3, remote)
402
- html = noext[5..-1]
403
- livetext draft, html # livetext "foobar.lt3", "foobar.html"
404
- copy(html, "../../remote/post/index.html")
405
- title_line = File.readlines(draft).grep(/^.title /).first
406
- title = title_line.split(" ", 2)[1]
407
- excerpt = File.read("teaser.txt")
408
- vars = %[.set title="#{title.chomp}"\n] +
409
- %[.set teaser="#{excerpt.chomp}"]
410
- theme = "../../theme/standard"
411
- File.open("vars.lt3", "w") {|f| f.puts vars }
412
- livetext "#{theme}/post/generate.lt3", "#{remote}/#{html}"
413
- livetext "#{theme}/post/permalink.lt3", "#{remote}/permalink/#{html}"
414
- log!(str: "About to enter remote/", pwd: true, dir: true)
415
- Dir.chdir(remote) do
416
- log!(str: "Now in remote/", pwd: true, dir: true)
417
- system("cp -r ../themes/standard/widgets .")
418
- log!(str: "finished with remote/", pwd: true, dir: true)
419
- end
420
- end
481
+ views.each do |view|
482
+ _handle_post(draft, view)
483
+ generate_view(view)
421
484
  end
422
485
  end
423
486
 
@@ -435,7 +498,7 @@ class RuneBlog
435
498
  self.make_slug(meta)
436
499
  check_meta(meta, "index_entry3")
437
500
  # FIXME clean up and generalize
438
- ref = "#{view}/#{meta.slug}/index.html"
501
+ ref = view/meta.slug/"index.html"
439
502
  <<-HTML
440
503
  <font size=-1>#{meta.date}&nbsp;&nbsp;</font> <br>
441
504
  <font size=+2 color=blue><a href=../#{ref} style="text-decoration: none">#{meta.title}</font></a>
@@ -481,7 +544,7 @@ class RuneBlog
481
544
  def undelete_post(num)
482
545
  log!(enter: __method__, args: [num])
483
546
  raise ArgumentError unless num.is_a?(Integer)
484
- files = Find.find("#@root/views/").to_a
547
+ files = Find.find(@root/:views).to_a
485
548
  tag = prefix(num)
486
549
  list = files.select {|x| File.directory?(x) and x =~ /_#{tag}/ }
487
550
  return nil if list.empty?