ptomato-ramaze 2009.02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. data/README.md +481 -0
  2. data/Rakefile +248 -0
  3. data/benchmark/results.txt +131 -0
  4. data/benchmark/run.rb +362 -0
  5. data/benchmark/suite/minimal.rb +13 -0
  6. data/benchmark/suite/no_informer.rb +9 -0
  7. data/benchmark/suite/no_sessions.rb +10 -0
  8. data/benchmark/suite/no_template.rb +9 -0
  9. data/benchmark/suite/simple.rb +7 -0
  10. data/benchmark/suite/template_amrita2.rb +17 -0
  11. data/benchmark/suite/template_builder.rb +12 -0
  12. data/benchmark/suite/template_erubis.rb +10 -0
  13. data/benchmark/suite/template_ezamar.rb +10 -0
  14. data/benchmark/suite/template_haml.rb +15 -0
  15. data/benchmark/suite/template_liquid.rb +13 -0
  16. data/benchmark/suite/template_markaby.rb +11 -0
  17. data/benchmark/suite/template_nagoro.rb +10 -0
  18. data/benchmark/suite/template_redcloth.rb +15 -0
  19. data/benchmark/suite/template_tenjin.rb +10 -0
  20. data/benchmark/test.rb +35 -0
  21. data/bin/ramaze +80 -0
  22. data/doc/AUTHORS +29 -0
  23. data/doc/CHANGELOG +19530 -0
  24. data/doc/COPYING +56 -0
  25. data/doc/FAQ +92 -0
  26. data/doc/GPL +339 -0
  27. data/doc/INSTALL +92 -0
  28. data/doc/LEGAL +26 -0
  29. data/doc/TODO +29 -0
  30. data/doc/meta/announcement.txt +99 -0
  31. data/doc/meta/configuration.txt +163 -0
  32. data/doc/meta/internals.txt +278 -0
  33. data/doc/meta/users.kml +64 -0
  34. data/doc/readme_chunks/appendix.txt +10 -0
  35. data/doc/readme_chunks/examples.txt +38 -0
  36. data/doc/readme_chunks/features.txt +148 -0
  37. data/doc/readme_chunks/getting_help.txt +5 -0
  38. data/doc/readme_chunks/getting_started.txt +18 -0
  39. data/doc/readme_chunks/installing.txt +92 -0
  40. data/doc/readme_chunks/introduction.txt +18 -0
  41. data/doc/readme_chunks/principles.txt +56 -0
  42. data/doc/readme_chunks/thanks.txt +59 -0
  43. data/doc/tutorial/todolist.html +742 -0
  44. data/doc/tutorial/todolist.mkd +787 -0
  45. data/examples/app/auth/auth.rb +54 -0
  46. data/examples/app/auth/template/layout.haml +20 -0
  47. data/examples/app/auth/template/login.haml +16 -0
  48. data/examples/app/blog/README +3 -0
  49. data/examples/app/blog/controller/main.rb +29 -0
  50. data/examples/app/blog/model/entry.rb +30 -0
  51. data/examples/app/blog/public/styles/blog.css +132 -0
  52. data/examples/app/blog/spec/blog.rb +87 -0
  53. data/examples/app/blog/start.rb +7 -0
  54. data/examples/app/blog/view/edit.xhtml +17 -0
  55. data/examples/app/blog/view/index.xhtml +17 -0
  56. data/examples/app/blog/view/layout.xhtml +11 -0
  57. data/examples/app/blog/view/new.xhtml +16 -0
  58. data/examples/app/chat/model/history.rb +36 -0
  59. data/examples/app/chat/model/message.rb +7 -0
  60. data/examples/app/chat/public/css/chat.css +13 -0
  61. data/examples/app/chat/public/js/chat.js +22 -0
  62. data/examples/app/chat/public/js/jquery.js +3436 -0
  63. data/examples/app/chat/start.rb +40 -0
  64. data/examples/app/chat/view/chat.xhtml +9 -0
  65. data/examples/app/chat/view/index.xhtml +7 -0
  66. data/examples/app/chat/view/layout.xhtml +13 -0
  67. data/examples/app/localization/start.rb +35 -0
  68. data/examples/app/rapaste/Rakefile +34 -0
  69. data/examples/app/rapaste/controller/paste.rb +101 -0
  70. data/examples/app/rapaste/model/paste.rb +58 -0
  71. data/examples/app/rapaste/public/css/active4d.css +114 -0
  72. data/examples/app/rapaste/public/css/all_hallows_eve.css +72 -0
  73. data/examples/app/rapaste/public/css/amy.css +147 -0
  74. data/examples/app/rapaste/public/css/blackboard.css +88 -0
  75. data/examples/app/rapaste/public/css/brilliance_black.css +605 -0
  76. data/examples/app/rapaste/public/css/brilliance_dull.css +599 -0
  77. data/examples/app/rapaste/public/css/cobalt.css +149 -0
  78. data/examples/app/rapaste/public/css/dawn.css +121 -0
  79. data/examples/app/rapaste/public/css/display.css +197 -0
  80. data/examples/app/rapaste/public/css/eiffel.css +121 -0
  81. data/examples/app/rapaste/public/css/espresso_libre.css +109 -0
  82. data/examples/app/rapaste/public/css/idle.css +62 -0
  83. data/examples/app/rapaste/public/css/iplastic.css +80 -0
  84. data/examples/app/rapaste/public/css/lazy.css +73 -0
  85. data/examples/app/rapaste/public/css/mac_classic.css +123 -0
  86. data/examples/app/rapaste/public/css/magicwb_amiga.css +104 -0
  87. data/examples/app/rapaste/public/css/pastels_on_dark.css +188 -0
  88. data/examples/app/rapaste/public/css/slush_poppies.css +85 -0
  89. data/examples/app/rapaste/public/css/spacecadet.css +51 -0
  90. data/examples/app/rapaste/public/css/sunburst.css +180 -0
  91. data/examples/app/rapaste/public/css/twilight.css +137 -0
  92. data/examples/app/rapaste/public/css/zenburnesque.css +91 -0
  93. data/examples/app/rapaste/public/js/jquery.js +11 -0
  94. data/examples/app/rapaste/spec/rapaste.rb +51 -0
  95. data/examples/app/rapaste/start.rb +25 -0
  96. data/examples/app/rapaste/view/copy.xhtml +10 -0
  97. data/examples/app/rapaste/view/index.xhtml +9 -0
  98. data/examples/app/rapaste/view/layout.xhtml +25 -0
  99. data/examples/app/rapaste/view/list.xhtml +29 -0
  100. data/examples/app/rapaste/view/search.xhtml +41 -0
  101. data/examples/app/rapaste/view/view.xhtml +40 -0
  102. data/examples/app/sourceview/public/coderay.css +104 -0
  103. data/examples/app/sourceview/public/images/file.gif +0 -0
  104. data/examples/app/sourceview/public/images/folder.gif +0 -0
  105. data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
  106. data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
  107. data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
  108. data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
  109. data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
  110. data/examples/app/sourceview/public/images/tv-item.gif +0 -0
  111. data/examples/app/sourceview/public/jquery.js +11 -0
  112. data/examples/app/sourceview/public/jquery.treeview.css +48 -0
  113. data/examples/app/sourceview/public/jquery.treeview.js +223 -0
  114. data/examples/app/sourceview/public/sourceview.js +52 -0
  115. data/examples/app/sourceview/sourceview.rb +77 -0
  116. data/examples/app/sourceview/template/index.haml +59 -0
  117. data/examples/app/todolist/README +1 -0
  118. data/examples/app/todolist/public/favicon.ico +0 -0
  119. data/examples/app/todolist/public/js/jquery.js +1923 -0
  120. data/examples/app/todolist/public/ramaze.png +0 -0
  121. data/examples/app/todolist/spec/todolist.rb +132 -0
  122. data/examples/app/todolist/src/controller/main.rb +70 -0
  123. data/examples/app/todolist/src/element/page.rb +31 -0
  124. data/examples/app/todolist/src/model.rb +14 -0
  125. data/examples/app/todolist/start.rb +11 -0
  126. data/examples/app/todolist/template/index.xhtml +17 -0
  127. data/examples/app/todolist/template/new.xhtml +7 -0
  128. data/examples/app/upload/start.rb +19 -0
  129. data/examples/app/upload/view/index.xhtml +25 -0
  130. data/examples/app/whywiki/spec/whywiki.rb +58 -0
  131. data/examples/app/whywiki/start.rb +46 -0
  132. data/examples/app/whywiki/template/edit.xhtml +14 -0
  133. data/examples/app/whywiki/template/show.xhtml +18 -0
  134. data/examples/app/wikore/spec/wikore.rb +111 -0
  135. data/examples/app/wikore/src/controller.rb +80 -0
  136. data/examples/app/wikore/src/model.rb +53 -0
  137. data/examples/app/wikore/start.rb +9 -0
  138. data/examples/app/wikore/template/index.xhtml +8 -0
  139. data/examples/app/wiktacular/README +2 -0
  140. data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
  141. data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
  142. data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
  143. data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
  144. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  145. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  146. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  147. data/examples/app/wiktacular/mkd/markdown/current.mkd +3 -0
  148. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  149. data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
  150. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
  151. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
  152. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
  153. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
  154. data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
  155. data/examples/app/wiktacular/public/favicon.ico +0 -0
  156. data/examples/app/wiktacular/public/screen.css +72 -0
  157. data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
  158. data/examples/app/wiktacular/src/controller.rb +55 -0
  159. data/examples/app/wiktacular/src/model.rb +102 -0
  160. data/examples/app/wiktacular/start.rb +8 -0
  161. data/examples/app/wiktacular/template/edit.xhtml +6 -0
  162. data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
  163. data/examples/app/wiktacular/template/index.xhtml +9 -0
  164. data/examples/app/wiktacular/template/new.xhtml +6 -0
  165. data/examples/basic/element.rb +45 -0
  166. data/examples/basic/gestalt.rb +27 -0
  167. data/examples/basic/hello.rb +15 -0
  168. data/examples/basic/layout.rb +28 -0
  169. data/examples/basic/linking.rb +29 -0
  170. data/examples/basic/partial.rb +28 -0
  171. data/examples/basic/simple.rb +56 -0
  172. data/examples/helpers/cache.rb +31 -0
  173. data/examples/helpers/form_with_sequel.rb +24 -0
  174. data/examples/helpers/httpdigest.rb +108 -0
  175. data/examples/helpers/identity.rb +18 -0
  176. data/examples/helpers/nitro_form.rb +23 -0
  177. data/examples/helpers/paginate.rb +71 -0
  178. data/examples/helpers/provide.rb +23 -0
  179. data/examples/helpers/rest.rb +28 -0
  180. data/examples/helpers/simple_captcha.rb +29 -0
  181. data/examples/misc/css.rb +37 -0
  182. data/examples/misc/facebook.rb +159 -0
  183. data/examples/misc/memleak_detector.rb +32 -0
  184. data/examples/misc/nagoro_element.rb +43 -0
  185. data/examples/misc/ramaise.rb +132 -0
  186. data/examples/misc/rapp.rb +45 -0
  187. data/examples/misc/sequel_scaffolding.rb +34 -0
  188. data/examples/misc/simple_auth.rb +35 -0
  189. data/examples/templates/template/external.amrita +19 -0
  190. data/examples/templates/template/external.haml +22 -0
  191. data/examples/templates/template/external.liquid +28 -0
  192. data/examples/templates/template/external.mab +30 -0
  193. data/examples/templates/template/external.nag +28 -0
  194. data/examples/templates/template/external.redcloth +19 -0
  195. data/examples/templates/template/external.rem +30 -0
  196. data/examples/templates/template/external.rhtml +28 -0
  197. data/examples/templates/template/external.tenjin +28 -0
  198. data/examples/templates/template/external.xsl +57 -0
  199. data/examples/templates/template/external.zmr +28 -0
  200. data/examples/templates/template_amrita2.rb +74 -0
  201. data/examples/templates/template_erubis.rb +53 -0
  202. data/examples/templates/template_ezamar.rb +50 -0
  203. data/examples/templates/template_haml.rb +50 -0
  204. data/examples/templates/template_liquid.rb +65 -0
  205. data/examples/templates/template_markaby.rb +58 -0
  206. data/examples/templates/template_nagoro.rb +51 -0
  207. data/examples/templates/template_redcloth.rb +59 -0
  208. data/examples/templates/template_remarkably.rb +55 -0
  209. data/examples/templates/template_tenjin.rb +53 -0
  210. data/examples/templates/template_xslt.rb +49 -0
  211. data/lib/proto/controller/init.rb +11 -0
  212. data/lib/proto/controller/main.rb +20 -0
  213. data/lib/proto/model/init.rb +4 -0
  214. data/lib/proto/public/.htaccess +24 -0
  215. data/lib/proto/public/css/ramaze_error.css +90 -0
  216. data/lib/proto/public/dispatch.fcgi +11 -0
  217. data/lib/proto/public/favicon.ico +0 -0
  218. data/lib/proto/public/js/jquery.js +3549 -0
  219. data/lib/proto/public/ramaze.png +0 -0
  220. data/lib/proto/spec/main.rb +25 -0
  221. data/lib/proto/start.rb +12 -0
  222. data/lib/proto/start.ru +16 -0
  223. data/lib/proto/view/error.xhtml +64 -0
  224. data/lib/proto/view/index.xhtml +34 -0
  225. data/lib/proto/view/page.xhtml +27 -0
  226. data/lib/ramaze/action/render.rb +192 -0
  227. data/lib/ramaze/action.rb +159 -0
  228. data/lib/ramaze/adapter/base.rb +128 -0
  229. data/lib/ramaze/adapter/cgi.rb +20 -0
  230. data/lib/ramaze/adapter/ebb.rb +18 -0
  231. data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
  232. data/lib/ramaze/adapter/fake.rb +12 -0
  233. data/lib/ramaze/adapter/fcgi.rb +18 -0
  234. data/lib/ramaze/adapter/lsws.rb +19 -0
  235. data/lib/ramaze/adapter/mongrel.rb +21 -0
  236. data/lib/ramaze/adapter/scgi.rb +18 -0
  237. data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
  238. data/lib/ramaze/adapter/thin.rb +17 -0
  239. data/lib/ramaze/adapter/webrick.rb +43 -0
  240. data/lib/ramaze/adapter.rb +97 -0
  241. data/lib/ramaze/cache/file.rb +71 -0
  242. data/lib/ramaze/cache/memcached.rb +69 -0
  243. data/lib/ramaze/cache/memory.rb +6 -0
  244. data/lib/ramaze/cache/yaml_store.rb +68 -0
  245. data/lib/ramaze/cache.rb +114 -0
  246. data/lib/ramaze/contrib/email.rb +86 -0
  247. data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
  248. data/lib/ramaze/contrib/facebook.rb +23 -0
  249. data/lib/ramaze/contrib/file_cache.rb +3 -0
  250. data/lib/ramaze/contrib/gems.rb +78 -0
  251. data/lib/ramaze/contrib/gettext/mo.rb +155 -0
  252. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  253. data/lib/ramaze/contrib/gettext/po.rb +109 -0
  254. data/lib/ramaze/contrib/gettext.rb +113 -0
  255. data/lib/ramaze/contrib/gzip_filter.rb +69 -0
  256. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  257. data/lib/ramaze/contrib/profiling.rb +36 -0
  258. data/lib/ramaze/contrib/rest.rb +17 -0
  259. data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
  260. data/lib/ramaze/contrib/sequel/fill.rb +12 -0
  261. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  262. data/lib/ramaze/contrib/sequel/image.rb +198 -0
  263. data/lib/ramaze/contrib/sequel/relation.rb +82 -0
  264. data/lib/ramaze/contrib/sequel_cache.rb +92 -0
  265. data/lib/ramaze/contrib.rb +82 -0
  266. data/lib/ramaze/controller/error.rb +46 -0
  267. data/lib/ramaze/controller/main.rb +2 -0
  268. data/lib/ramaze/controller/resolve.rb +278 -0
  269. data/lib/ramaze/controller.rb +288 -0
  270. data/lib/ramaze/current/request.rb +231 -0
  271. data/lib/ramaze/current/response.rb +37 -0
  272. data/lib/ramaze/current/session/flash.rb +88 -0
  273. data/lib/ramaze/current/session/hash.rb +62 -0
  274. data/lib/ramaze/current/session.rb +179 -0
  275. data/lib/ramaze/current.rb +51 -0
  276. data/lib/ramaze/dispatcher/action.rb +50 -0
  277. data/lib/ramaze/dispatcher/directory.rb +119 -0
  278. data/lib/ramaze/dispatcher/error.rb +108 -0
  279. data/lib/ramaze/dispatcher/file.rb +100 -0
  280. data/lib/ramaze/dispatcher.rb +145 -0
  281. data/lib/ramaze/error.rb +24 -0
  282. data/lib/ramaze/gestalt.rb +124 -0
  283. data/lib/ramaze/helper/aspect.rb +106 -0
  284. data/lib/ramaze/helper/auth.rb +125 -0
  285. data/lib/ramaze/helper/bench.rb +43 -0
  286. data/lib/ramaze/helper/cache.rb +140 -0
  287. data/lib/ramaze/helper/cgi.rb +39 -0
  288. data/lib/ramaze/helper/flash.rb +74 -0
  289. data/lib/ramaze/helper/form.rb +284 -0
  290. data/lib/ramaze/helper/formatting.rb +162 -0
  291. data/lib/ramaze/helper/gestalt.rb +15 -0
  292. data/lib/ramaze/helper/gravatar.rb +32 -0
  293. data/lib/ramaze/helper/httpdigest.rb +88 -0
  294. data/lib/ramaze/helper/identity.rb +119 -0
  295. data/lib/ramaze/helper/link.rb +122 -0
  296. data/lib/ramaze/helper/markaby.rb +31 -0
  297. data/lib/ramaze/helper/maruku.rb +9 -0
  298. data/lib/ramaze/helper/nitroform.rb +14 -0
  299. data/lib/ramaze/helper/pager.rb +366 -0
  300. data/lib/ramaze/helper/paginate.rb +233 -0
  301. data/lib/ramaze/helper/partial.rb +105 -0
  302. data/lib/ramaze/helper/redirect.rb +100 -0
  303. data/lib/ramaze/helper/rest.rb +43 -0
  304. data/lib/ramaze/helper/sendfile.rb +16 -0
  305. data/lib/ramaze/helper/sequel.rb +55 -0
  306. data/lib/ramaze/helper/simple_captcha.rb +31 -0
  307. data/lib/ramaze/helper/stack.rb +77 -0
  308. data/lib/ramaze/helper/tagz.rb +19 -0
  309. data/lib/ramaze/helper/thread.rb +17 -0
  310. data/lib/ramaze/helper/ultraviolet.rb +44 -0
  311. data/lib/ramaze/helper/user.rb +110 -0
  312. data/lib/ramaze/helper/xhtml.rb +23 -0
  313. data/lib/ramaze/helper.rb +87 -0
  314. data/lib/ramaze/log/analogger.rb +40 -0
  315. data/lib/ramaze/log/growl.rb +38 -0
  316. data/lib/ramaze/log/hub.rb +41 -0
  317. data/lib/ramaze/log/informer.rb +128 -0
  318. data/lib/ramaze/log/knotify.rb +28 -0
  319. data/lib/ramaze/log/logger.rb +26 -0
  320. data/lib/ramaze/log/logging.rb +89 -0
  321. data/lib/ramaze/log/rotatinginformer.rb +168 -0
  322. data/lib/ramaze/log/syslog.rb +51 -0
  323. data/lib/ramaze/log/xosd.rb +92 -0
  324. data/lib/ramaze/log.rb +27 -0
  325. data/lib/ramaze/option/dsl.rb +45 -0
  326. data/lib/ramaze/option/holder.rb +131 -0
  327. data/lib/ramaze/option/merger.rb +108 -0
  328. data/lib/ramaze/option.rb +156 -0
  329. data/lib/ramaze/reloader/watch_inotify.rb +85 -0
  330. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  331. data/lib/ramaze/reloader.rb +170 -0
  332. data/lib/ramaze/route.rb +97 -0
  333. data/lib/ramaze/setup.rb +50 -0
  334. data/lib/ramaze/snippets/array/put_within.rb +44 -0
  335. data/lib/ramaze/snippets/binding/locals.rb +25 -0
  336. data/lib/ramaze/snippets/blankslate.rb +7 -0
  337. data/lib/ramaze/snippets/dictionary.rb +504 -0
  338. data/lib/ramaze/snippets/divide.rb +22 -0
  339. data/lib/ramaze/snippets/fiber.rb +63 -0
  340. data/lib/ramaze/snippets/kernel/constant.rb +41 -0
  341. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
  342. data/lib/ramaze/snippets/metaid.rb +17 -0
  343. data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
  344. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  345. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  346. data/lib/ramaze/snippets/object/acquire.rb +37 -0
  347. data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
  348. data/lib/ramaze/snippets/object/pretty.rb +16 -0
  349. data/lib/ramaze/snippets/object/scope.rb +18 -0
  350. data/lib/ramaze/snippets/object/traits.rb +76 -0
  351. data/lib/ramaze/snippets/ordered_set.rb +51 -0
  352. data/lib/ramaze/snippets/proc/locals.rb +19 -0
  353. data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
  354. data/lib/ramaze/snippets/ramaze/caller_info.rb +30 -0
  355. data/lib/ramaze/snippets/ramaze/caller_lines.rb +51 -0
  356. data/lib/ramaze/snippets/ramaze/deprecated.rb +21 -0
  357. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  358. data/lib/ramaze/snippets/ramaze/state.rb +86 -0
  359. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  360. data/lib/ramaze/snippets/string/camel_case.rb +21 -0
  361. data/lib/ramaze/snippets/string/color.rb +31 -0
  362. data/lib/ramaze/snippets/string/each.rb +19 -0
  363. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  364. data/lib/ramaze/snippets/string/esc.rb +34 -0
  365. data/lib/ramaze/snippets/string/ord.rb +21 -0
  366. data/lib/ramaze/snippets/string/snake_case.rb +21 -0
  367. data/lib/ramaze/snippets/string/start_with.rb +19 -0
  368. data/lib/ramaze/snippets/string/unindent.rb +28 -0
  369. data/lib/ramaze/snippets/thread/into.rb +18 -0
  370. data/lib/ramaze/snippets.rb +22 -0
  371. data/lib/ramaze/spec/helper/bacon.rb +7 -0
  372. data/lib/ramaze/spec/helper/browser.rb +88 -0
  373. data/lib/ramaze/spec/helper/mock_http.rb +64 -0
  374. data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
  375. data/lib/ramaze/spec/helper/requester.rb +63 -0
  376. data/lib/ramaze/spec/helper/simple_http.rb +434 -0
  377. data/lib/ramaze/spec/helper/snippets.rb +14 -0
  378. data/lib/ramaze/spec/helper.rb +135 -0
  379. data/lib/ramaze/spec.rb +1 -0
  380. data/lib/ramaze/store/default.rb +109 -0
  381. data/lib/ramaze/template/amrita2.rb +49 -0
  382. data/lib/ramaze/template/builder.rb +28 -0
  383. data/lib/ramaze/template/erubis.rb +41 -0
  384. data/lib/ramaze/template/ezamar/element.rb +169 -0
  385. data/lib/ramaze/template/ezamar/engine.rb +76 -0
  386. data/lib/ramaze/template/ezamar/morpher.rb +135 -0
  387. data/lib/ramaze/template/ezamar/render_partial.rb +39 -0
  388. data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
  389. data/lib/ramaze/template/ezamar.rb +42 -0
  390. data/lib/ramaze/template/haml.rb +37 -0
  391. data/lib/ramaze/template/liquid.rb +36 -0
  392. data/lib/ramaze/template/markaby.rb +52 -0
  393. data/lib/ramaze/template/maruku.rb +34 -0
  394. data/lib/ramaze/template/nagoro.rb +52 -0
  395. data/lib/ramaze/template/none.rb +14 -0
  396. data/lib/ramaze/template/redcloth.rb +25 -0
  397. data/lib/ramaze/template/remarkably.rb +38 -0
  398. data/lib/ramaze/template/sass.rb +38 -0
  399. data/lib/ramaze/template/tagz.rb +79 -0
  400. data/lib/ramaze/template/tenjin.rb +74 -0
  401. data/lib/ramaze/template/xslt.rb +100 -0
  402. data/lib/ramaze/template.rb +87 -0
  403. data/lib/ramaze/tool/create.rb +48 -0
  404. data/lib/ramaze/tool/daemonize.rb +37 -0
  405. data/lib/ramaze/tool/localize.rb +202 -0
  406. data/lib/ramaze/tool/mime.rb +35 -0
  407. data/lib/ramaze/tool/mime_types.yaml +615 -0
  408. data/lib/ramaze/tool/project_creator.rb +111 -0
  409. data/lib/ramaze/tool/record.rb +6 -0
  410. data/lib/ramaze/tool.rb +9 -0
  411. data/lib/ramaze/trinity.rb +16 -0
  412. data/lib/ramaze/version.rb +6 -0
  413. data/lib/ramaze.rb +139 -0
  414. data/lib/vendor/bacon.rb +323 -0
  415. data/rake_tasks/conf.rake +71 -0
  416. data/rake_tasks/coverage.rake +45 -0
  417. data/rake_tasks/gem.rake +74 -0
  418. data/rake_tasks/git.rake +41 -0
  419. data/rake_tasks/maintenance.rake +386 -0
  420. data/rake_tasks/metric.rake +24 -0
  421. data/rake_tasks/release.rake +76 -0
  422. data/rake_tasks/spec.rake +61 -0
  423. data/ramaze.gemspec +611 -0
  424. data/spec/contrib/profiling.rb +29 -0
  425. data/spec/contrib/sequel/fill.rb +47 -0
  426. data/spec/examples/caching.rb +19 -0
  427. data/spec/examples/css.rb +15 -0
  428. data/spec/examples/element.rb +15 -0
  429. data/spec/examples/hello.rb +11 -0
  430. data/spec/examples/linking.rb +18 -0
  431. data/spec/examples/simple.rb +45 -0
  432. data/spec/examples/simple_auth.rb +32 -0
  433. data/spec/examples/templates/template_amrita2.rb +16 -0
  434. data/spec/examples/templates/template_erubis.rb +23 -0
  435. data/spec/examples/templates/template_ezamar.rb +23 -0
  436. data/spec/examples/templates/template_haml.rb +23 -0
  437. data/spec/examples/templates/template_liquid.rb +29 -0
  438. data/spec/examples/templates/template_markaby.rb +23 -0
  439. data/spec/examples/templates/template_redcloth.rb +28 -0
  440. data/spec/examples/templates/template_remarkably.rb +23 -0
  441. data/spec/examples/templates/template_tenjin.rb +28 -0
  442. data/spec/helper.rb +3 -0
  443. data/spec/ramaze/action/basics.rb +36 -0
  444. data/spec/ramaze/action/cache.rb +87 -0
  445. data/spec/ramaze/action/file_cache.rb +70 -0
  446. data/spec/ramaze/action/layout.rb +190 -0
  447. data/spec/ramaze/action/render.rb +31 -0
  448. data/spec/ramaze/action/view/bar.xhtml +1 -0
  449. data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
  450. data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
  451. data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
  452. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  453. data/spec/ramaze/adapter/ebb.rb +12 -0
  454. data/spec/ramaze/adapter/mongrel.rb +12 -0
  455. data/spec/ramaze/adapter/record.rb +31 -0
  456. data/spec/ramaze/adapter/webrick.rb +12 -0
  457. data/spec/ramaze/adapter.rb +49 -0
  458. data/spec/ramaze/cache.rb +140 -0
  459. data/spec/ramaze/controller/actionless_templates.rb +32 -0
  460. data/spec/ramaze/controller/resolve.rb +32 -0
  461. data/spec/ramaze/controller/subclass.rb +36 -0
  462. data/spec/ramaze/controller/template_resolving.rb +113 -0
  463. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  464. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  465. data/spec/ramaze/controller/view/greet.xhtml +1 -0
  466. data/spec/ramaze/controller/view/list.xhtml +1 -0
  467. data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
  468. data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
  469. data/spec/ramaze/controller.rb +180 -0
  470. data/spec/ramaze/current/request.rb +30 -0
  471. data/spec/ramaze/current/session.rb +97 -0
  472. data/spec/ramaze/dispatcher/directory.rb +55 -0
  473. data/spec/ramaze/dispatcher/file.rb +60 -0
  474. data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
  475. data/spec/ramaze/dispatcher/public/file name.txt +1 -0
  476. data/spec/ramaze/dispatcher/public/test_download.css +141 -0
  477. data/spec/ramaze/dispatcher.rb +31 -0
  478. data/spec/ramaze/element.rb +107 -0
  479. data/spec/ramaze/error.rb +94 -0
  480. data/spec/ramaze/gestalt.rb +131 -0
  481. data/spec/ramaze/helper/aspect.rb +101 -0
  482. data/spec/ramaze/helper/auth.rb +66 -0
  483. data/spec/ramaze/helper/cache.rb +160 -0
  484. data/spec/ramaze/helper/cgi.rb +43 -0
  485. data/spec/ramaze/helper/file.rb +18 -0
  486. data/spec/ramaze/helper/flash.rb +133 -0
  487. data/spec/ramaze/helper/form.rb +118 -0
  488. data/spec/ramaze/helper/formatting.rb +54 -0
  489. data/spec/ramaze/helper/link.rb +124 -0
  490. data/spec/ramaze/helper/pager.rb +99 -0
  491. data/spec/ramaze/helper/partial.rb +88 -0
  492. data/spec/ramaze/helper/redirect.rb +112 -0
  493. data/spec/ramaze/helper/simple_captcha.rb +22 -0
  494. data/spec/ramaze/helper/stack.rb +73 -0
  495. data/spec/ramaze/helper/user.rb +43 -0
  496. data/spec/ramaze/helper/view/locals.xhtml +1 -0
  497. data/spec/ramaze/helper/view/loop.xhtml +4 -0
  498. data/spec/ramaze/helper/view/num.xhtml +1 -0
  499. data/spec/ramaze/helper/view/partial.xhtml +1 -0
  500. data/spec/ramaze/helper/view/recursive.xhtml +8 -0
  501. data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
  502. data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
  503. data/spec/ramaze/helper/view/test_template.xhtml +1 -0
  504. data/spec/ramaze/localize.rb +89 -0
  505. data/spec/ramaze/log/informer.rb +72 -0
  506. data/spec/ramaze/log/syslog.rb +76 -0
  507. data/spec/ramaze/morpher.rb +111 -0
  508. data/spec/ramaze/params.rb +157 -0
  509. data/spec/ramaze/public/error404.xhtml +1 -0
  510. data/spec/ramaze/public/favicon.ico +0 -0
  511. data/spec/ramaze/public/ramaze.png +0 -0
  512. data/spec/ramaze/public/test_download.css +141 -0
  513. data/spec/ramaze/request/ebb.rb +9 -0
  514. data/spec/ramaze/request/mongrel.rb +9 -0
  515. data/spec/ramaze/request/thin.rb +9 -0
  516. data/spec/ramaze/request/webrick.rb +5 -0
  517. data/spec/ramaze/request.rb +185 -0
  518. data/spec/ramaze/rewrite/file.css +1 -0
  519. data/spec/ramaze/rewrite.rb +36 -0
  520. data/spec/ramaze/route.rb +131 -0
  521. data/spec/ramaze/session.rb +94 -0
  522. data/spec/ramaze/store/default.rb +71 -0
  523. data/spec/ramaze/struct.rb +47 -0
  524. data/spec/ramaze/template/amrita2/external.amrita +6 -0
  525. data/spec/ramaze/template/amrita2/sum.amrita +1 -0
  526. data/spec/ramaze/template/amrita2.rb +50 -0
  527. data/spec/ramaze/template/builder/external.rxml +3 -0
  528. data/spec/ramaze/template/builder.rb +51 -0
  529. data/spec/ramaze/template/erubis/sum.rhtml +1 -0
  530. data/spec/ramaze/template/erubis.rb +41 -0
  531. data/spec/ramaze/template/ezamar/another/long/action.zmr +1 -0
  532. data/spec/ramaze/template/ezamar/combined.zmr +1 -0
  533. data/spec/ramaze/template/ezamar/file_only.zmr +1 -0
  534. data/spec/ramaze/template/ezamar/index.zmr +1 -0
  535. data/spec/ramaze/template/ezamar/nested.zmr +1 -0
  536. data/spec/ramaze/template/ezamar/other__index.xhtml +1 -0
  537. data/spec/ramaze/template/ezamar/some__long__action.zmr +1 -0
  538. data/spec/ramaze/template/ezamar/sum.zmr +1 -0
  539. data/spec/ramaze/template/ezamar.rb +63 -0
  540. data/spec/ramaze/template/haml/index.haml +5 -0
  541. data/spec/ramaze/template/haml/locals.haml +2 -0
  542. data/spec/ramaze/template/haml/with_vars.haml +4 -0
  543. data/spec/ramaze/template/haml.rb +66 -0
  544. data/spec/ramaze/template/liquid/index.liquid +1 -0
  545. data/spec/ramaze/template/liquid/products.liquid +45 -0
  546. data/spec/ramaze/template/liquid.rb +99 -0
  547. data/spec/ramaze/template/markaby/external.mab +8 -0
  548. data/spec/ramaze/template/markaby/sum.mab +1 -0
  549. data/spec/ramaze/template/markaby.rb +61 -0
  550. data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
  551. data/spec/ramaze/template/nagoro/combined.nag +1 -0
  552. data/spec/ramaze/template/nagoro/file_only.nag +1 -0
  553. data/spec/ramaze/template/nagoro/index.nag +1 -0
  554. data/spec/ramaze/template/nagoro/nested.nag +1 -0
  555. data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
  556. data/spec/ramaze/template/nagoro/sum.nag +1 -0
  557. data/spec/ramaze/template/nagoro.rb +64 -0
  558. data/spec/ramaze/template/ramaze/external.test +1 -0
  559. data/spec/ramaze/template/redcloth/external.redcloth +1 -0
  560. data/spec/ramaze/template/redcloth.rb +38 -0
  561. data/spec/ramaze/template/remarkably/external.rem +8 -0
  562. data/spec/ramaze/template/remarkably/sum.rem +1 -0
  563. data/spec/ramaze/template/remarkably.rb +58 -0
  564. data/spec/ramaze/template/sass/file.css.sass +5 -0
  565. data/spec/ramaze/template/sass.rb +70 -0
  566. data/spec/ramaze/template/tagz/external.tagz +8 -0
  567. data/spec/ramaze/template/tagz/sum.tagz +1 -0
  568. data/spec/ramaze/template/tagz.rb +62 -0
  569. data/spec/ramaze/template/tenjin/external.tenjin +1 -0
  570. data/spec/ramaze/template/tenjin.rb +47 -0
  571. data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
  572. data/spec/ramaze/template/xslt/index.xsl +14 -0
  573. data/spec/ramaze/template/xslt/products.xsl +32 -0
  574. data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
  575. data/spec/ramaze/template/xslt.rb +90 -0
  576. data/spec/ramaze/template.rb +128 -0
  577. data/spec/snippets/array/put_within.rb +33 -0
  578. data/spec/snippets/binding/locals.rb +9 -0
  579. data/spec/snippets/kernel/constant.rb +23 -0
  580. data/spec/snippets/numeric/filesize_format.rb +12 -0
  581. data/spec/snippets/numeric/time.rb +12 -0
  582. data/spec/snippets/object/__dir__.rb +14 -0
  583. data/spec/snippets/ordered_set.rb +63 -0
  584. data/spec/snippets/ramaze/acquire.rb +77 -0
  585. data/spec/snippets/ramaze/caller_info.rb +39 -0
  586. data/spec/snippets/ramaze/caller_lines.rb +30 -0
  587. data/spec/snippets/string/camel_case.rb +25 -0
  588. data/spec/snippets/string/color.rb +11 -0
  589. data/spec/snippets/string/snake_case.rb +24 -0
  590. data/spec/snippets/string/unindent.rb +43 -0
  591. data/spec/snippets/thread/into.rb +20 -0
  592. metadata +661 -0
