ramaze 0.3.9.1 → 2008.06

Sign up to get free protection for your applications and to get access to all the features.
Files changed (400) hide show
  1. data/{doc/README → README.markdown} +78 -32
  2. data/Rakefile +53 -50
  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 +32 -122
  22. data/cache.yaml +7 -0
  23. data/doc/AUTHORS +26 -22
  24. data/doc/CHANGELOG +16720 -3907
  25. data/doc/INSTALL +77 -19
  26. data/doc/LEGAL +0 -4
  27. data/doc/meta/announcement.txt +43 -54
  28. data/doc/meta/configuration.txt +3 -2
  29. data/doc/readme_chunks/examples.txt +2 -2
  30. data/doc/readme_chunks/installing.txt +66 -20
  31. data/doc/tutorial/todolist.html +338 -520
  32. data/doc/tutorial/todolist.mkd +36 -2
  33. data/examples/{auth → app/auth}/auth.rb +0 -0
  34. data/examples/{auth → app/auth}/template/layout.haml +0 -0
  35. data/examples/{auth → app/auth}/template/login.haml +0 -0
  36. data/examples/{blog → app/blog}/README +0 -0
  37. data/examples/{blog → app/blog}/controller/main.rb +1 -1
  38. data/examples/{blog → app/blog}/model/entry.rb +1 -1
  39. data/examples/{blog → app/blog}/public/styles/blog.css +0 -0
  40. data/examples/{blog → app/blog}/spec/blog.rb +2 -2
  41. data/examples/{blog → app/blog}/start.rb +0 -0
  42. data/examples/{blog → app/blog}/view/edit.xhtml +0 -0
  43. data/examples/{blog → app/blog}/view/index.xhtml +0 -0
  44. data/examples/{blog → app/blog}/view/layout.xhtml +0 -0
  45. data/examples/{blog → app/blog}/view/new.xhtml +0 -0
  46. data/examples/app/chat/model/history.rb +36 -0
  47. data/examples/app/chat/model/message.rb +7 -0
  48. data/examples/app/chat/public/css/chat.css +13 -0
  49. data/examples/app/chat/public/js/chat.js +22 -0
  50. data/examples/app/chat/public/js/jquery.js +3436 -0
  51. data/examples/app/chat/start.rb +40 -0
  52. data/examples/app/chat/view/chat.xhtml +9 -0
  53. data/examples/app/chat/view/index.xhtml +7 -0
  54. data/examples/app/chat/view/layout.xhtml +13 -0
  55. data/examples/app/localization/start.rb +35 -0
  56. data/examples/{rammit → app/rammit}/spec/rammit.rb +2 -1
  57. data/examples/{rammit → app/rammit}/src/controller/main.rb +0 -0
  58. data/examples/{rammit → app/rammit}/src/controller/page.rb +0 -0
  59. data/examples/{rammit → app/rammit}/src/model.rb +0 -0
  60. data/examples/{rammit → app/rammit}/start.rb +0 -0
  61. data/examples/{rammit → app/rammit}/template/index.xhtml +0 -0
  62. data/examples/{rammit → app/rammit}/template/page/view.xhtml +0 -0
  63. data/examples/{rapaste → app/rapaste}/Rakefile +0 -1
  64. data/examples/{rapaste → app/rapaste}/controller/paste.rb +3 -3
  65. data/examples/{rapaste → app/rapaste}/model/paste.rb +0 -0
  66. data/examples/{rapaste → app/rapaste}/public/css/active4d.css +0 -0
  67. data/examples/{rapaste → app/rapaste}/public/css/all_hallows_eve.css +0 -0
  68. data/examples/{rapaste → app/rapaste}/public/css/amy.css +0 -0
  69. data/examples/{rapaste → app/rapaste}/public/css/blackboard.css +0 -0
  70. data/examples/{rapaste → app/rapaste}/public/css/brilliance_black.css +0 -0
  71. data/examples/{rapaste → app/rapaste}/public/css/brilliance_dull.css +0 -0
  72. data/examples/{rapaste → app/rapaste}/public/css/cobalt.css +0 -0
  73. data/examples/{rapaste → app/rapaste}/public/css/dawn.css +0 -0
  74. data/examples/{rapaste → app/rapaste}/public/css/display.css +0 -0
  75. data/examples/{rapaste → app/rapaste}/public/css/eiffel.css +0 -0
  76. data/examples/{rapaste → app/rapaste}/public/css/espresso_libre.css +0 -0
  77. data/examples/{rapaste → app/rapaste}/public/css/idle.css +0 -0
  78. data/examples/{rapaste → app/rapaste}/public/css/iplastic.css +0 -0
  79. data/examples/{rapaste → app/rapaste}/public/css/lazy.css +0 -0
  80. data/examples/{rapaste → app/rapaste}/public/css/mac_classic.css +0 -0
  81. data/examples/{rapaste → app/rapaste}/public/css/magicwb_amiga.css +0 -0
  82. data/examples/{rapaste → app/rapaste}/public/css/pastels_on_dark.css +0 -0
  83. data/examples/{rapaste → app/rapaste}/public/css/slush_poppies.css +0 -0
  84. data/examples/{rapaste → app/rapaste}/public/css/spacecadet.css +0 -0
  85. data/examples/{rapaste → app/rapaste}/public/css/sunburst.css +0 -0
  86. data/examples/{rapaste → app/rapaste}/public/css/twilight.css +0 -0
  87. data/examples/{rapaste → app/rapaste}/public/css/zenburnesque.css +0 -0
  88. data/examples/{rapaste → app/rapaste}/public/js/jquery.js +0 -0
  89. data/examples/{rapaste → app/rapaste}/spec/rapaste.rb +2 -2
  90. data/examples/{rapaste → app/rapaste}/start.rb +0 -0
  91. data/examples/{rapaste → app/rapaste}/view/copy.xhtml +0 -0
  92. data/examples/{rapaste → app/rapaste}/view/index.xhtml +0 -0
  93. data/examples/{rapaste → app/rapaste}/view/layout.xhtml +0 -0
  94. data/examples/{rapaste → app/rapaste}/view/list.xhtml +0 -0
  95. data/examples/{rapaste → app/rapaste}/view/search.xhtml +0 -0
  96. data/examples/{rapaste → app/rapaste}/view/view.xhtml +0 -0
  97. data/examples/{sourceview → app/sourceview}/public/coderay.css +0 -0
  98. data/examples/{sourceview → app/sourceview}/public/images/file.gif +0 -0
  99. data/examples/{sourceview → app/sourceview}/public/images/folder.gif +0 -0
  100. data/examples/{sourceview → app/sourceview}/public/images/tv-collapsable-last.gif +0 -0
  101. data/examples/{sourceview → app/sourceview}/public/images/tv-collapsable.gif +0 -0
  102. data/examples/{sourceview → app/sourceview}/public/images/tv-expandable-last.gif +0 -0
  103. data/examples/{sourceview → app/sourceview}/public/images/tv-expandable.gif +0 -0
  104. data/examples/{sourceview → app/sourceview}/public/images/tv-item-last.gif +0 -0
  105. data/examples/{sourceview → app/sourceview}/public/images/tv-item.gif +0 -0
  106. data/examples/{sourceview → app/sourceview}/public/jquery.js +0 -0
  107. data/examples/{sourceview → app/sourceview}/public/jquery.treeview.css +0 -0
  108. data/examples/{sourceview → app/sourceview}/public/jquery.treeview.js +0 -0
  109. data/examples/{sourceview → app/sourceview}/public/sourceview.js +0 -0
  110. data/examples/{sourceview → app/sourceview}/sourceview.rb +1 -1
  111. data/examples/{sourceview → app/sourceview}/template/index.haml +0 -0
  112. data/examples/{todolist → app/todolist}/README +0 -0
  113. data/examples/{todolist → app/todolist}/public/favicon.ico +0 -0
  114. data/examples/{todolist → app/todolist}/public/js/jquery.js +0 -0
  115. data/examples/{todolist → app/todolist}/public/ramaze.png +0 -0
  116. data/examples/{todolist → app/todolist}/spec/todolist.rb +2 -2
  117. data/examples/{todolist → app/todolist}/src/controller/main.rb +0 -0
  118. data/examples/{todolist → app/todolist}/src/element/page.rb +0 -0
  119. data/examples/{todolist → app/todolist}/src/model.rb +0 -0
  120. data/examples/{todolist → app/todolist}/start.rb +0 -0
  121. data/examples/{todolist → app/todolist}/template/index.xhtml +0 -0
  122. data/examples/{todolist → app/todolist}/template/new.xhtml +0 -0
  123. data/examples/{upload → app/upload}/start.rb +0 -0
  124. data/examples/{upload → app/upload}/view/index.xhtml +0 -0
  125. data/examples/{whywiki → app/whywiki}/spec/whywiki.rb +3 -3
  126. data/examples/{whywiki → app/whywiki}/start.rb +0 -0
  127. data/examples/{whywiki → app/whywiki}/template/edit.xhtml +0 -0
  128. data/examples/{whywiki → app/whywiki}/template/show.xhtml +0 -0
  129. data/examples/{wikore → app/wikore}/spec/wikore.rb +2 -2
  130. data/examples/{wikore → app/wikore}/src/controller.rb +0 -0
  131. data/examples/{wikore → app/wikore}/src/model.rb +0 -0
  132. data/examples/{wikore → app/wikore}/start.rb +0 -0
  133. data/examples/{wikore → app/wikore}/template/index.xhtml +0 -0
  134. data/examples/{wiktacular → app/wiktacular}/README +0 -0
  135. data/examples/{wiktacular → app/wiktacular}/mkd/link/2007-07-20_19-45-51.mkd +0 -0
  136. data/examples/{wiktacular → app/wiktacular}/mkd/link/current.mkd +0 -0
  137. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_16-31-33.mkd +0 -0
  138. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-21-12.mkd +0 -0
  139. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-23-10.mkd +0 -0
  140. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-45-07.mkd +0 -0
  141. data/examples/{wiktacular → app/wiktacular}/mkd/main/current.mkd +0 -0
  142. data/examples/{wiktacular → app/wiktacular}/mkd/markdown/current.mkd +0 -0
  143. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-20_16-43-46.mkd +0 -0
  144. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-20_19-43-50.mkd +0 -0
  145. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-01.mkd +0 -0
  146. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-32.mkd +0 -0
  147. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-08.mkd +0 -0
  148. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-54.mkd +0 -0
  149. data/examples/{wiktacular → app/wiktacular}/mkd/testing/current.mkd +0 -0
  150. data/examples/{wiktacular → app/wiktacular}/public/favicon.ico +0 -0
  151. data/examples/{wiktacular → app/wiktacular}/public/screen.css +0 -0
  152. data/examples/{wiktacular → app/wiktacular}/spec/wiktacular.rb +4 -5
  153. data/examples/{wiktacular → app/wiktacular}/src/controller.rb +0 -0
  154. data/examples/{wiktacular → app/wiktacular}/src/model.rb +0 -0
  155. data/examples/{wiktacular → app/wiktacular}/start.rb +0 -0
  156. data/examples/{wiktacular → app/wiktacular}/template/edit.xhtml +0 -0
  157. data/examples/{wiktacular → app/wiktacular}/template/html_layout.xhtml +0 -0
  158. data/examples/{wiktacular → app/wiktacular}/template/index.xhtml +0 -0
  159. data/examples/{wiktacular → app/wiktacular}/template/new.xhtml +0 -0
  160. data/examples/{element.rb → basic/element.rb} +0 -0
  161. data/examples/basic/gestalt.rb +27 -0
  162. data/examples/{hello.rb → basic/hello.rb} +0 -0
  163. data/examples/{layout.rb → basic/layout.rb} +0 -0
  164. data/examples/{linking.rb → basic/linking.rb} +0 -0
  165. data/examples/{simple.rb → basic/simple.rb} +3 -3
  166. data/examples/{caching.rb → helpers/cache.rb} +0 -0
  167. data/examples/helpers/form_with_sequel.rb +24 -0
  168. data/examples/helpers/httpdigest.rb +50 -0
  169. data/examples/{identity.rb → helpers/identity.rb} +0 -0
  170. data/examples/{nitro_form.rb → helpers/nitro_form.rb} +0 -0
  171. data/examples/helpers/provide.rb +23 -0
  172. data/examples/helpers/rest.rb +28 -0
  173. data/examples/helpers/simple_captcha.rb +29 -0
  174. data/examples/{css.rb → misc/css.rb} +0 -0
  175. data/examples/{facebook.rb → misc/facebook.rb} +0 -0
  176. data/examples/{memleak_detector.rb → misc/memleak_detector.rb} +0 -0
  177. data/examples/misc/nagoro_element.rb +43 -0
  178. data/examples/{ramaise.rb → misc/ramaise.rb} +0 -0
  179. data/examples/misc/rapp.rb +45 -0
  180. data/examples/misc/sequel_scaffolding.rb +34 -0
  181. data/examples/{simple_auth.rb → misc/simple_auth.rb} +0 -0
  182. data/examples/templates/template_amrita2.rb +1 -1
  183. data/examples/templates/template_erubis.rb +2 -2
  184. data/examples/templates/template_ezamar.rb +1 -1
  185. data/examples/templates/template_haml.rb +2 -2
  186. data/examples/templates/template_liquid.rb +2 -2
  187. data/examples/templates/template_markaby.rb +1 -1
  188. data/examples/templates/template_nagoro.rb +1 -1
  189. data/examples/templates/template_redcloth.rb +2 -2
  190. data/examples/templates/template_remarkably.rb +1 -1
  191. data/examples/templates/template_tenjin.rb +5 -9
  192. data/examples/templates/template_xslt.rb +1 -1
  193. data/lib/proto/public/dispatch.fcgi +0 -0
  194. data/lib/proto/public/js/jquery.js +750 -577
  195. data/lib/proto/spec/main.rb +1 -1
  196. data/lib/proto/start.ru +8 -0
  197. data/lib/proto/view/page.xhtml +13 -1
  198. data/lib/ramaze.rb +32 -15
  199. data/lib/ramaze/action.rb +18 -1
  200. data/lib/ramaze/action/render.rb +45 -17
  201. data/lib/ramaze/adapter.rb +8 -7
  202. data/lib/ramaze/adapter/base.rb +79 -13
  203. data/lib/ramaze/adapter/cgi.rb +5 -10
  204. data/lib/ramaze/adapter/ebb.rb +6 -20
  205. data/lib/ramaze/adapter/fake.rb +12 -0
  206. data/lib/ramaze/adapter/fcgi.rb +5 -11
  207. data/lib/ramaze/adapter/lsws.rb +5 -9
  208. data/lib/ramaze/adapter/mongrel.rb +5 -9
  209. data/lib/ramaze/adapter/scgi.rb +4 -8
  210. data/lib/ramaze/adapter/thin.rb +6 -11
  211. data/lib/ramaze/adapter/webrick.rb +13 -22
  212. data/lib/ramaze/cache.rb +36 -10
  213. data/lib/ramaze/cache/memcached.rb +3 -2
  214. data/lib/ramaze/contrib.rb +1 -1
  215. data/lib/ramaze/contrib/email.rb +1 -1
  216. data/lib/ramaze/contrib/file_cache.rb +1 -1
  217. data/lib/ramaze/contrib/gems.rb +79 -0
  218. data/lib/ramaze/contrib/gettext/po.rb +0 -0
  219. data/lib/ramaze/contrib/profiling.rb +1 -1
  220. data/lib/ramaze/contrib/rest.rb +14 -0
  221. data/lib/ramaze/controller.rb +45 -12
  222. data/lib/ramaze/controller/error.rb +4 -4
  223. data/lib/ramaze/controller/resolve.rb +61 -42
  224. data/lib/ramaze/current.rb +2 -2
  225. data/lib/ramaze/current/request.rb +25 -2
  226. data/lib/ramaze/current/response.rb +8 -0
  227. data/lib/ramaze/current/session.rb +64 -36
  228. data/lib/ramaze/current/session/flash.rb +14 -2
  229. data/lib/ramaze/current/session/hash.rb +3 -2
  230. data/lib/ramaze/dispatcher.rb +25 -12
  231. data/lib/ramaze/dispatcher/action.rb +12 -3
  232. data/lib/ramaze/dispatcher/directory.rb +4 -1
  233. data/lib/ramaze/dispatcher/error.rb +3 -3
  234. data/lib/ramaze/dispatcher/file.rb +11 -3
  235. data/lib/ramaze/gestalt.rb +1 -1
  236. data/lib/ramaze/helper.rb +17 -21
  237. data/lib/ramaze/helper/aspect.rb +20 -14
  238. data/lib/ramaze/helper/auth.rb +1 -1
  239. data/lib/ramaze/helper/cache.rb +3 -6
  240. data/lib/ramaze/helper/cgi.rb +6 -2
  241. data/lib/ramaze/helper/flash.rb +7 -7
  242. data/lib/ramaze/helper/form.rb +281 -0
  243. data/lib/ramaze/helper/formatting.rb +76 -0
  244. data/lib/ramaze/helper/gestalt.rb +15 -0
  245. data/lib/ramaze/helper/gravatar.rb +15 -0
  246. data/lib/ramaze/helper/httpdigest.rb +48 -0
  247. data/lib/ramaze/helper/identity.rb +87 -62
  248. data/lib/ramaze/helper/partial.rb +11 -2
  249. data/lib/ramaze/helper/redirect.rb +12 -3
  250. data/lib/ramaze/helper/rest.rb +43 -0
  251. data/lib/ramaze/helper/sendfile.rb +1 -3
  252. data/lib/ramaze/helper/sequel.rb +3 -0
  253. data/lib/ramaze/helper/simple_captcha.rb +31 -0
  254. data/lib/ramaze/helper/stack.rb +14 -5
  255. data/lib/ramaze/helper/user.rb +86 -34
  256. data/lib/ramaze/helper/xhtml.rb +23 -0
  257. data/lib/ramaze/log.rb +1 -2
  258. data/lib/ramaze/log/analogger.rb +24 -19
  259. data/lib/ramaze/log/growl.rb +24 -19
  260. data/lib/ramaze/log/hub.rb +25 -22
  261. data/lib/ramaze/log/informer.rb +104 -99
  262. data/lib/ramaze/log/knotify.rb +17 -12
  263. data/lib/ramaze/log/logger.rb +14 -8
  264. data/lib/ramaze/log/logging.rb +63 -60
  265. data/lib/ramaze/log/syslog.rb +24 -19
  266. data/lib/ramaze/log/xosd.rb +77 -71
  267. data/lib/ramaze/option.rb +153 -0
  268. data/lib/ramaze/option/dsl.rb +45 -0
  269. data/lib/ramaze/option/holder.rb +153 -0
  270. data/lib/ramaze/option/merger.rb +108 -0
  271. data/lib/ramaze/route.rb +15 -2
  272. data/lib/ramaze/setup.rb +50 -0
  273. data/lib/ramaze/snippets/binding/locals.rb +1 -1
  274. data/lib/ramaze/snippets/dictionary.rb +3 -3
  275. data/lib/ramaze/snippets/divide.rb +7 -7
  276. data/lib/ramaze/snippets/kernel/__dir__.rb +1 -1
  277. data/lib/ramaze/snippets/kernel/acquire.rb +0 -5
  278. data/lib/ramaze/snippets/metaid.rb +1 -1
  279. data/lib/ramaze/snippets/numeric/filesize_format.rb +11 -5
  280. data/lib/ramaze/snippets/object/instance_variable_defined.rb +8 -0
  281. data/lib/ramaze/snippets/object/scope.rb +1 -1
  282. data/lib/ramaze/snippets/object/thread_accessor.rb +1 -1
  283. data/lib/ramaze/snippets/ordered_set.rb +5 -1
  284. data/lib/ramaze/snippets/ramaze/deprecated.rb +7 -0
  285. data/lib/ramaze/snippets/ramaze/thread_accessor.rb +15 -1
  286. data/lib/ramaze/snippets/string/esc.rb +2 -2
  287. data/lib/ramaze/snippets/string/start_with.rb +1 -0
  288. data/lib/ramaze/snippets/string/unindent.rb +9 -1
  289. data/lib/ramaze/snippets/struct/values_at.rb +17 -1
  290. data/lib/ramaze/snippets/thread/into.rb +1 -1
  291. data/lib/ramaze/sourcereload.rb +83 -76
  292. data/lib/ramaze/spec/helper.rb +39 -26
  293. data/lib/ramaze/spec/helper/bacon.rb +5 -5
  294. data/lib/ramaze/spec/helper/mock_http.rb +1 -7
  295. data/lib/ramaze/spec/helper/pretty_output.rb +10 -2
  296. data/lib/ramaze/spec/helper/requester.rb +14 -0
  297. data/lib/ramaze/template.rb +6 -3
  298. data/lib/ramaze/template/amrita2.rb +1 -0
  299. data/lib/ramaze/template/erubis.rb +7 -1
  300. data/lib/ramaze/template/ezamar/render_partial.rb +1 -1
  301. data/lib/ramaze/template/nagoro.rb +1 -0
  302. data/lib/ramaze/template/redcloth.rb +1 -0
  303. data/lib/ramaze/template/tagz.rb +8 -8
  304. data/lib/ramaze/template/tenjin.rb +42 -2
  305. data/lib/ramaze/template/xslt.rb +4 -0
  306. data/lib/ramaze/tool/daemonize.rb +37 -0
  307. data/lib/ramaze/tool/localize.rb +142 -106
  308. data/lib/ramaze/version.rb +2 -10
  309. data/rake_tasks/conf.rake +11 -13
  310. data/rake_tasks/gem.rake +59 -37
  311. data/rake_tasks/git.rake +41 -0
  312. data/rake_tasks/maintenance.rake +263 -299
  313. data/rake_tasks/release.rake +63 -0
  314. data/rake_tasks/spec.rake +1 -1
  315. data/ramaze.gemspec +731 -0
  316. data/spec/contrib/profiling.rb +5 -2
  317. data/spec/examples/caching.rb +1 -1
  318. data/spec/examples/css.rb +1 -1
  319. data/spec/examples/element.rb +1 -1
  320. data/spec/examples/hello.rb +1 -1
  321. data/spec/examples/linking.rb +1 -1
  322. data/spec/examples/simple.rb +1 -1
  323. data/spec/examples/simple_auth.rb +1 -1
  324. data/spec/ramaze/action/cache.rb +58 -14
  325. data/spec/ramaze/action/file_cache.rb +48 -0
  326. data/spec/ramaze/action/layout.rb +2 -2
  327. data/spec/ramaze/action/render.rb +1 -2
  328. data/spec/ramaze/action/{template → view}/bar.xhtml +0 -0
  329. data/spec/ramaze/action/{template → view}/instancevars/layout.xhtml +0 -0
  330. data/spec/ramaze/action/{template → view}/other_wrapper.xhtml +0 -0
  331. data/spec/ramaze/action/{template → view}/single_wrapper.xhtml +0 -0
  332. data/spec/ramaze/action/{template → view}/sub/sub_wrapper.xhtml +0 -0
  333. data/spec/ramaze/adapter.rb +29 -2
  334. data/spec/ramaze/adapter/ebb.rb +12 -0
  335. data/spec/ramaze/cache.rb +82 -15
  336. data/spec/ramaze/controller.rb +6 -3
  337. data/spec/ramaze/controller/actionless_templates.rb +2 -2
  338. data/spec/ramaze/controller/resolve.rb +1 -1
  339. data/spec/ramaze/controller/template_resolving.rb +4 -6
  340. data/spec/ramaze/controller/{template → view}/greet.xhtml +0 -0
  341. data/spec/ramaze/controller/{template → view}/list.xhtml +0 -0
  342. data/spec/ramaze/controller/{template → view}/other/greet/other.xhtml +0 -0
  343. data/spec/ramaze/controller/{template → view}/other_wrapper.xhtml +0 -0
  344. data/spec/ramaze/error.rb +1 -1
  345. data/spec/ramaze/helper/aspect.rb +4 -4
  346. data/spec/ramaze/helper/cache.rb +56 -39
  347. data/spec/ramaze/helper/flash.rb +14 -1
  348. data/spec/ramaze/helper/form.rb +118 -0
  349. data/spec/ramaze/helper/formatting.rb +21 -0
  350. data/spec/ramaze/helper/link.rb +2 -2
  351. data/spec/ramaze/helper/pager.rb +2 -2
  352. data/spec/ramaze/helper/partial.rb +13 -1
  353. data/spec/ramaze/helper/simple_captcha.rb +22 -0
  354. data/spec/ramaze/helper/user.rb +7 -10
  355. data/spec/ramaze/helper/{template → view}/locals.xhtml +0 -0
  356. data/spec/ramaze/helper/{template → view}/loop.xhtml +0 -0
  357. data/spec/ramaze/helper/{template → view}/num.xhtml +0 -0
  358. data/spec/ramaze/helper/{template → view}/partial.xhtml +0 -0
  359. data/spec/ramaze/helper/{template → view}/recursive.xhtml +0 -0
  360. data/spec/ramaze/helper/{template → view}/recursive_local_ivars.xhtml +0 -0
  361. data/spec/ramaze/helper/{template → view}/recursive_locals.xhtml +0 -0
  362. data/spec/ramaze/helper/{template → view}/test_template.xhtml +0 -0
  363. data/spec/ramaze/localize.rb +22 -0
  364. data/spec/ramaze/log/informer.rb +10 -10
  365. data/spec/ramaze/log/syslog.rb +1 -1
  366. data/spec/ramaze/request.rb +13 -1
  367. data/spec/ramaze/request/ebb.rb +9 -0
  368. data/spec/ramaze/rewrite.rb +36 -0
  369. data/spec/ramaze/rewrite/file.css +1 -0
  370. data/spec/ramaze/route.rb +1 -0
  371. data/spec/ramaze/template.rb +5 -5
  372. data/spec/ramaze/template/amrita2.rb +1 -1
  373. data/spec/ramaze/template/builder.rb +18 -22
  374. data/spec/ramaze/template/erubis.rb +1 -1
  375. data/spec/ramaze/template/ezamar.rb +1 -1
  376. data/spec/ramaze/template/haml.rb +2 -2
  377. data/spec/ramaze/template/liquid.rb +1 -1
  378. data/spec/ramaze/template/markaby.rb +1 -1
  379. data/spec/ramaze/template/nagoro.rb +1 -1
  380. data/spec/ramaze/template/redcloth.rb +1 -1
  381. data/spec/ramaze/template/remarkably.rb +1 -1
  382. data/spec/ramaze/template/sass.rb +1 -1
  383. data/spec/ramaze/template/tagz.rb +1 -1
  384. data/spec/ramaze/template/tenjin.rb +4 -6
  385. data/spec/ramaze/template/xslt.rb +1 -1
  386. data/spec/snippets/string/unindent.rb +6 -0
  387. data/spec/snippets/struct/values_at.rb +8 -0
  388. metadata +522 -487
  389. data/doc/ProjectInfo +0 -53
  390. data/doc/migrate/1110_to_1111.txt +0 -131
  391. data/lib/ramaze/contrib/route.rb +0 -22
  392. data/lib/ramaze/global.rb +0 -116
  393. data/lib/ramaze/global/dsl.rb +0 -39
  394. data/lib/ramaze/global/globalstruct.rb +0 -147
  395. data/lib/ramaze/helper/inform.rb +0 -40
  396. data/lib/ramaze/inform.rb +0 -4
  397. data/lib/ramaze/snippets/kernel/aquire.rb +0 -1
  398. data/lib/vendor/bacon.rb +0 -323
  399. data/rake_tasks/darcs.rake +0 -5
  400. data/spec/contrib/route.rb +0 -36
