Pistos-ramaze 2008.09

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 (588) hide show
  1. data/README.markdown +481 -0
  2. data/Rakefile +228 -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 +37 -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/simple.rb +56 -0
  171. data/examples/helpers/cache.rb +31 -0
  172. data/examples/helpers/form_with_sequel.rb +24 -0
  173. data/examples/helpers/httpdigest.rb +50 -0
  174. data/examples/helpers/identity.rb +18 -0
  175. data/examples/helpers/nitro_form.rb +23 -0
  176. data/examples/helpers/paginate.rb +71 -0
  177. data/examples/helpers/provide.rb +23 -0
  178. data/examples/helpers/rest.rb +28 -0
  179. data/examples/helpers/simple_captcha.rb +29 -0
  180. data/examples/misc/css.rb +37 -0
  181. data/examples/misc/facebook.rb +159 -0
  182. data/examples/misc/memleak_detector.rb +32 -0
  183. data/examples/misc/nagoro_element.rb +43 -0
  184. data/examples/misc/ramaise.rb +132 -0
  185. data/examples/misc/rapp.rb +45 -0
  186. data/examples/misc/sequel_scaffolding.rb +34 -0
  187. data/examples/misc/simple_auth.rb +35 -0
  188. data/examples/templates/template/external.amrita +19 -0
  189. data/examples/templates/template/external.haml +22 -0
  190. data/examples/templates/template/external.liquid +28 -0
  191. data/examples/templates/template/external.mab +30 -0
  192. data/examples/templates/template/external.nag +28 -0
  193. data/examples/templates/template/external.redcloth +19 -0
  194. data/examples/templates/template/external.rem +30 -0
  195. data/examples/templates/template/external.rhtml +28 -0
  196. data/examples/templates/template/external.tenjin +28 -0
  197. data/examples/templates/template/external.xsl +57 -0
  198. data/examples/templates/template/external.zmr +28 -0
  199. data/examples/templates/template_amrita2.rb +74 -0
  200. data/examples/templates/template_erubis.rb +53 -0
  201. data/examples/templates/template_ezamar.rb +50 -0
  202. data/examples/templates/template_haml.rb +50 -0
  203. data/examples/templates/template_liquid.rb +65 -0
  204. data/examples/templates/template_markaby.rb +58 -0
  205. data/examples/templates/template_nagoro.rb +51 -0
  206. data/examples/templates/template_redcloth.rb +59 -0
  207. data/examples/templates/template_remarkably.rb +55 -0
  208. data/examples/templates/template_tenjin.rb +53 -0
  209. data/examples/templates/template_xslt.rb +49 -0
  210. data/lib/proto/controller/init.rb +10 -0
  211. data/lib/proto/controller/main.rb +20 -0
  212. data/lib/proto/model/init.rb +4 -0
  213. data/lib/proto/public/css/ramaze_error.css +90 -0
  214. data/lib/proto/public/dispatch.fcgi +11 -0
  215. data/lib/proto/public/favicon.ico +0 -0
  216. data/lib/proto/public/js/jquery.js +3549 -0
  217. data/lib/proto/public/ramaze.png +0 -0
  218. data/lib/proto/spec/main.rb +25 -0
  219. data/lib/proto/start.rb +8 -0
  220. data/lib/proto/start.ru +16 -0
  221. data/lib/proto/view/error.xhtml +64 -0
  222. data/lib/proto/view/index.xhtml +34 -0
  223. data/lib/proto/view/page.xhtml +27 -0
  224. data/lib/ramaze/action/render.rb +191 -0
  225. data/lib/ramaze/action.rb +153 -0
  226. data/lib/ramaze/adapter/base.rb +128 -0
  227. data/lib/ramaze/adapter/cgi.rb +20 -0
  228. data/lib/ramaze/adapter/ebb.rb +18 -0
  229. data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
  230. data/lib/ramaze/adapter/fake.rb +12 -0
  231. data/lib/ramaze/adapter/fcgi.rb +18 -0
  232. data/lib/ramaze/adapter/lsws.rb +19 -0
  233. data/lib/ramaze/adapter/mongrel.rb +21 -0
  234. data/lib/ramaze/adapter/scgi.rb +18 -0
  235. data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
  236. data/lib/ramaze/adapter/thin.rb +17 -0
  237. data/lib/ramaze/adapter/webrick.rb +43 -0
  238. data/lib/ramaze/adapter.rb +97 -0
  239. data/lib/ramaze/cache/memcached.rb +69 -0
  240. data/lib/ramaze/cache/memory.rb +6 -0
  241. data/lib/ramaze/cache/yaml_store.rb +68 -0
  242. data/lib/ramaze/cache.rb +113 -0
  243. data/lib/ramaze/contrib/auto_params/get_args.rb +58 -0
  244. data/lib/ramaze/contrib/auto_params.rb +135 -0
  245. data/lib/ramaze/contrib/email.rb +84 -0
  246. data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
  247. data/lib/ramaze/contrib/facebook.rb +23 -0
  248. data/lib/ramaze/contrib/file_cache.rb +65 -0
  249. data/lib/ramaze/contrib/gems.rb +78 -0
  250. data/lib/ramaze/contrib/gettext/mo.rb +155 -0
  251. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  252. data/lib/ramaze/contrib/gettext/po.rb +109 -0
  253. data/lib/ramaze/contrib/gettext.rb +113 -0
  254. data/lib/ramaze/contrib/gzip_filter.rb +69 -0
  255. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  256. data/lib/ramaze/contrib/profiling.rb +36 -0
  257. data/lib/ramaze/contrib/rest.rb +17 -0
  258. data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
  259. data/lib/ramaze/contrib/sequel/fill.rb +12 -0
  260. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  261. data/lib/ramaze/contrib/sequel/image.rb +198 -0
  262. data/lib/ramaze/contrib/sequel/relation.rb +82 -0
  263. data/lib/ramaze/contrib/sequel_cache.rb +92 -0
  264. data/lib/ramaze/contrib.rb +82 -0
  265. data/lib/ramaze/controller/error.rb +46 -0
  266. data/lib/ramaze/controller/main.rb +2 -0
  267. data/lib/ramaze/controller/resolve.rb +273 -0
  268. data/lib/ramaze/controller.rb +280 -0
  269. data/lib/ramaze/current/request.rb +205 -0
  270. data/lib/ramaze/current/response.rb +39 -0
  271. data/lib/ramaze/current/session/flash.rb +87 -0
  272. data/lib/ramaze/current/session/hash.rb +66 -0
  273. data/lib/ramaze/current/session.rb +181 -0
  274. data/lib/ramaze/current.rb +110 -0
  275. data/lib/ramaze/dispatcher/action.rb +48 -0
  276. data/lib/ramaze/dispatcher/directory.rb +119 -0
  277. data/lib/ramaze/dispatcher/error.rb +108 -0
  278. data/lib/ramaze/dispatcher/file.rb +95 -0
  279. data/lib/ramaze/dispatcher.rb +145 -0
  280. data/lib/ramaze/error.rb +24 -0
  281. data/lib/ramaze/gestalt.rb +124 -0
  282. data/lib/ramaze/helper/aspect.rb +106 -0
  283. data/lib/ramaze/helper/auth.rb +125 -0
  284. data/lib/ramaze/helper/cache.rb +140 -0
  285. data/lib/ramaze/helper/cgi.rb +39 -0
  286. data/lib/ramaze/helper/flash.rb +59 -0
  287. data/lib/ramaze/helper/form.rb +281 -0
  288. data/lib/ramaze/helper/formatting.rb +158 -0
  289. data/lib/ramaze/helper/gestalt.rb +15 -0
  290. data/lib/ramaze/helper/gravatar.rb +15 -0
  291. data/lib/ramaze/helper/httpdigest.rb +59 -0
  292. data/lib/ramaze/helper/identity.rb +119 -0
  293. data/lib/ramaze/helper/link.rb +122 -0
  294. data/lib/ramaze/helper/markaby.rb +31 -0
  295. data/lib/ramaze/helper/maruku.rb +7 -0
  296. data/lib/ramaze/helper/nitroform.rb +14 -0
  297. data/lib/ramaze/helper/pager.rb +366 -0
  298. data/lib/ramaze/helper/paginate.rb +234 -0
  299. data/lib/ramaze/helper/partial.rb +105 -0
  300. data/lib/ramaze/helper/redirect.rb +82 -0
  301. data/lib/ramaze/helper/rest.rb +43 -0
  302. data/lib/ramaze/helper/sendfile.rb +16 -0
  303. data/lib/ramaze/helper/sequel.rb +55 -0
  304. data/lib/ramaze/helper/simple_captcha.rb +31 -0
  305. data/lib/ramaze/helper/stack.rb +77 -0
  306. data/lib/ramaze/helper/tagz.rb +19 -0
  307. data/lib/ramaze/helper/thread.rb +17 -0
  308. data/lib/ramaze/helper/ultraviolet.rb +44 -0
  309. data/lib/ramaze/helper/user.rb +110 -0
  310. data/lib/ramaze/helper/xhtml.rb +23 -0
  311. data/lib/ramaze/helper.rb +79 -0
  312. data/lib/ramaze/log/analogger.rb +40 -0
  313. data/lib/ramaze/log/growl.rb +38 -0
  314. data/lib/ramaze/log/hub.rb +41 -0
  315. data/lib/ramaze/log/informer.rb +128 -0
  316. data/lib/ramaze/log/knotify.rb +28 -0
  317. data/lib/ramaze/log/logger.rb +26 -0
  318. data/lib/ramaze/log/logging.rb +89 -0
  319. data/lib/ramaze/log/syslog.rb +51 -0
  320. data/lib/ramaze/log/xosd.rb +92 -0
  321. data/lib/ramaze/log.rb +27 -0
  322. data/lib/ramaze/option/dsl.rb +45 -0
  323. data/lib/ramaze/option/holder.rb +131 -0
  324. data/lib/ramaze/option/merger.rb +108 -0
  325. data/lib/ramaze/option.rb +156 -0
  326. data/lib/ramaze/reloader.rb +186 -0
  327. data/lib/ramaze/route.rb +97 -0
  328. data/lib/ramaze/setup.rb +50 -0
  329. data/lib/ramaze/snippets/array/put_within.rb +44 -0
  330. data/lib/ramaze/snippets/binding/locals.rb +25 -0
  331. data/lib/ramaze/snippets/blankslate.rb +7 -0
  332. data/lib/ramaze/snippets/dictionary.rb +504 -0
  333. data/lib/ramaze/snippets/divide.rb +20 -0
  334. data/lib/ramaze/snippets/fiber.rb +63 -0
  335. data/lib/ramaze/snippets/kernel/constant.rb +41 -0
  336. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
  337. data/lib/ramaze/snippets/metaid.rb +17 -0
  338. data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
  339. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  340. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  341. data/lib/ramaze/snippets/object/acquire.rb +40 -0
  342. data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
  343. data/lib/ramaze/snippets/object/pretty.rb +16 -0
  344. data/lib/ramaze/snippets/object/scope.rb +18 -0
  345. data/lib/ramaze/snippets/object/traits.rb +76 -0
  346. data/lib/ramaze/snippets/ordered_set.rb +51 -0
  347. data/lib/ramaze/snippets/proc/locals.rb +19 -0
  348. data/lib/ramaze/snippets/ramaze/caller_info.rb +30 -0
  349. data/lib/ramaze/snippets/ramaze/caller_lines.rb +51 -0
  350. data/lib/ramaze/snippets/ramaze/deprecated.rb +20 -0
  351. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  352. data/lib/ramaze/snippets/ramaze/state.rb +86 -0
  353. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  354. data/lib/ramaze/snippets/string/camel_case.rb +21 -0
  355. data/lib/ramaze/snippets/string/color.rb +31 -0
  356. data/lib/ramaze/snippets/string/each.rb +19 -0
  357. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  358. data/lib/ramaze/snippets/string/esc.rb +34 -0
  359. data/lib/ramaze/snippets/string/ord.rb +21 -0
  360. data/lib/ramaze/snippets/string/snake_case.rb +21 -0
  361. data/lib/ramaze/snippets/string/start_with.rb +19 -0
  362. data/lib/ramaze/snippets/string/unindent.rb +28 -0
  363. data/lib/ramaze/snippets/thread/into.rb +18 -0
  364. data/lib/ramaze/snippets.rb +22 -0
  365. data/lib/ramaze/spec/helper/bacon.rb +7 -0
  366. data/lib/ramaze/spec/helper/browser.rb +88 -0
  367. data/lib/ramaze/spec/helper/mock_http.rb +63 -0
  368. data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
  369. data/lib/ramaze/spec/helper/requester.rb +63 -0
  370. data/lib/ramaze/spec/helper/simple_http.rb +434 -0
  371. data/lib/ramaze/spec/helper/snippets.rb +14 -0
  372. data/lib/ramaze/spec/helper.rb +135 -0
  373. data/lib/ramaze/spec.rb +1 -0
  374. data/lib/ramaze/store/default.rb +109 -0
  375. data/lib/ramaze/template/amrita2.rb +45 -0
  376. data/lib/ramaze/template/builder.rb +28 -0
  377. data/lib/ramaze/template/erubis.rb +41 -0
  378. data/lib/ramaze/template/ezamar/element.rb +169 -0
  379. data/lib/ramaze/template/ezamar/engine.rb +76 -0
  380. data/lib/ramaze/template/ezamar/morpher.rb +135 -0
  381. data/lib/ramaze/template/ezamar/render_partial.rb +31 -0
  382. data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
  383. data/lib/ramaze/template/ezamar.rb +42 -0
  384. data/lib/ramaze/template/haml.rb +37 -0
  385. data/lib/ramaze/template/liquid.rb +36 -0
  386. data/lib/ramaze/template/markaby.rb +52 -0
  387. data/lib/ramaze/template/maruku.rb +34 -0
  388. data/lib/ramaze/template/nagoro.rb +52 -0
  389. data/lib/ramaze/template/none.rb +14 -0
  390. data/lib/ramaze/template/redcloth.rb +25 -0
  391. data/lib/ramaze/template/remarkably.rb +38 -0
  392. data/lib/ramaze/template/sass.rb +37 -0
  393. data/lib/ramaze/template/tagz.rb +79 -0
  394. data/lib/ramaze/template/tenjin.rb +74 -0
  395. data/lib/ramaze/template/xslt.rb +100 -0
  396. data/lib/ramaze/template.rb +87 -0
  397. data/lib/ramaze/tool/create.rb +48 -0
  398. data/lib/ramaze/tool/daemonize.rb +37 -0
  399. data/lib/ramaze/tool/localize.rb +202 -0
  400. data/lib/ramaze/tool/mime.rb +35 -0
  401. data/lib/ramaze/tool/mime_types.yaml +615 -0
  402. data/lib/ramaze/tool/project_creator.rb +110 -0
  403. data/lib/ramaze/tool/record.rb +6 -0
  404. data/lib/ramaze/tool.rb +9 -0
  405. data/lib/ramaze/trinity.rb +16 -0
  406. data/lib/ramaze/version.rb +6 -0
  407. data/lib/ramaze.rb +133 -0
  408. data/lib/vendor/bacon.rb +323 -0
  409. data/rake_tasks/conf.rake +71 -0
  410. data/rake_tasks/coverage.rake +46 -0
  411. data/rake_tasks/gem.rake +74 -0
  412. data/rake_tasks/git.rake +41 -0
  413. data/rake_tasks/maintenance.rake +386 -0
  414. data/rake_tasks/metric.rake +24 -0
  415. data/rake_tasks/release.rake +76 -0
  416. data/rake_tasks/spec.rake +61 -0
  417. data/ramaze.gemspec +773 -0
  418. data/spec/contrib/auto_params.rb +121 -0
  419. data/spec/contrib/profiling.rb +29 -0
  420. data/spec/contrib/sequel/fill.rb +47 -0
  421. data/spec/examples/caching.rb +19 -0
  422. data/spec/examples/css.rb +15 -0
  423. data/spec/examples/element.rb +15 -0
  424. data/spec/examples/hello.rb +11 -0
  425. data/spec/examples/linking.rb +18 -0
  426. data/spec/examples/simple.rb +45 -0
  427. data/spec/examples/simple_auth.rb +32 -0
  428. data/spec/examples/templates/template_amrita2.rb +16 -0
  429. data/spec/examples/templates/template_erubis.rb +23 -0
  430. data/spec/examples/templates/template_ezamar.rb +23 -0
  431. data/spec/examples/templates/template_haml.rb +23 -0
  432. data/spec/examples/templates/template_liquid.rb +29 -0
  433. data/spec/examples/templates/template_markaby.rb +23 -0
  434. data/spec/examples/templates/template_redcloth.rb +28 -0
  435. data/spec/examples/templates/template_remarkably.rb +23 -0
  436. data/spec/examples/templates/template_tenjin.rb +28 -0
  437. data/spec/helper.rb +3 -0
  438. data/spec/ramaze/action/basics.rb +36 -0
  439. data/spec/ramaze/action/cache.rb +87 -0
  440. data/spec/ramaze/action/file_cache.rb +70 -0
  441. data/spec/ramaze/action/layout.rb +190 -0
  442. data/spec/ramaze/action/render.rb +31 -0
  443. data/spec/ramaze/action/view/bar.xhtml +1 -0
  444. data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
  445. data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
  446. data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
  447. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  448. data/spec/ramaze/adapter/ebb.rb +12 -0
  449. data/spec/ramaze/adapter/mongrel.rb +12 -0
  450. data/spec/ramaze/adapter/record.rb +31 -0
  451. data/spec/ramaze/adapter/webrick.rb +12 -0
  452. data/spec/ramaze/adapter.rb +49 -0
  453. data/spec/ramaze/cache.rb +140 -0
  454. data/spec/ramaze/controller/actionless_templates.rb +32 -0
  455. data/spec/ramaze/controller/resolve.rb +32 -0
  456. data/spec/ramaze/controller/subclass.rb +36 -0
  457. data/spec/ramaze/controller/template_resolving.rb +113 -0
  458. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  459. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  460. data/spec/ramaze/controller/view/greet.xhtml +1 -0
  461. data/spec/ramaze/controller/view/list.xhtml +1 -0
  462. data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
  463. data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
  464. data/spec/ramaze/controller.rb +180 -0
  465. data/spec/ramaze/current/request.rb +30 -0
  466. data/spec/ramaze/current/session.rb +97 -0
  467. data/spec/ramaze/dispatcher/directory.rb +55 -0
  468. data/spec/ramaze/dispatcher/file.rb +60 -0
  469. data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
  470. data/spec/ramaze/dispatcher/public/file name.txt +1 -0
  471. data/spec/ramaze/dispatcher/public/test_download.css +141 -0
  472. data/spec/ramaze/dispatcher.rb +31 -0
  473. data/spec/ramaze/element.rb +107 -0
  474. data/spec/ramaze/error.rb +94 -0
  475. data/spec/ramaze/gestalt.rb +131 -0
  476. data/spec/ramaze/helper/aspect.rb +101 -0
  477. data/spec/ramaze/helper/auth.rb +66 -0
  478. data/spec/ramaze/helper/cache.rb +160 -0
  479. data/spec/ramaze/helper/cgi.rb +43 -0
  480. data/spec/ramaze/helper/file.rb +18 -0
  481. data/spec/ramaze/helper/flash.rb +133 -0
  482. data/spec/ramaze/helper/form.rb +118 -0
  483. data/spec/ramaze/helper/formatting.rb +54 -0
  484. data/spec/ramaze/helper/link.rb +124 -0
  485. data/spec/ramaze/helper/pager.rb +99 -0
  486. data/spec/ramaze/helper/partial.rb +88 -0
  487. data/spec/ramaze/helper/redirect.rb +112 -0
  488. data/spec/ramaze/helper/simple_captcha.rb +22 -0
  489. data/spec/ramaze/helper/stack.rb +73 -0
  490. data/spec/ramaze/helper/user.rb +43 -0
  491. data/spec/ramaze/helper/view/locals.xhtml +1 -0
  492. data/spec/ramaze/helper/view/loop.xhtml +4 -0
  493. data/spec/ramaze/helper/view/num.xhtml +1 -0
  494. data/spec/ramaze/helper/view/partial.xhtml +1 -0
  495. data/spec/ramaze/helper/view/recursive.xhtml +8 -0
  496. data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
  497. data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
  498. data/spec/ramaze/helper/view/test_template.xhtml +1 -0
  499. data/spec/ramaze/localize.rb +89 -0
  500. data/spec/ramaze/log/informer.rb +72 -0
  501. data/spec/ramaze/log/syslog.rb +73 -0
  502. data/spec/ramaze/morpher.rb +111 -0
  503. data/spec/ramaze/params.rb +157 -0
  504. data/spec/ramaze/public/error404.xhtml +1 -0
  505. data/spec/ramaze/public/favicon.ico +0 -0
  506. data/spec/ramaze/public/ramaze.png +0 -0
  507. data/spec/ramaze/public/test_download.css +141 -0
  508. data/spec/ramaze/request/ebb.rb +9 -0
  509. data/spec/ramaze/request/mongrel.rb +9 -0
  510. data/spec/ramaze/request/thin.rb +9 -0
  511. data/spec/ramaze/request/webrick.rb +5 -0
  512. data/spec/ramaze/request.rb +185 -0
  513. data/spec/ramaze/rewrite/file.css +1 -0
  514. data/spec/ramaze/rewrite.rb +36 -0
  515. data/spec/ramaze/route.rb +131 -0
  516. data/spec/ramaze/session.rb +94 -0
  517. data/spec/ramaze/store/default.rb +71 -0
  518. data/spec/ramaze/struct.rb +47 -0
  519. data/spec/ramaze/template/amrita2/external.amrita +6 -0
  520. data/spec/ramaze/template/amrita2/sum.amrita +1 -0
  521. data/spec/ramaze/template/amrita2.rb +50 -0
  522. data/spec/ramaze/template/builder/external.rxml +3 -0
  523. data/spec/ramaze/template/builder.rb +51 -0
  524. data/spec/ramaze/template/erubis/sum.rhtml +1 -0
  525. data/spec/ramaze/template/erubis.rb +41 -0
  526. data/spec/ramaze/template/ezamar/another/long/action.zmr +1 -0
  527. data/spec/ramaze/template/ezamar/combined.zmr +1 -0
  528. data/spec/ramaze/template/ezamar/file_only.zmr +1 -0
  529. data/spec/ramaze/template/ezamar/index.zmr +1 -0
  530. data/spec/ramaze/template/ezamar/nested.zmr +1 -0
  531. data/spec/ramaze/template/ezamar/other__index.xhtml +1 -0
  532. data/spec/ramaze/template/ezamar/some__long__action.zmr +1 -0
  533. data/spec/ramaze/template/ezamar/sum.zmr +1 -0
  534. data/spec/ramaze/template/ezamar.rb +63 -0
  535. data/spec/ramaze/template/haml/index.haml +5 -0
  536. data/spec/ramaze/template/haml/locals.haml +2 -0
  537. data/spec/ramaze/template/haml/with_vars.haml +4 -0
  538. data/spec/ramaze/template/haml.rb +66 -0
  539. data/spec/ramaze/template/liquid/index.liquid +1 -0
  540. data/spec/ramaze/template/liquid/products.liquid +45 -0
  541. data/spec/ramaze/template/liquid.rb +99 -0
  542. data/spec/ramaze/template/markaby/external.mab +8 -0
  543. data/spec/ramaze/template/markaby/sum.mab +1 -0
  544. data/spec/ramaze/template/markaby.rb +61 -0
  545. data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
  546. data/spec/ramaze/template/nagoro/combined.nag +1 -0
  547. data/spec/ramaze/template/nagoro/file_only.nag +1 -0
  548. data/spec/ramaze/template/nagoro/index.nag +1 -0
  549. data/spec/ramaze/template/nagoro/nested.nag +1 -0
  550. data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
  551. data/spec/ramaze/template/nagoro/sum.nag +1 -0
  552. data/spec/ramaze/template/nagoro.rb +64 -0
  553. data/spec/ramaze/template/ramaze/external.test +1 -0
  554. data/spec/ramaze/template/redcloth/external.redcloth +1 -0
  555. data/spec/ramaze/template/redcloth.rb +38 -0
  556. data/spec/ramaze/template/remarkably/external.rem +8 -0
  557. data/spec/ramaze/template/remarkably/sum.rem +1 -0
  558. data/spec/ramaze/template/remarkably.rb +58 -0
  559. data/spec/ramaze/template/sass/file.css.sass +5 -0
  560. data/spec/ramaze/template/sass.rb +69 -0
  561. data/spec/ramaze/template/tagz/external.tagz +8 -0
  562. data/spec/ramaze/template/tagz/sum.tagz +1 -0
  563. data/spec/ramaze/template/tagz.rb +62 -0
  564. data/spec/ramaze/template/tenjin/external.tenjin +1 -0
  565. data/spec/ramaze/template/tenjin.rb +47 -0
  566. data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
  567. data/spec/ramaze/template/xslt/index.xsl +14 -0
  568. data/spec/ramaze/template/xslt/products.xsl +32 -0
  569. data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
  570. data/spec/ramaze/template/xslt.rb +90 -0
  571. data/spec/ramaze/template.rb +128 -0
  572. data/spec/snippets/array/put_within.rb +33 -0
  573. data/spec/snippets/binding/locals.rb +9 -0
  574. data/spec/snippets/divide.rb +19 -0
  575. data/spec/snippets/kernel/constant.rb +23 -0
  576. data/spec/snippets/numeric/filesize_format.rb +12 -0
  577. data/spec/snippets/numeric/time.rb +12 -0
  578. data/spec/snippets/object/__dir__.rb +8 -0
  579. data/spec/snippets/object/acquire.rb +71 -0
  580. data/spec/snippets/ordered_set.rb +63 -0
  581. data/spec/snippets/ramaze/caller_info.rb +39 -0
  582. data/spec/snippets/ramaze/caller_lines.rb +30 -0
  583. data/spec/snippets/string/camel_case.rb +25 -0
  584. data/spec/snippets/string/color.rb +11 -0
  585. data/spec/snippets/string/snake_case.rb +24 -0
  586. data/spec/snippets/string/unindent.rb +43 -0
  587. data/spec/snippets/thread/into.rb +20 -0
  588. metadata +823 -0
