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,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
@@ -0,0 +1,13 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :None
5
+
6
+ def index
7
+ "Hello, World!"
8
+ end
9
+ end
10
+
11
+ Ramaze::Global.sourcereload = false
12
+ Ramaze::Global.sessions = false
13
+ Ramaze::Log.loggers = []
@@ -0,0 +1,9 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ def index
5
+ "Hello, World!"
6
+ end
7
+ end
8
+
9
+ Ramaze::Log.loggers = []
@@ -0,0 +1,10 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ def index
5
+ "Hello, World!"
6
+ end
7
+ end
8
+
9
+ Ramaze::Log.loggers = []
10
+ Ramaze::Global.sessions = false
@@ -0,0 +1,9 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :None
5
+
6
+ def index
7
+ "Hello, World!"
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ def index
5
+ "Hello, World!"
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Amrita2
5
+
6
+ def index
7
+ @data = { :hello => "Hello, World!" }
8
+ %q[
9
+ <<html<
10
+ <<body<
11
+ <<%<
12
+ <% 10.times do %>
13
+ <span><%= $_[:hello] %></span>
14
+ <% end %>
15
+ ]
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Builder
5
+
6
+ def index
7
+ @hello = "Hello, World!"
8
+ %q[
9
+ xml.html {|h| h.body {|b| 10.times { b.span @hello } }}
10
+ ]
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Erubis
5
+
6
+ def index
7
+ @hello = "Hello, World!"
8
+ '<html><body><% 10.times do %><span><%= @hello %></span><% end %></body></html>'
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Ezamar
5
+
6
+ def index
7
+ @hello = "Hello, World!"
8
+ '<html><body><? 10.times do ?><span>#{@hello}</span><?r end ?></body></html>'
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Haml
5
+
6
+ def index
7
+ @hello = "Hello, World!"
8
+ %{
9
+ %html
10
+ %body
11
+ - 10.times do
12
+ %span= @hello
13
+ }
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Liquid
5
+
6
+ def index
7
+ @hash = {
8
+ :hello => "Hello, World!",
9
+ :counter => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
10
+ }
11
+ '<html><body>{% for i in counter %}<span>{{hello}}</span>{% endfor %}</body></html>'
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Markaby
5
+ helper :markaby
6
+
7
+ def index
8
+ @hello = "Hello, World!"
9
+ mab { html { body { 10.times { span @hello } } } }
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Nagoro
5
+
6
+ def index
7
+ @hello = "Hello, World!"
8
+ '<html><body><span times=10>#{@hello}</span></body></html>'
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :RedCloth
5
+ layout :layout
6
+
7
+ def index
8
+ @hello = "Hello, World!"
9
+ '<% 10.times do %> %<%= @hello %>% <% end %>'
10
+ end
11
+
12
+ def layout
13
+ '<html><body><%= @content %></body></html>'
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ require 'ramaze'
2
+
3
+ class MainController < Ramaze::Controller
4
+ engine :Tenjin
5
+
6
+ def index
7
+ @context = {:hello => "Hello, World!"}
8
+ '<html><body><?rb 10.times do ?><span>${@hello}</span><?rb end ?></body></html>'
9
+ end
10
+ end