@@ -16,7 +16,7 @@ module Kernel
16
16
  #
17
17
 
18
18
  def __DIR__()
19
- filename = caller[0][/(.*?):/, 1]
19
+ filename = caller[0][/^(.*):/, 1]
20
20
  File.expand_path(File.dirname(filename))
21
21
  end
22
22
  end
@@ -31,9 +31,4 @@ module Kernel
31
31
  end
32
32
  end
33
33
  end
34
-
35
- def aquire *globs
36
- warn "Kernel#aquire is being deprecated, use Kernel#acquire instead"
37
- acquire *globs
38
- end
39
34
  end
@@ -3,7 +3,7 @@
3
3
  class Object
4
4
  # The hidden singleton lurks behind everyone
5
5
  def metaclass; class << self; self; end; end
6
- def meta_eval &blk; metaclass.instance_eval &blk; end
6
+ def meta_eval &blk; metaclass.instance_eval(&blk); end
7
7
 
8
8
  # Adds methods to a metaclass
9
9
  def meta_def name, &blk
@@ -3,12 +3,18 @@
3
3
 
4
4
  class Numeric
5
5
  FILESIZE_FORMAT = [
6
- ['%.1fT', 1 << 40],
7
- ['%.1fG', 1 << 30],
8
- ['%.1fM', 1 << 20],
9
- ['%.1fK', 1 << 10],
10
- ]
6
+ ['%.1fT', 1 << 40],
7
+ ['%.1fG', 1 << 30],
8
+ ['%.1fM', 1 << 20],
9
+ ['%.1fK', 1 << 10],
10
+ ]
11
11
 
