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
data/Rakefile ADDED
@@ -0,0 +1,248 @@
1
+ begin
2
+ require 'rubygems'
3
+ rescue LoadError
4
+ end
5
+
6
+ require 'rake'
7
+ require 'rake/clean'
8
+ require 'rake/packagetask'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/rdoctask'
11
+
12
+ require 'pp'
13
+ require 'date'
14
+ require 'time'
15
+ require 'fileutils'
16
+
17
+ include FileUtils
18
+
19
+ $:.unshift File.join(File.dirname(__FILE__), "lib")
20
+
21
+ require 'ramaze/version'
22
+ load 'rake_tasks/conf.rake'
23
+ load 'rake_tasks/maintenance.rake'
24
+ load 'rake_tasks/spec.rake'
25
+ load 'rake_tasks/coverage.rake'
26
+ load 'rake_tasks/release.rake'
27
+ load 'rake_tasks/git.rake'
28
+ load 'rake_tasks/gem.rake'
29
+ load 'rake_tasks/metric.rake'
30
+
31
+ task :default => ['spec']
32
+ task :test => ['spec']
33
+ # task :package => ['jquery']
34
+
35
+ desc 'download latest jquery and put in /lib/proto/public/js/jquery.js'
36
+ task :jquery do
37
+ require 'open-uri'
38
+ $stdout.sync = true
39
+
40
+ File.open('lib/proto/public/js/jquery.js', 'w+') do |jquery|
41
+ remote = open('http://code.jquery.com/jquery-latest.js')
42
+ print "openend remote side, copying..."
43
+ while chunk = remote.read(4096)
44
+ print '.'
45
+ jquery.write(chunk)
46
+ end
47
+ puts " done."
48
+ end
49
+ end
50
+
51
+ desc 'Check gemspec file list against real file list'
52
+ task :check_gemspec do
53
+ base_dir = File.expand_path(File.dirname(__FILE__))
54
+ gemspec_files = eval(File.read(File.join(base_dir,'ramaze.gemspec'))).files.map{|file|File.join(base_dir,file)}
55
+
56
+ deleted_files = gemspec_files.select{|file|!File.exists?(file)}.map{|file|file[(base_dir.size+1)..-1]}
57
+
58
+ added_files = Dir.glob(File.join(File.dirname(__FILE__),'**/*')).select do |file|
59
+ !gemspec_files.index(file)
60
+ end.map do |file|
61
+ file[(base_dir.size+1)..-1]
62
+ end.select do |file|
63
+ !( file == 'pkg' or file =~ /.*\.gem/ )
64
+ end
65
+
66
+ unless deleted_files.empty?
67
+ puts "The following files appear in the gemspec but cannot be found:"
68
+ deleted_files.each do |file|
69
+ puts "\t#{file}"
70
+ end
71
+ end
72
+ unless added_files.empty?
73
+ puts "The following files exist, but cannot be found in the gemspec:"
74
+ added_files.each do |file|
75
+ puts "\t#{file}"
76
+ end
77
+ end
78
+ end
79
+
80
+ task :rcov_dir do
81
+ mkdir_p 'doc/output/tools/rcov/'
82
+ end
83
+
84
+ desc "Generate HTML coverage report"
85
+ task :rcov_summary => :rcov_dir do
86
+ `rcov --version`
87
+ raise LoadError, "Please `gem install rcov` first" if $?.exitstatus == 127
88
+ raise "Run `rake coverage` to generate coverage data first" unless File.exists? 'coverage.data'
89
+ sh "rcov --aggregate coverage.data -o doc/output/tools/rcov/"
90
+ end
91
+
92
+ desc "generate rdoc"
93
+ task :rdoc => [:clean] do
94
+ sh "rdoc #{(RDOC_OPTS + RDOC_FILES).join(' ')}"
95
+ end
96
+
97
+ desc "generate improved allison-rdoc"
98
+ task :allison => :clean do
99
+ opts = RDOC_OPTS
100
+ path = `allison --path`.strip
101
+ raise LoadError, "Please `gem install allison` first" if $?.exitstatus == 127
102
+ opts << %W[--template '#{path}']
103
+ sh "rdoc #{(RDOC_OPTS + RDOC_FILES).join(' ')}"
104
+ end
105
+
106
+ desc "create bzip2 and tarball"
107
+ task :distribute => :gem do
108
+ sh "rm -rf pkg/ramaze-#{VERS}"
109
+ sh "mkdir -p pkg/ramaze-#{VERS}"
110
+ sh "cp -r {bin,doc,lib,examples,spec,Rakefile,README.md,rake_tasks} pkg/ramaze-#{VERS}/"
111
+
112
+ Dir.chdir('pkg') do |pwd|
113
+ sh "tar -zcvf ramaze-#{VERS}.tar.gz ramaze-#{VERS}"
114
+ sh "tar -jcvf ramaze-#{VERS}.tar.bz2 ramaze-#{VERS}"
115
+ end
116
+
117
+ sh "rm -rf pkg/ramaze-#{VERS}"
118
+ end
119
+
120
+ desc "show a todolist from all the TODO tags in the source"
121
+ task :todo do
122
+ files = Dir[File.join(BASEDIR, '{lib,spec}', '**/*.rb')]
123
+
124
+ files.each do |file|
125
+ lastline = todo = comment = long_comment = false
126
+
127
+ File.readlines(file).each_with_index do |line, lineno|
128
+ lineno += 1
129
+ comment = line =~ /^\s*?#.*?$/
130
+ long_comment = line =~ /^=begin/
131
+ long_comment = line =~ /^=end/
132
+ todo = true if line =~ /TODO/ and (long_comment or comment)
133
+ todo = false if line.gsub('#', '').strip.empty?
134
+ todo = false unless comment or long_comment
135
+ if todo
136
+ unless lastline and lastline + 1 == lineno
137
+ puts
138
+ puts "vim #{file} +#{lineno}"
139
+ end
140
+
141
+ l = line.strip.gsub(/^#\s*/, '')
142
+ print ' ' unless l =~ /^-/
143
+ puts l
144
+ lastline = lineno
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ desc "opens a simple readline that makes making requests easier"
151
+ task 'request' do
152
+ ARGV.clear
153
+ require 'open-uri'
154
+ require 'pp'
155
+
156
+ loop do
157
+ print 'do request? [enter] '
158
+ gets
159
+ begin
160
+ pp open('http://localhost:7000/xxx').read
161
+ rescue Object => ex
162
+ puts ex
163
+ end
164
+ end
165
+ end
166
+
167
+ desc 'listing of available traits per class/module'
168
+ task 'traits' do
169
+ nodes = Hash.new{|h,k| h[k] = []}
170
+ Dir['lib/**/*.rb'].each do |file|
171
+ content = File.read(file)
172
+ traits = content.grep(/^\s*trait\s*:/)
173
+ traits.each do |trait|
174
+ space = content[0..content.index(trait)].scan(/^\s*(?:class|module)\s+(.*)$/)
175
+ space = space.flatten.join('::')
176
+ nodes[space] << trait.strip
177
+ end
178
+ end
179
+
180
+ nodes.each do |space, traits|
181
+ puts space
182
+ traits.each do |trait|
183
+ print ' ', trait, "\n"
184
+ end
185
+ puts
186
+ end
187
+ end
188
+
189
+ desc "Update doc/CHANGELOG"
190
+ task 'doc/CHANGELOG' do
191
+ File.open('doc/CHANGELOG', 'w+') do |f|
192
+ f.puts `git log`
193
+ end
194
+ end
195
+
196
+ desc "#{README} to doc/README.html"
197
+ task 'doc/README.html' => [README] do
198
+ sh "maruku #{README}"
199
+ mv 'README.html', 'doc/README.html'
200
+ end
201
+
202
+ desc "Compile the #{README} from the parts of doc/readme"
203
+ task README do
204
+ require 'enumerator'
205
+
206
+ chapters = [
207
+ 'About Ramaze', 'introduction',
208
+ 'Features Overview', 'features',
209
+ 'Basic Principles', 'principles',
210
+ 'Installation', 'installing',
211
+ 'Getting Started', 'getting_started',
212
+ 'A couple of Examples', 'examples',
213
+ 'How to find Help', 'getting_help',
214
+ 'Appendix', 'appendix',
215
+ 'And thanks to...', 'thanks',
216
+ ]
217
+
218
+ File.open(README, 'w+') do |readme|
219
+ readme.puts COPYRIGHT.map{|l| l[1..-1]}, ''
220
+
221
+ chapters.each_slice(2) do |title, file|
222
+ file = File.join('doc', 'readme_chunks', "#{file}.txt")
223
+ chapter = File.read(file)
224
+ readme.puts "# #{title}", '', chapter
225
+ readme.puts '', '' unless title == chapters[-2]
226
+ end
227
+ end
228
+ end
229
+
230
+ desc 'Generate YARD documentation'
231
+ task :ydoc do
232
+ sh('yardoc -o ydoc -r README.md')
233
+ end
234
+
235
+ task :publish => [:ydoc]
236
+
237
+ begin
238
+ require 'grancher/task'
239
+
240
+ Grancher::Task.new do |g|
241
+ g.branch = 'gh-pages'
242
+ # g.push_to = 'origin'
243
+ g.message = 'Updated website'
244
+ g.directory 'ydoc', '.'
245
+ end
246
+ rescue LoadError
247
+ # oh well :)
248
+ end
@@ -0,0 +1,131 @@
1
+ ====== simple ======
2
+ <code ruby>
3
+ require 'ramaze'
4
+
5
+ class MainController < Ramaze::Controller
6
+ def index
7
+ "Hello, World!"
8
+ end
9
+ end
10
+ </code>
11
+
12
+ === webrick ===
13
+ Mem usage before: 20.32MB
14
+ Time taken for tests: 7.747022 seconds
15
+ Failed requests: 0
16
+ Requests per second: 129.08 [#/sec] (mean)
17
+ Time per request: 77.470 [ms] (mean)
18
+ Time per request: 7.747 [ms] (mean, across all concurrent requests)
19
+ Mem usage after: 25.43MB
20
+
21
+ === mongrel ===
22
+ Mem usage before: 20.25MB
23
+ Time taken for tests: 2.205161 seconds
24
+ Failed requests: 0
25
+ Requests per second: 453.48 [#/sec] (mean)
26
+ Time per request: 22.052 [ms] (mean)
27
+ Time per request: 2.205 [ms] (mean, across all concurrent requests)
28
+ Mem usage after: 21.91MB
29
+
30
+ === evented_mongrel ===
31
+ Mem usage before: 22.64MB
32
+ Time taken for tests: 1.311583 seconds
33
+ Failed requests: 0
34
+ Requests per second: 762.44 [#/sec] (mean)
35
+ Time per request: 13.116 [ms] (mean)
36
+ Time per request: 1.312 [ms] (mean, across all concurrent requests)
37
+ Mem usage after: 27.03MB
38
+
39
+ ====== no_template ======
40
+ <code ruby>
41
+ require 'ramaze'
42
+
43
+ class MainController < Ramaze::Controller
44
+ engine :None
45
+
46
+ def index
47
+ "Hello, World!"
48
+ end
49
+ end
50
+ </code>
51
+
52
+ === evented_mongrel ===
53
+ Mem usage before: 22.63MB
54
+ Time taken for tests: 1.151947 seconds
55
+ Failed requests: 0
56
+ Requests per second: 868.10 [#/sec] (mean)
57
+ Time per request: 11.519 [ms] (mean)
58
+ Time per request: 1.152 [ms] (mean, across all concurrent requests)
59
+ Mem usage after: 27.11MB
60
+
61
+ ====== no_informer ======
62
+ <code ruby>
63
+ require 'ramaze'
64
+
65
+ class MainController < Ramaze::Controller
66
+ def index
67
+ "Hello, World!"
68
+ end
69
+ end
70
+
71
+ Ramaze::Inform.loggers = []
72
+ </code>
73
+
74
+ === evented_mongrel ===
75
+ Mem usage before: 22.63MB
76
+ Time taken for tests: 1.202878 seconds
77
+ Failed requests: 0
78
+ Requests per second: 831.34 [#/sec] (mean)
79
+ Time per request: 12.029 [ms] (mean)
80
+ Time per request: 1.203 [ms] (mean, across all concurrent requests)
81
+ Mem usage after: 27.07MB
82
+
83
+ ====== no_sessions ======
84
+ <code ruby>
85
+ require 'ramaze'
86
+
87
+ class MainController < Ramaze::Controller
88
+ def index
89
+ "Hello, World!"
90
+ end
91
+ end
92
+
93
+ Ramaze::Inform.loggers = []
94
+ Ramaze::Global.sessions = false
95
+ </code>
96
+
97
+ === evented_mongrel ===
98
+ Mem usage before: 22.63MB
99
+ Time taken for tests: 0.835254 seconds
100
+ Failed requests: 0
101
+ Requests per second: 1197.24 [#/sec] (mean)
102
+ Time per request: 8.353 [ms] (mean)
103
+ Time per request: 0.835 [ms] (mean, across all concurrent requests)
104
+ Mem usage after: 26.38MB
105
+
106
+ ====== minimal ======
107
+ <code ruby>
108
+ require 'ramaze'
109
+
110
+ class MainController < Ramaze::Controller
111
+ engine :None
112
+
113
+ def index
114
+ "Hello, World!"
115
+ end
116
+ end
117
+
118
+ Ramaze::Global.sourcereload = false
119
+ Ramaze::Global.sessions = false
120
+ Ramaze::Inform.loggers = []
121
+ </code>
122
+
123
+ === evented_mongrel ===
124
+ Mem usage before: 22.62MB
125
+ Time taken for tests: 0.647273 seconds
126
+ Failed requests: 0
127
+ Requests per second: 1544.94 [#/sec] (mean)
128
+ Time per request: 6.473 [ms] (mean)
129
+ Time per request: 0.647 [ms] (mean, across all concurrent requests)
130
+ Mem usage after: 26.42MB
131
+
data/benchmark/run.rb ADDED
@@ -0,0 +1,362 @@
1
+ require "optparse"
2
+ require "timeout"
3
+ require "net/http"
4
+
5
+ class String
6
+ def /(o) File.join(self, o.to_s) end
7
+ end
8
+
9
+ class RamazeBenchmark
10
+
11
+ class BasicWriter
12
+ def initialize
13
+ @ljust = 24
14
+ end
15
+
16
+ def write(key, val)
17
+ if key == "Name"
18
+ puts "====== #{val} ======"
19
+ else
20
+ puts((key.to_s + ":").ljust(@ljust) + val.to_s)
21
+ end
22
+ end
23
+
24
+ def flush
25
+ puts
26
+ $stdout.flush
27
+ end
28
+
29
+ def close; end
30
+ end
31
+
32
+ class CSVWriter
33
+ def initialize
34
+ @keys, @vals = [], []
35
+ end
36
+
37
+ def write(key, val)
38
+ @keys << key
39
+ @vals << (val =~ /^\d[\d.]+/ ? $& : val)
40
+ end
41
+
42
+ def flush
43
+ unless @header
44
+ puts FasterCSV.generate{|csv| csv << @keys }
45
+ @header = true
46
+ end
47
+
48
+ puts FasterCSV.generate{|csv| csv << @vals }
49
+ @keys, @vals = [], []
50
+ end
51
+
52
+ def close; end
53
+ end
54
+
55
+ class GruffWriter
56
+ RPS = "Requests per second"
57
+
58
+ def initialize
59
+ @benchmarks = {}
60
+ @order = []
61
+ end
62
+
63
+ def write(key, val)
64
+ @benchmark ||= {}
65
+ @benchmark[key] = (val =~ /^\d[\d.]+/ ? $&.to_f : val)
66
+ end
67
+
68
+ def flush
69
+ if @benchmark["Requests per second"]
70
+ name = @benchmark["Name"]
71
+ @benchmarks[name] ||= []
72
+ @benchmarks[name] << @benchmark
73
+ @order << name unless @order.include?(name)
74
+ end
75
+ @benchmark = nil
76
+ end
77
+
78
+ def close
79
+ g = Gruff::SideBar.new(800)
80
+ g.title = "Ramaze Benchmark"
81
+ setup_gruff_data(g)
82
+ g.labels = gruff_labels
83
+ g.sort = false
84
+ g.hide_legend = true if graph_type == :simple
85
+ g.x_axis_label = "requests/sec"
86
+ g.minimum_value = 0
87
+ g.write
88
+ end
89
+
90
+ private
91
+
92
+ def gruff_labels
93
+ table = {}
94
+ @order.each_with_index do |bname, idx|
95
+ table[idx] = bname
96
+ end
97
+ return table
98
+ end
99
+
100
+ def adapters
101
+ @benchmarks.to_a[0][1].map{|bm| bm["Adapter"]}.uniq
102
+ end
103
+
104
+ def paths
105
+ @benchmarks.to_a[0][1].map{|bm| bm["Path"]}.uniq
106
+ end
107
+
108
+ def graph_type
109
+ case [adapters.size > 1, paths.size > 1]
110
+ when [true , true ]; :both
111
+ when [true , false]; :adapter
112
+ when [false, true ]; :path
113
+ else :simple; end
114
+ end
115
+
116
+ def setup_gruff_data(g)
117
+ case graph_type
118
+ when :simple
119
+ g.data("", @order.map{|name| @benchmarks[name][0][RPS] }, '#6886B4')
120
+ when :adapter
121
+ adapters.each do |adapter|
122
+ g.data(adapter, @order.map{|name|
123
+ @benchmarks[name].find{|bm| bm["Adapter"] == adapter}[RPS]
124
+ })
125
+ end
126
+ when :path
127
+ paths.each do |path|
128
+ g.data(path, @order.map{|name|
129
+ @benchmarks[name].find{|bm| bm["Path"] == path}[RPS]
130
+ })
131
+ end
132
+ when :both
133
+ adapters.each do |adapter|
134
+ paths.each do |path|
135
+ g.data("#{adapter}, #{path}", @order.map{|name|
136
+ @benchmarks[name].find{|bm|
137
+ bm["Adapter"] == adapter && bm["Path"] == path
138
+ }[RPS]
139
+ })
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ attr_accessor :requests, :adapters, :port, :log, :display_code, :target
147
+ attr_accessor :concurrent, :paths, :benchmarker, :informer, :sessions
148
+ attr_accessor :show_log, :ignored_tags, :formats
149
+
150
+ def initialize()
151
+ @adapters = [:webrick]
152
+ @port = rand(32768-1)+32768
153
+ @requests = 100
154
+ @concurrent = 10
155
+ @signal = 'SIGKILL'
156
+ @host = "127.0.0.1"
157
+ @paths = ["/"]
158
+ @target = /.+/
159
+ @informer = true
160
+ @sessions = true
161
+ @ignored_tags = [:debug, :dev]
162
+ @formats = ["text"]
163
+ @writers = []
164
+ yield self
165
+ end
166
+
167
+ def start
168
+ # setup writers
169
+ @formats.each do |format|
170
+ case format
171
+ when "csv" ; @writers << CSVWriter.new
172
+ when "gruff"; @writers << GruffWriter.new
173
+ when "text" ; @writers << BasicWriter.new
174
+ end
175
+ end
176
+
177
+ # benchmarks
178
+ __DIR__ = File.expand_path(File.dirname(__FILE__))
179
+ Dir[__DIR__('suite/*.rb')].each do |filename|
180
+ @adapters.each do |adapter|
181
+ @paths.each do |path|
182
+ benchmark(filename, adapter, path) if @target.match(filename)
183
+ end
184
+ end
185
+ end
186
+
187
+ # close writers
188
+ @writers.each do |writer|
189
+ writer.close
190
+ end
191
+ end
192
+
193
+ # start to measure
194
+ def benchmark(filename, adapter, path)
195
+ # output informations
196
+ l :Name, filename.scan(/\/([^\/]+)\.rb/).to_s
197
+ l :Adapter, adapter
198
+ l :Requests, @requests
199
+ l :Concurrent, @concurrent
200
+ l :Path, path
201
+ l :Informer, @informer
202
+ l :Sessions, @sessions
203
+ if @display_code
204
+ l :Code, "<code ruby>\n#{File.read(filename)}\n</code>\n\n"
205
+ end
206
+
207
+ # real benchmark
208
+ ramaze(filename, adapter) do |pid|
209
+ l "Mem usage before", "#{memsize(pid)}MB"
210
+ ab(path).each do |line|
211
+ l *line.split(/:\s*/)
212
+ end
213
+ l "Mem usage after", "#{memsize(pid)}MB"
214
+ end
215
+
216
+ # flush writers
217
+ @writers.each do |writer|
218
+ writer.flush
219
+ end
220
+ end
221
+
222
+ private
223
+
224
+ # memory usage size
225
+ def memsize(pid)
226
+ (`ps -p #{pid} -o rss=`.strip.to_f/10.24).round/100.0
227
+ end
228
+
229
+ # output
230
+ def l(key, val)
231
+ @writers.each do |writer|
232
+ writer.write(key.to_s, val)
233
+ end
234
+ end
235
+
236
+ # url of ramaze server
237
+ def url(path)
238
+ "http://#{@host}:#{@port}#{path}"
239
+ end
240
+
241
+ # apache benchmark
242
+ def ab(path)
243
+ re = /^(Fail|Req|Time|Total transferred|Document Length|Transfer rate)/
244
+ `ab -c #{@concurrent} -n #{@requests} #{url(path)}`.split("\n").grep(re)
245
+ end
246
+
247
+ # startup
248
+ def ramaze(filename, adapter)
249
+ pid = fork do
250
+ begin
251
+ require filename
252
+ Ramaze::Log.ignored_tags = @ignored_tags
253
+ if @informer
254
+ unless @show_log
255
+ Ramaze::Log.loggers = [Ramaze::Logging::Logger::Informer.new("/dev/null")]
256
+ end
257
+ else
258
+ Ramaze::Log.loggers = []
259
+ end
260
+ Ramaze::Global.sessions = @sessions
261
+ Ramaze::Global.sourcereload = false
262
+ Ramaze.start :adapter => adapter, :port => @port
263
+ rescue LoadError => ex; l :Error, ex; end
264
+ end
265
+
266
+ yield pid if wait_to_startup
267
+
268
+ Process.kill(@signal, pid)
269
+ Process.waitpid2(pid)
270
+ end
271
+
272
+ # wait for ramaze to start up
273
+ def wait_to_startup
274
+ begin
275
+ Timeout.timeout(5) do
276
+ loop do
277
+ begin
278
+ sleep 1; Net::HTTP.new(@host, @port).head("/"); return true
279
+ rescue Errno::ECONNREFUSED; end
280
+ end
281
+ end
282
+ rescue Timeout::Error
283
+ l "Error", "failed to start benchmark script"; return false
284
+ end
285
+ end
286
+ end
287
+
288
+ Signal.trap(:INT, proc{exit})
289
+
290
+ RamazeBenchmark.new do |bm|
291
+ OptionParser.new(false, 24, " ") do |opt|
292
+ opt.on('-a', '--adapters NAMES', '[webrick] Specify adapters') do |adapters|
293
+ bm.adapters = adapters.split(",")
294
+ end
295
+
296
+ opt.on('--formats (text|csv|gruff)', '[text] Specify output formats') do |formats|
297
+ bm.formats = formats.split(",")
298
+ bm.formats.each do |format|
299
+ case format
300
+ when "csv" ; require "fastercsv"
301
+ when "gruff"; require "gruff"
302
+ end
303
+ end
304
+ end
305
+
306
+ opt.on('-n', '--requests NUM', '[100] Number of requests') do |n|
307
+ bm.requests = n
308
+ end
309
+
310
+ opt.on('-c', '--concurrent NUM', '[10] Number of multiple requests') do |n|
311
+ bm.concurrent = n
312
+ end
313
+
314
+ opt.on('--code', 'Display benchmark code') do |n|
315
+ bm.display_code = true
316
+ end
317
+
318
+ opt.on('-p', '--port NUM',
319
+ '[random(32768-65535)] Specify port number') do |n|
320
+ bm.port = n
321
+ end
322
+
323
+ opt.on('--paths PATHS', '[/] Specify request paths') do |paths|
324
+ bm.paths = paths.split(",")
325
+ end
326
+
327
+ opt.on('--no-informer', 'Disable informer') do
328
+ bm.informer = false
329
+ end
330
+
331
+ opt.on('--ignored-tags TAGS',
332
+ '[debug,dev] Specify ignored tags for Ramaze::Log') do |tags|
333
+ bm.ignored_tags = tags.split(",").map{|e| e.to_sym }
334
+ end
335
+
336
+ opt.on('--show-log', 'Show log') do
337
+ bm.show_log = true
338
+ end
339
+
340
+ opt.on('--no-sessions', 'Disable sessions') do
341
+ bm.sessions = false
342
+ end
343
+
344
+ opt.on('--target REGEXP',
345
+ '[/.+/] Specify benchmark scripts to measure') do |name|
346
+ bm.target = Regexp.compile(name)
347
+ end
348
+
349
+ opt.on('-h', '--help', 'Show this message') do
350
+ puts opt.help
351
+ exit
352
+ end
353
+
354
+ begin
355
+ opt.parse!(ARGV)
356
+ rescue OptionParser::ParseError => ex
357
+ puts "[ERROR] " + ex
358
+ puts opt.help
359
+ exit
360
+ end
361
+ end
362
+ end.start