@@ -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
@@ -0,0 +1,24 @@
1
+ namespace :metric do
2
+ desc 'changes per file according to git'
3
+ task :churn do
4
+ $stdout.sync = true
5
+ out = lambda{|changes, rb| puts("%4d %s" % [changes, rb]) }
6
+ churn = {}
7
+
8
+ print 'churning '
9
+
10
+ Dir['lib/**/*.rb'].each do |rb|
11
+ changes = `git-log --pretty=oneline '#{rb}'`.count("\n")
12
+ print '.'
13
+ # out[changes, rb]
14
+ churn[rb] = changes
15
+ end
16
+ puts ' done.'
17
+
18
+ sorted = churn.sort_by{|r,c| c }.reverse
19
+ puts "Top 20:"
20
+ sorted.first(20).each{|(r,c)| out[c,r] }
21
+ puts "Bottom 20:"
22
+ sorted.last(20).each{|(r,c)| out[c,r] }
23
+ end
24
+ end
@@ -0,0 +1,76 @@
1
+ def latest_release_id
2
+ require 'open-uri'
3
+ require 'hpricot'
4
+
5
+ url = "http://rubyforge.org/frs/?group_id=3034"
6
+ doc = Hpricot(open(url))
7
+ a = (doc/:a).find{|a| a[:href] =~ /release_id/}
8
+
9
+ version = a.inner_html
10
+ release_id = Hash[*a[:href].split('?').last.split('=').flatten]['release_id']
11
+ end
12
+
13
+ def update_version_rb(version)
14
+ File.open('lib/ramaze/version.rb', 'w+') do |v|
15
+ v.puts COPYRIGHT
16
+ v.puts
17
+ v.puts "module Ramaze"
18
+ v.puts " VERSION = #{version.to_s.dump}"
19
+ v.puts "end"
20
+ end
21
+ end
22
+
23
+ def prepare_package(version)
24
+ update_version_rb(version)
25
+ spec = generate_gemspec(version)
26
+
27
+ Rake::GemPackageTask.new(spec) do |pkg|
28
+ pkg.need_tar = true
29
+ pkg.need_zip = true
30
+ end
31
+
32
+ Rake::Task['package'].invoke
33
+ end
34
+
35
+ namespace :release do
36
+ desc 'Nightly release to gems.ramaze.net'
37
+ task 'nightly' do
38
+ prepare_package(version_today)
39
+
40
+ location = 'web/gems/'
41
+
42
+ sh "scp pkg/*.{gem,tgz,zip} ramaze@ramaze.net:#{location}"
43
+ sh "ssh ramaze@ramaze.net '
44
+ source ~/.zsh/export.sh
45
+ cd #{location}
46
+ gem generate_index'"
47
+ end
48
+
49
+ desc 'Monthly release to rubyforge'
50
+ task 'monthly' do
51
+ prepare_package(v = version_month)
52
+
53
+ sh "rubyforge login"
54
+ sh "rubyforge add_release ramaze ramaze #{v} pkg/ramaze-#{v}.gem"
55
+
56
+ release_id = latest_release_id
57
+
58
+ files = Dir['pkg/*'].reject{|f| File.directory?(f) or f =~ /\.gem$/ }
59
+ files.each do |file|
60
+ sh "rubyforge add_file ramaze ramaze #{release_id} '#{file}'"
61
+ end
62
+ end
63
+
64
+ desc 'Prepare and push gemspec to github'
65
+ task 'gemspec' => 'gemspec-prepare' do
66
+ sh "git commit -m 'Update ramaze.gemspec' ramaze.gemspec"
67
+ sh 'git fetch'
68
+ sh 'git rebase origin/master'
69
+ sh 'git push'
70
+ end
71
+
72
+ desc 'Prepare gemspec for push to github'
73
+ task 'gemspec-prepare' do
74
+ update_gemspec(generate_gemspec(version_month))
75
+ end
76
+ end
@@ -0,0 +1,61 @@
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
+ require 'pp'
6
+
7
+ require 'lib/ramaze/snippets'
8
+
9
+ desc 'Run all specs'
10
+ task 'spec' do
11
+ non_verbose, non_fatal = ENV['non_verbose'], ENV['non_fatal']
12
+ require 'scanf'
13
+
14
+ root = File.expand_path(File.dirname(__FILE__)/'..')
15
+ libpath = root/'lib'
16
+
17
+ specs = Dir[root/'spec/{ramaze,examples,snippets,contrib}/**/*.rb'] +
18
+ Dir[root/'examples/**/spec/**/*.rb']
19
+
20
+ ignore = [
21
+ root/'spec/ramaze/request.rb',
22
+ ].map{|i| Dir[i].map{|f| File.expand_path(f) }}.flatten
23
+
24
+ config = RbConfig::CONFIG
25
+ bin = config['bindir']/config['ruby_install_name']
26
+
27
+ result_format = '%d tests, %d assertions, %d failures, %d errors'
28
+
29
+ list = (specs - ignore).sort
30
+ names = list.map{|l| l.sub(root + '/', '') }
31
+ width = names.sort_by{|s| s.size}.last.size
32
+ total = names.size
33
+
34
+ list.zip(names).each_with_index do |(spec, name), idx|
35
+ print '%3d/%d: ' % [idx + 1, total]
36
+ print name.ljust(width + 2)
37
+
38
+ stdout = `#{bin} -I#{libpath} #{spec} 2>&1`
39
+
40
+ status = $?.exitstatus
41
+ tests, assertions, failures, errors =
42
+ stdout[/.*\Z/].to_s.scanf(result_format)
43
+
44
+ if stdout =~ /Usually you should not worry about this failure, just install the/
45
+ lib = stdout[/^no such file to load -- (.*?)$/, 1] ||
46
+ stdout[/RubyGem version error: (.*)$/, 1]
47
+ puts "requires #{lib}".yellow
48
+ elsif status == 0
49
+ puts "all %3d passed".green % tests
50
+ else
51
+ out = result_format % [tests, assertions, failures, errors].map{|e| e.to_s.to_i}
52
+ puts out.red
53
+ puts stdout unless non_verbose
54
+ exit status unless non_fatal
55
+ end
56
+ end
57
+
58
+ puts '', "joy: the emotion evoked by well-being, success, or good fortune or by the
59
+ prospect of possessing what one desires"
60
+ puts "All specs pass, go enjoy yourself :)"
61
+ end