12
+ # Output this number as easily readable filesize.
13
+ # Usage:
14
+ # 100_000.filesize_format # => "97.7K"
15
+ # 100_000_000.filesize_format # => "95.4M"
16
+ # 100_000_000_000.filesize_format # => "93.1G"
17
+ # 100_000_000_000_000.filesize_format # => "90.9T"
12
18
  def filesize_format
13
19
  FILESIZE_FORMAT.each do |format, size|
14
20
  return format % (self.to_f / size) if self >= size
@@ -0,0 +1,8 @@
1
+ class Object
2
+ # Available in 1.8.6 and later.
3
+ unless method_defined?(:instance_variable_defined?)
4
+ def instance_variable_defined?(variable)
5
+ instance_variables.include?(variable.to_s)
6
+ end
7
+ end
8
+ end
@@ -1,7 +1,7 @@
1
1
  class Object
2
2
 
3
3
  # returns a new clean binding for this object
4
- # usage: eval 'self', object.scope #=> returns object
4
+ # usage: eval 'self', object.scope #=> returns object
5
5
  #
6
6
 
7
7
  def scope
@@ -1,4 +1,4 @@
1
- require(File.join(File.dirname(__FILE__), '../ramaze/thread_accessor'))
1
+ require(File.expand_path(File.join(File.dirname(__FILE__), '../ramaze/thread_accessor')))
2
2
 