@@ -0,0 +1,71 @@
1
+ BASEDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
2
+
3
+ VERS = Ramaze::VERSION
4
+ COPYRIGHT = [
5
+ "# Copyright (c) #{Time.now.year} Michael Fellinger m.fellinger@gmail.com",
6
+ "# All files in this distribution are subject to the terms of the Ruby license."
7
+ ]
8
+ README = 'README.md'
9
+ CLEAN.include %w[
10
+ **/.*.sw?
11
+ *.gem
12
+ .config
13
+ **/*~
14
+ **/{data.db,cache.yaml}
15
+ *.yaml
16
+ pkg
17
+ rdoc
18
+ ]
19
+ RDOC_OPTS = %W[
20
+ --all
21
+ --quiet
22
+ --op rdoc
23
+ --line-numbers
24
+ --inline-source
25
+ --main #{README}
26
+ --opname index.html
27
+ --title "Ramaze\ documentation"
28
+ --exclude "^(spec|examples|bin|pkg)/"
29
+ --exclude "lib/proto"
30
+ --include "doc"
31
+ --accessor "trait"
32
+ ]
33
+ RDOC_FILES = %W[
34
+ lib doc #{README} doc/FAQ doc/CHANGELOG
35
+ ]
36
+ POST_INSTALL_MESSAGE = %{
37
+ #{'=' * 60}
38
+
39
+ Thank you for installing Ramaze!
40
+ You can now do following:
41
+
42
+ * Create a new project using the `ramaze' command:
43
+ ramaze --create yourproject
44
+
45
+ #{'=' * 60}
46
+ }.strip
47
+
48
+ AUTHOR_MAP = {
49
+ 'andy@tinnedfruit.org' => 'Andy Smith',
50
+ 'ahoward' => 'Ara T. Howard',
51
+ 'ara.t.howard@gmail.com' => 'Ara T. Howard',
52
+ 'blueonyx@dev-area.net' => 'Martin Hilbig',
53
+ 'clive@crous.co.za' => 'Clive Crous',
54
+ 'comp.lang.zenix+ramaze@gmail.com' => 'Colin Shea',
55
+ 'evaryont@gmx.us' => 'Colin Shea',
56
+ 'jesusisramazing.10.pistos@geoshell.com' => 'Pistos',
57
+ 'jesuswasramazing.10.pistos@geoshell.com' => 'Pistos',
58
+ 'keita.yamaguchi@gmail.com' => 'Keita Yamaguchi',
59
+ 'leo.borisenko@gmail.com' => 'Leo Borisenko',
60
+ 'manveru@weez-int.com' => 'Michael Fellinger',
61
+ 'm.fellinger@gmail.com' => 'Michael Fellinger',
62
+ 'outtenr@gmail.com' => 'Richard Outten',
63
+ 'ryan@wonko.com' => 'Ryan Grove',
64
+ 'rff.rff@gmail.com' => 'Gabriele Renzi',
65
+ 'skaar@waste.org' => 'skaar',
66
+ 'stephan@spaceboyz.net' => 'Stephan Maka',
67
+ 'samcarr@gmail.com' => 'samcarr',
68
+ }
69
+
70
+ # * Browse and try the Examples in
71
+ # #{File.join(Gem.path, 'gems', 'ramaze-' + VERS, 'examples')}
@@ -0,0 +1,45 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'rake'
5
+
6
+ spec_base = File.expand_path('spec/ramaze/')
7
+ example_base = File.expand_path('examples')
8
+ snippets_base = File.expand_path('spec/snippets')
9
+ # ignore files with these paths
10
+ ignores = [ './*', './helper/*', './ramaze/adapter.rb', './ramaze/request.rb', ]
11
+
12
+ files = Dir["#{spec_base}/**/*.rb"] +
13
+ Dir["#{example_base}/**/spec/*.rb"]
14
+ ignores.each do |ignore|
15
+ ignore_files = Dir["#{spec_base}/#{ignore}"]
16
+ ignore_files.each do |ignore_file|
17
+ files.delete File.expand_path(ignore_file)
18
+ end
19
+ end
20
+
21
+ files.sort!
22
+
23
+ last = files.pop
24
+
25
+ COV_CMD = "rcov --aggregate coverage.data --%shtml -%s -x gem -x rack %s"
26
+
27
+ def sys(cmd)
28
+ puts cmd
29
+ system(cmd)
30
+ end
31
+
32
+ task :coverage => :clean do
33
+ # these are the tests that can be run in parallel.
34
+ # IMHO, ideally we should have
35
+ # * 100% coverage of ramaze with pure tests
36
+ # * 100% coverage with non-pure functional tests
37
+ pure_specs = Dir["#{snippets_base}/**/*.rb"].entries
38
+ sys(COV_CMD % ["no-","t", pure_specs.join(' ')])
39
+
40
+ files.each do |file|
41
+ sys(COV_CMD % ["no-","t", file])
42
+ end
43
+ sys(COV_CMD % ["", "t", last] )
44
+
45
+ end
@@ -0,0 +1,74 @@
1
+ def generate_gemspec(version)
2
+ Gem::Specification.new{|s|
3
+ s.name = "ramaze"
4
+ s.version = version
5
+ s.summary = "Ramaze is a simple and modular web framework"
6
+ s.description = s.summary
7
+
8
+ s.author = "Michael 'manveru' Fellinger"
9
+ s.email = "m.fellinger@gmail.com"
10
+ s.homepage = "http://ramaze.rubyforge.org"
11
+ s.rubyforge_project = "ramaze"
12
+
13
+ s.bindir = "bin"
14
+ s.require_path = "lib"
15
+
16
+ s.executables = Dir["#{s.bindir}/*"].map{|f| File.basename(f) }
17
+ s.files = FileList.new('**/*'){|fl|
18
+ fl.exclude(/^pkg\//)
19
+ fl.exclude(/^tags$/)
20
+ }.sort
21
+
22
+ s.platform = Gem::Platform::RUBY
23
+ s.has_rdoc = true
24
+ s.post_install_message = POST_INSTALL_MESSAGE
25
+
26
+ s.add_dependency('rack', '>=0.3.0')
27
+ }
28
+ end
29
+
30
+ def update_gemspec(spec)
31
+ gemspec = <<-OUT.strip
32
+ Gem::Specification.new do |s|
33
+ s.name = %name%
34
+ s.version = %version%
35
+
36
+ s.summary = %summary%
37
+ s.description = %description%
38
+ s.platform = %platform%
39
+ s.has_rdoc = %has_rdoc%
40
+ s.author = %author%
41
+ s.email = %email%
42
+ s.homepage = %homepage%
43
+ s.executables = %executables%
44
+ s.bindir = %bindir%
45
+ s.require_path = %require_path%
46
+ s.post_install_message = %post_install_message%
47
+
48
+ %dependencies%
49
+
50
+ s.files = %files%
51
+ end
52
+ OUT
53
+
54
+ gemspec.gsub!(/%(\w+)%/) do
55
+ case key = $1
56
+ when 'version'
57
+ spec.version.to_s.dump
58
+ when 'dependencies'
59
+ spec.dependencies.map{|dep|
60
+ "s.add_dependency('#{dep.name}', '#{dep.version_requirements}')"
61
+ }.join("\n ")
62
+ else
63
+ spec.send($1).pretty_inspect.strip
64
+ end
65
+ end
66
+
67
+ File.open("ramaze.gemspec", 'w+'){|file| file.puts(gemspec) }
68
+ end
69
+
70
+ spec = generate_gemspec(version_today)
71
+ Rake::GemPackageTask.new(spec) do |pkg|
72
+ pkg.need_zip = true
73
+ pkg.need_tar = true
74
+ end
@@ -0,0 +1,41 @@
1
+ def git_branch
2
+ `git branch`[/^\*\s+(.*)/, 1]
3
+ end
4
+
5
+ namespace :git do
6
+ task :anon do
7
+ sh 'git config remote.origin.url git://github.com/manveru/ramaze'
8
+ puts "You're now accessing ramaze anonymous"
9
+ end
10
+
11
+ task :committer do
12
+ sh 'git config remote.origin.url git@github.com:manveru/ramaze'
13
+ puts "You're now accessing ramaze as committer"
14
+ end
15
+
16
+ desc 'Update from repository'
17
+ task :update do
18
+ puts "Putting your changes on stash"
19
+ sh 'git stash'
20
+
21
+ branch = git_branch
22
+ puts "Current branch is #{branch}"
23
+
24
+ if switch = branch != 'master'
25
+ puts "Switching to master branch"
26
+ sh 'git checkout master'
27
+ end
28
+
29
+ if switch
30
+ puts "Switching to #{branch} branch"
31
+ sh "git checkout '#{branch}'"
32
+ end
33
+
34
+ sh 'git stash apply'
35
+ end
36
+
37
+ desc 'Create patch files to send'
38
+ task :send do
39
+ sh 'git format-patch ^HEAD'
40
+ end
41
+ end
@@ -0,0 +1,386 @@
1
+ def version_today
2
+ Date.today.strftime("%Y.%m.%d")
3
+ end
4
+
5
+ def version_month
6
+ Date.today.strftime("%Y.%m")
7
+ end
8
+
9
+ namespace :maintenance do
10
+ desc "add copyright to all .rb files in the distribution"
11
+ task 'add-copyright' do
12
+ ignore = File.readlines('doc/LEGAL').
13
+ select{|line| line.strip!; File.exist?(line)}.
14
+ map{|file| File.expand_path(file)}
15
+
16
+ puts "adding copyright to files that don't have it currently"
17
+ puts COPYRIGHT
18
+ puts
19
+
20
+ Dir['{lib,test}/**/*{.rb}'].each do |file|
21
+ file = File.expand_path(file)
22
+ next if ignore.include? file
23
+ lines = File.readlines(file).map{|l| l.chomp}
24
+ unless lines.first(COPYRIGHT.size) == COPYRIGHT
25
+ puts "#{file} seems to need attention, first 4 lines:"
26
+ puts lines[0..3]
27
+ puts
28
+ end
29
+ end
30
+ end
31
+
32
+ desc "#{README} to doc/README.html"
33
+ Rake::RDocTask.new('readme2html-build') do |rd|
34
+ rd.options = %w[
35
+ --quiet
36
+ --opname readme.html
37
+ ]
38
+
39
+ rd.rdoc_dir = 'readme'
40
+ rd.rdoc_files = [README]
41
+ rd.main = README
42
+ rd.title = "Ramaze documentation"
43
+ end
44
+
45
+ desc "generate doc/TODO from the TODO tags in the source"
46
+ task 'todolist' do
47
+ list = `rake todo`
48
+ tasks = {}
49
+ current = nil
50
+
51
+ list.split("\n")[2..-1].each do |line|
52
+ if line =~ /TODO/ or line.empty?
53
+ elsif line =~ /^vim/
54
+ current = line.split[1]
55
+ tasks[current] = []
56
+ else
57
+ tasks[current] << line
58
+ end
59
+ end
60
+
61
+ lines = tasks.map{ |name, items| [name, items, ''] }.flatten
62
+ lines.pop
63
+
64
+ File.open(File.join('doc', 'TODO'), 'w+') do |f|
65
+ f.puts "This list is programmaticly generated by `rake todolist`"
66
+ f.puts "If you want to add/remove items from the list, change them at the"
67
+ f.puts "position specified in the list."
68
+ f.puts
69
+ f.puts(lines)
70
+ end
71
+ end
72
+
73
+ desc "remove those annoying spaces at the end of lines"
74
+ task 'fix-end-spaces' do
75
+ Dir['{lib,spec}/**/*.rb'].each do |file|
76
+ lines = File.readlines(file)
77
+ new = lines.dup
78
+ lines.each_with_index do |line, i|
79
+ if line =~ /\s+\n/
80
+ puts "fixing #{file}:#{i + 1}"
81
+ p line
82
+ new[i] = line.rstrip
83
+ end
84
+ end
85
+
86
+ unless new == lines
87
+ File.open(file, 'w+') do |f|
88
+ new.each do |line|
89
+ f.puts(line)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ desc "Rebuild doc/tutorial/todolist.html"
97
+ task 'tutorial' do
98
+ require 'maruku'
99
+ require 'hpricot'
100
+
101
+ syntax_dir = File.dirname(Gem::latest_load_paths.grep(/syntax-/).first)
102
+ ruby_css = File.join(syntax_dir, 'data/ruby.css')
103
+ basefile = 'doc/tutorial/todolist'
104
+
105
+ content = File.read(basefile + '.mkd')
106
+ html = Maruku.new(content).to_html_document
107
+
108
+ doc = Hpricot(html)
109
+ css = %(<style type="text/css">
110
+ #{File.read(ruby_css)}
111
+ </style>)
112
+ doc.at('title').after(css)
113
+
114
+ File.open(basefile + '.html', 'w+'){|io| io << doc.to_s }
115
+ end
116
+
117
+ # This task is so full of hacks, it may break any second, but it just feels
118
+ # good to have proper highlighting for sh, ezamar and ruby generated from
119
+ # markdown without any external CSS to worry about.
120
+ desc 'Rebuild doc/tutorial/todolist.html using UltraViolet'
121
+ task 'tutorial-uv' do
122
+ require 'maruku'
123
+ require 'uv'
124
+ require 'hpricot'
125
+ require 'ramaze/contrib/maruku_uv'
126
+
127
+ # Inject ezamar syntax
128
+ Uv.init_syntaxes
129
+ ezamar = 'lib/ramaze/template/ezamar/textpow.syntax'
130
+ syntaxes = Uv.instance_variable_get('@syntaxes')
131
+ syntaxes['ezamar'] = Textpow::SyntaxNode.load(ezamar)
132
+
133
+ base = 'doc/tutorial/todolist'
134
+ original = File.read(base + '.mkd')
135
+ maruku = Maruku.new(original)
136
+ style = maruku.attributes[:uv_style]
137
+
138
+ html = maruku.to_html_document
139
+
140
+ uv_lib = Gem::latest_load_paths.grep(/ultraviolet/).first
141
+ uv_root = File.dirname(uv_lib)
142
+ css = Dir["#{uv_root}/**/#{style}.css"].first
143
+
144
+ doc = Hpricot(html)
145
+ css = %(<style type="text/css">
146
+ pre { margin: 1em; padding: 1em; }
147
+ #{File.read(css)}
148
+ </style>)
149
+
150
+ doc.at('title').after(css)
151
+
152
+ File.open(base + '.html', 'w+'){|io| io << doc.to_s }
153
+ end
154
+
155
+ def existing_authors
156
+ authors = {}
157
+
158
+ File.readlines('doc/AUTHORS').each do |line|
159
+ if line =~ /\s+(.*?)\s*:\s*(.*@.*)/
160
+ authors[$1] = {:email => $2, :patches => 0}
161
+ end
162
+ end
163
+
164
+ authors
165
+ end
166
+
167
+ def authors
168
+ format = "%an ** %ae"
169
+ log = `git-log --pretty=format:'#{format}'`
170
+
171
+ mapping = existing_authors
172
+
173
+ log.split("\n").each do |line|
174
+ name, email = line.split(' ** ')
175
+
176
+ if name =~ /(\S+@\S+)/
177
+ email ||= $1
178
+ name.sub!(email, '').strip!
179
+ end
180
+
181
+ email_start = /^#{Regexp.escape(name)}@(.*)/
182
+ AUTHOR_MAP.each do |e, a|
183
+ if e =~ email_start
184
+ email, name = e, a
185
+ break
186
+ end
187
+ end
188
+
189
+ name = AUTHOR_MAP[name] || name
190
+ email = AUTHOR_MAP.index(name) || email
191
+
192
+ mapping[name] ||= {:email => email, :patches => 0}
193
+ mapping[name][:patches] += 1
194
+ end
195
+
196
+ max = mapping.map{|k,v| k.size }.max
197
+ mapping.inject({}) {|h,(k,v)| h[k.ljust(max)] = v; h}
198
+ end
199
+
200
+ desc "Update /doc/AUTHORS"
201
+ task 'authors' do
202
+ # get the authors before we overwrite the file
203
+ authors = authors().sort_by{|k,v| k}
204
+
205
+ File.open('doc/AUTHORS', 'w+') do |fp|
206
+ fp.puts "Following persons (in alphabetical order) have contributed to Ramaze:"
207
+ fp.puts
208
+ authors.each do |name, author|
209
+ fp.puts " #{name} : #{author[:email]}"
210
+ end
211
+ fp.puts
212
+ end
213
+ end
214
+
215
+ desc "show how many patches we made so far"
216
+ task :patchsize do
217
+ patches = `git rev-list HEAD | wc -l`.to_i
218
+ puts "currently we have #{patches} patches"
219
+ init = Time.parse("Sat Oct 14 04:22:49 JST 2006")
220
+ days = (Time.now - init) / (3600 * 24)
221
+ puts "%d days since init, avg %4.2f patches per day" % [days, patches/days]
222
+ end
223
+
224
+ desc "show who made how many patches"
225
+ task :patchstat do
226
+ total = 0.0
227
+
228
+ authors.map do |name, hash|
229
+ patches = hash[:patches]
230
+ total += patches
231
+ [patches, name]
232
+ end.sort.reverse_each do |patches, name|
233
+ puts "%s %4d [%6.2f%% ]" % [name, patches, patches/total * 100]
234
+ end
235
+ end
236
+
237
+ desc "upload packages to rubyforge"
238
+ task 'release' => ['distribute'] do
239
+ sh 'rubyforge login'
240
+ sh "rubyforge add_release ramaze ramaze #{VERS} pkg/ramaze-#{VERS}.gem"
241
+
242
+ require 'open-uri'
243
+ require 'hpricot'
244
+
245
+ url = "http://rubyforge.org/frs/?group_id=3034"
246
+ doc = Hpricot(open(url))
247
+ a = (doc/:a).find{|a| a[:href] =~ /release_id/}
248
+
249
+ version = a.inner_html
250
+ release_id = Hash[*a[:href].split('?').last.split('=').flatten]['release_id']
251
+
252
+ sh "rubyforge add_file ramaze ramaze #{release_id} pkg/ramaze-#{VERS}.tar.gz"
253
+ sh "rubyforge add_file ramaze ramaze #{release_id} pkg/ramaze-#{VERS}.tar.bz2"
254
+ end
255
+
256
+ task 'undocumented-module' do
257
+ require 'strscan'
258
+ require 'term/ansicolor'
259
+
260
+ $stdout.sync = true
261
+
262
+ class String
263
+ include Term::ANSIColor
264
+ end
265
+
266
+ class SimpleDoc
267
+ def initialize(string)
268
+ @s = StringScanner.new(string)
269
+ end
270
+
271
+ def scan
272
+ comment = false
273
+ total, missing = [], []
274
+ until @s.eos?
275
+ unless @s.scan(/^\s*#.*/)
276
+ comment = true if @s.scan(/^=begin[^$]*$/)
277
+ comment = false if comment and @s.scan(/^=end$/)
278
+
279
+ unless comment
280
+ if @s.scan(/(?:class ).*/)
281
+ #p @s.matched
282
+ elsif @s.scan(/(?:module ).*/)
283
+ #p @s.matched
284
+ elsif @s.scan(/(?:[\s$]def\s+)[\w?!*=+\/-]+(?=[\(\s])/)
285
+ total << @s.matched.split.last
286
+ prev = @s.pre_match.split("\n")
287
+ prev.delete_if{|s| s.strip.empty?}
288
+ unless prev.last =~ /^\s*#.*/
289
+ missing << @s.matched.split.last
290
+ end
291
+ else
292
+ @s.scan(/./m)
293
+ end
294
+ end
295
+ end
296
+ end
297
+
298
+ return total, missing
299
+ end
300
+ end
301
+
302
+ all = {}
303
+ files = Dir['lib/**/*.rb']
304
+ ignore = [
305
+ %r'contrib/gettext/(mo|po)\.rb',
306
+ %r'snippets/dictionary\.rb',
307
+ %r'lib/vendor',
308
+ ]
309
+
310
+ print "scanning ~#{files.size} files "
311
+ files.each do |file|
312
+ next if ignore.any?{|i| file =~ i}
313
+ print "."
314
+ t, m = SimpleDoc.new(File.read(file)).scan
315
+ all[file] = [t, m]
316
+ end
317
+ puts " done."
318
+
319
+ failed = all.reject{|k,(t,m)| m.size == 0}
320
+
321
+ max = failed.keys.sort_by{|f| f.size}.last.size
322
+
323
+ colors = {
324
+ (0..25 ) => :blue,
325
+ (25..50 ) => :green,
326
+ (50..75 ) => :yellow,
327
+ (75..100) => :red,
328
+ }
329
+
330
+ puts "\nAll undocumented methods\n\n"
331
+
332
+ failed.sort.each do |file, (t, m)|
333
+ ts, ms = t.size, m.size
334
+ tss, mss = ts.to_s, ms.to_s
335
+ ratio = ((ms.to_f/ts)*100).to_i
336
+ color = colors.find{|k,v| k.include?(ratio)}.last
337
+ complete = ms.to_f/ts.to_f
338
+ mthc = "method"
339
+ if ms > 0
340
+ puts "#{file.ljust(max)}\t[#{[mss, tss].join('/').center(8)}]".send(color)
341
+ mthc = "methods" if ts > 1
342
+ if $VERBOSE
343
+ puts "Of #{tss} #{mthc}, #{mss} still needs documenting (#{100 - ratio}% documented, #{ratio}% undocumented)".send(color)
344
+ mthc = "method"
345
+ mthc = "methods" if ms > 1
346
+ print "#{mthc.capitalize}: "
347
+ end
348
+ puts m.join(', ')
349
+ puts "vim #{file} '+/def #{m.first}'"
350
+ puts
351
+ end
352
+ end
353
+
354
+ puts "The colors mean percentages of documentation left (ratio of undocumented methods to total):"
355
+ colors.sort_by{|k,v| k.begin}.each do |r, color|
356
+ print "[#{r.inspect}] ".send(color)
357
+ end
358
+ puts "", ""
359
+
360
+ documented = 0
361
+ undocumented = 0
362
+
363
+ all.values.each do |(d,m)|
364
+ documented += d.size
365
+ undocumented += m.size
366
+ end
367
+
368
+ total = documented + undocumented
369
+ ratio = (documented * 100.0) / total
370
+
371
+ puts "Total documented: #{documented}, undocumented: #{undocumented}"
372
+ puts "%.2f%% of Ramaze is documented!" % ratio
373
+ end
374
+
375
+ desc "list all undocumented methods"
376
+ task 'undocumented' do
377
+ $VERBOSE = false
378
+ Rake::Task['maintenance:undocumented-module'].invoke
379
+ end
380
+
381
+ desc "list all undocumented methods verbosely"
382
+ task 'undocumented-verbose' do
383
+ $VERBOSE = true
384
+ Rake::Task['maintenance:undocumented-module'].invoke
385
+ end
386
+ end