3
3
  class Object
4
4
  include Ramaze::ThreadAccessor
@@ -3,7 +3,9 @@
3
3
 
4
4
  require(File.join(File.dirname(__FILE__), 'blankslate'))
5
5
 
6
+ # Basically an Set, but with Order, ain't that obivous?
6
7
  class OrderedSet < BlankSlate
8
+ # Create new instances, optionally pass the first set
7
9
  def initialize(*args)
8
10
  if args.size == 1
9
11
  @set = args.shift
@@ -16,10 +18,12 @@ class OrderedSet < BlankSlate
16
18
  @set.uniq!
17
19
  end
18
20
 
21
+ # Delegate everything, but controlled, keep elements unique.
22
+ # Warning, this is not really atomic.
19
23
  def method_missing(meth, *args, &block)
20
24
  case meth.to_s
21
25
  when /push|unshift|\<\</
22
- @set.delete *args
26
+ @set.delete(*args)
23
27
  when '[]='
24
28
  @set.map! do |e|
25
29
  if ::Array === args.last
@@ -0,0 +1,7 @@
1
+ module Ramaze
2
+ def self.deprecated(from, to = nil)
3
+ message = "%s is deprecated"
4
+ message << ", use %s instead" unless to.nil?
5
+ Log.warn(message % [from, to])
6
+ end
7
+ end
@@ -1,6 +1,15 @@
1
1
  module Ramaze
2
+
3
+ # A alike of attr_accessor and friends, but for thread variables in
4
+ # Thread::current
2
5
  module ThreadAccessor
3
- def ThreadAccessor.each(*names)
6
+
7
+ # Iterate over the names and yield accordingly.
8
+ # names are either objects responding to #to_sym or hashes.
9
+ #
10
+ # It's only used within this module for abstractin-purposes.
11
+ # Usage below.
12
+ def self.each(*names)
4
13
  names.each do |name|
5
14
  if name.respond_to?(:to_hash)
6
15
  name.to_hash.each do |key, meth|
@@ -14,17 +23,22 @@ module Ramaze
14
23
  end
15
24
  end
16
25
 
26
+ # thread_writer and thread_reader, initializer is a block that may be given
27
+ # and its result will be the new value in case the reader was never called
28
+ # before or the value wasn't set before.
17
29
  def thread_accessor(*names, &initializer)
18
30
  thread_writer(*names)
19
31
  thread_reader(*names, &initializer)
20
32
  end
21
33
 
34
+ # Simple writer accessor to Thread::current[key]=
22
35
  def thread_writer(*names)
23
36
  ThreadAccessor.each(*names) do |key, meth|
24
37
  define_method("#{meth}="){|obj| Thread.current[key] = obj }
25
38
  end
26
39
  end
27
40
 
41
+ # Reader accessor for Thread::current[key]
28
42
  def thread_reader(*names, &initializer)
29
43
  ThreadAccessor.each(*names) do |key, meth|
30
44
  if initializer
@@ -8,7 +8,6 @@ class String
8
8
  # '<div>foo bar</div>'.esc(:html)
9
9
  # 'foo bar'.esc(:uri)
10
10
  # 'foo bar'.esc(:cgi)
11
- # "foo 'bar'".esc(:sql)
12
11
 
13
12
  def escape which = :html
14
13
  case which
@@ -18,7 +17,8 @@ class String
18
17
  ::CGI.escape(self)
19
18
  when :uri
20
19
  ::URI.escape(self)
21
- when :sql # TODO - leverage DBI or something
20
+ when :sql
21
+ Ramaze::deprecated("String#escape(:sql)")
22
22
  gsub(%r/'/, "''")
23
23
  else
24
24
  raise ArgumentError, "do not know how to escape '#{ which }'"
@@ -1,5 +1,6 @@
1
1
  class String
2
2
  unless method_defined?(:start_with?)
3
+ # Compatibility with 1.9
3
4
  def start_with?(other)
4
5
  self[0, other.size] == other
5
6
  end
@@ -1,10 +1,18 @@
1
1
  class String
2
+ # Useful for writing indented String and unindent on demand, based on the
3
+ # first line with indentation.
2
4
  def unindent
3
- space = self.split("\n").find{|l| !l.strip.empty?}.to_s[/^(\s+)/, 1]
5
+ find_indent = proc{ |l| l.find{|l| !l.strip.empty?}.to_s[/^(\s+)/, 1] }
6
+
7
+ lines = self.split("\n")
8
+ space = find_indent[lines]
9
+ space = find_indent[lines.reverse] unless space
10
+
4
11
  strip.gsub(/^#{space}/, '')
5
12
  end
6
13
  alias ui unindent
7
14
 
15
+ # Destructive variant of undindent, replacing the String
8
16
  def unindent!
9
17
  self.replace unindent
10
18
  end
@@ -4,6 +4,7 @@
4
4
  # Extensions for Struct
5
5
 
6
6
  class Struct
7
+ undef values_at
7
8
 
8
9
  # Example:
9
10
  # Point = Struct.new(:x, :y)
@@ -12,12 +13,27 @@ class Struct
12
13
  # # => [10, 15]
13
14
  # point.values_at(0, 1)
14
15
  # # => [15, 10]
16
+ # point.values_at(0..1)
17
+ # # => [15, 10]
15
18
 
16
19
  def values_at(*keys)
17
20
  if keys.all?{|key| key.respond_to?(:to_int) and not key.is_a?(Symbol) }
18
21
  keys.map{|key| values[key.to_int] }
19
22
  else
20
- keys.map{|k| self[k] }
23
+ out = []
24
+
25
+ keys.each do |key|
26
+ case key
27
+ when Range
28
+ key.each do |r|
29
+ out << self[r]
30
+ end
31
+ else
32
+ out << self[key]
33
+ end
34
+ end
35
+
36
+ out
21
37
  end
22
38
  end
23
39
  end
@@ -12,7 +12,7 @@ class Thread
12
12
  Thread.current[k] = thread[k] unless k.to_s =~ /^__/
13
13
  end
14
14
 
15
- yield *args
15
+ yield(*args)
16
16
  end
17
17
  end
18
18
  end
@@ -9,139 +9,142 @@ module Ramaze
9
9
  # manner.
10
10
 
11
11
  class SourceReload
12
- attr_accessor :thread, :interval, :map
13
12
 
14
- # Reload everything which falls under this regex
15
- trait :reload_glob => Regexp.union(/^\.\//, Dir.pwd, 'ramaze')
13
+ # Called from Ramaze::startup, just assigns a new instance to
14
+ # Global.sourcreloader
15
+ def self.startup(options = {})
16
+ Thread.main[:sourcereload] = new
17
+ end
16
18
 
17
- # Take interval for files that are going to be reloaded.
19
+ def self.restart
20
+ Log.dev("Restart SourceReload")
21
+ shutdown
22
+ startup
23
+ end
18
24
 
19
- def initialize(interval = 1)
20
- @interval = interval
21
- @map, @files, @paths = [], [], []
22
- @mtimes = {}
25
+ # Maybe make this better?
26
+ def self.shutdown
27
+ new(false)
23
28
  end
24
29
 
25
- # start reloader-thread and assign it to this instance.
30
+ attr_reader :thread
31
+ attr_accessor :interval
26
32
 
27
- def start
28
- Log.dev("initialize automatic source reload every #{interval} seconds")
29
- @thread = reloader
33
+ # Setup the @mtimes hash. any new file will be assigned it's last modified
34
+ # time (mtime) so we don't reload a file when we see it the first time.
35
+ #
36
+ # The thread only runs if Global.sourcereload is set.
37
+ def initialize(interval = Global.sourcereload)
38
+ if sr = Thread.main[:sourcereload]
39
+ sr.interval = interval
40
+ else
41
+ @interval = interval
42
+ startup
43
+ end
30
44
  end
31
45
 
32
- # Takes value of Global.sourcereload and unless it's false calls #start
46
+ def startup
47
+ return unless @interval
48
+ Log.dev("Startup SourceReload")
33
49
 
34
- def self.startup(options = {})
35
- interval = Global.sourcereload
36
- instance = new(interval)
37
- Thread.main[:sourcereload] = instance
38
- instance.reload # initial scan of all files
39
- instance.start if interval
40
- end
50
+ @mtimes = Hash.new{|h,k| h[k] = mtime(k) }
41
51
 
42
- # Start reload loop in separate Thread
52
+ @thread = Thread.new{
53
+ current = Thread.current
54
+ current.priority = -1
43
55
 
44
- def reloader
45
- Thread.new do
46
- loop do
47
- reload
48
- sleep(@interval)
56
+ while iv = @interval
57
+ rotate
58
+ sleep iv
49
59
  end
50
- end
60
+ }
51
61
  end
52
62
 
53
- # One iteration of reload will look for files that changed since the last
63
+ # One iteration of rotate will look for files that changed since the last
54
64
  # iteration and will try to #safe_load it.
55
65
  # This method is quite handy if you want direct control over when your
56
- # code is reloaded
66
+ # code is reloaded.
57
67
  #
58
68
  # Usage example:
59
69
  #
60
70
  # trap :HUP do
61
71
  # Ramaze::Log.info "reloading source"
62
- # Thread.main[:sourcereload].reload
72
+ # Thread.main[:sourcereload].rotate
63
73
  # end
64
74
  #
65
75
 
66
- def reload
67
- SourceReloadHooks.before_reload
68
- all_reload_files.each do |file|
69
- mtime = mtime(file)
76
+ def rotate
77
+ before_rotation
70
78
 
71
- next if (@mtimes[file] ||= mtime) == mtime
79
+ rotation do |file|
80
+ mtime = mtime(file)
72
81
 
73
- Log.debug("reload #{file}")
74
- @mtimes[file] = mtime if safe_load(file)
82
+ if mtime > @mtimes[file]
83
+ safe_load(file)
84
+ end
75
85
  end
76
- SourceReloadHooks.after_reload
86
+
87
+ after_rotation
77
88
  end
78
89
 
79
- # Scans loaded features and paths for file-paths, filters them in the end
80
- # according to the trait[:reload_glob]
81
-
82
- def all_reload_files
83
- files = Array[$0, *$LOADED_FEATURES]
84
- paths = Array['./', *$LOAD_PATH]
85
-
86
- unless [@files, @paths] == [files, paths]
87
- @files, @paths = files.dup, paths.dup
88
-
89
- @map = files.map{|file|
90
- if Pathname.new(file).absolute?
91
- file
92
- else
93
- path = paths.find{|pa|
94
- ex = File.expand_path(pa/file)
95
- File.exists?(ex)
96
- }
97
- File.expand_path(path/file) if path
90
+ # Iterates over the $LOADED_FEATURES ($") and $LOAD_PATH ($:) and tries to
91
+ # find either absolute paths or tries to find one by combining paths and files.
92
+ # Every found file is yielded to the rotate method.
93
+
94
+ def rotation
95
+ files = Array[$0, *$LOADED_FEATURES].uniq
96
+ paths = Array['./', *$LOAD_PATH].uniq
97
+
98
+ files.each do |file|
99
+ if Pathname.new(file).absolute?
100
+ yield(file) if File.file?(file)
101
+ else
102
+ paths.each do |path|
103
+ full = File.join(path, file)
104
+ if File.file?(full)
105
+ break yield(full)
106
+ end
98
107
  end
99
- }.compact
108
+ end
100
109
  end
101
-
102
- @map.grep(class_trait[:reload_glob])
103
110
  end
104
111
 
105
112
  # Safe mtime
106
-
107
113
  def mtime(file)
108
114
  File.mtime(file)
109
115
  rescue Errno::ENOENT
110
116
  false
111
117
  end
112
118
 
113
- # A safe Kernel::load, issuing the SourceReloadHooks depending on the
114
- # result.
115
-
119
+ # A safe Kernel::load, issuing the hooks depending on the results
116
120
  def safe_load(file)
117
- SourceReloadHooks.before_safe_load(file)
121
+ before_safe_load(file)
118
122
  load(file)
119
- SourceReloadHooks.after_safe_load_succeed(file)
120
- true
123
+ after_safe_load_succeed(file)
121
124
  rescue Object => ex
122
- SourceReloadHooks.after_safe_load_failed(file, ex)
123
- false
125
+ after_safe_load_failed(file, ex)
126
+ ensure
127
+ @mtimes[file] = mtime(file)
124
128
  end
125
129
  end
126
130
 
127
131
  # Holds hooks that are called before and after #reload and #safe_load
128
132
 
129
133
  module SourceReloadHooks
130
- module_function
131
-
132
- # Overwrite to add actions before the reload cycle is started.
134
+ # Overwrite to add actions before the reload rotation is started.
133
135
 
134
- def before_reload
136
+ def before_rotation
135
137
  end
136
138
 
137
- # Overwrite to add actions after the reload cycle has ended.
139
+ # Overwrite to add actions after the reload rotation has ended.
138
140
 
139
- def after_reload
141
+ def after_rotation
140
142
  end
141
143
 
142
144
  # Overwrite to add actions before a file is Kernel::load-ed
143
145
 
144
146
  def before_safe_load(file)
147
+ Log.debug("reload #{file}")
145
148
  end
146
149
 
147
150
  # Overwrite to add actions after a file is Kernel::load-ed successfully,
@@ -151,7 +154,7 @@ module Ramaze
151
154
  Cache.compiled.clear
152
155
  Cache.resolved.clear
153
156
  Cache.action_methods.clear
154
- SourceReloadHooks.after_safe_load(file)
157
+ after_safe_load(file)
155
158
  end
156
159
 
157
160
  # Overwrite to add custom hook in addition to default Cache cleaning
@@ -166,4 +169,8 @@ module Ramaze
166
169
  Log.error(error)
167
170
  end
168
171
  end
172
+
173
+ class SourceReload
174
+ include SourceReloadHooks
175
+ end
169
176
  end