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
@@ -0,0 +1,37 @@
1
+ require 'tmpdir'
2
+
3
+ module Ramaze
4
+ def self.daemonize(runner, instruction, options = {})
5
+ puts "Instructing daemonize to: #{instruction}"
6
+ require 'daemons'
7
+
8
+ pids = File.join(Dir.tmpdir, 'ramaze.pids')
9
+ FileUtils.mkdir_p(pids)
10
+
11
+ # FIXME: there's a much better way, gotta search irc logs.
12
+ unless File.executable?(runner)
13
+ mode = File.stat(runner).mode.to_s(8)
14
+ mode[3,1] = '7'
15
+ File.chmod(mode.to_i(8), runner)
16
+ end
17
+
18
+ content = File.readlines(runner)
19
+ content.unshift('#!/usr/bin/env ruby') unless content[0] =~ /#!/
20
+ File.open(runner, 'w+'){|io| io.puts(content) }
21
+
22
+ options = {
23
+ :app_name => File.basename(File.dirname(runner)),
24
+ :ARGV => [instruction],
25
+ :script => runner,
26
+ :dir_mode => :normal,
27
+ :dir => pids,
28
+ :multiple => false,
29
+ :ontop => false,
30
+ :mode => :exec,
31
+ :backtrace => true,
32
+ :monitor => true,
33
+ }.merge(options)
34
+
35
+ Daemons.run(runner, options)
36
+ end
37
+ end
@@ -13,149 +13,185 @@ require 'ya2yaml'
13
13
  # Ramaze::Dispatcher::Action::FILTER << Ramaze::Tool::Localize
14
14
 
15
15
  module Ramaze
16
- class Tool::Localize
16
+ module Tool
17
+ class Localize
18
+
19
+ # Enable Localization
20
+ trait :enable => true
21
+
22
+ # Default language that is used if the browser don't suggests otherwise or
23
+ # the language requested is not available.
24
+ trait :default_language => 'en'
25
+
26
+ # languages supported
27
+ trait :languages => %w[ en ]
28
+
29
+ # This block should respond with the correct location of the yaml file
30
+ # for the given locale.
31
+ # Alternative is setting the value as a string that used by String#% with
32
+ # the locale as argument.
33
+ # The YAML file is used for saving and loading the localization.
34
+ #
35
+ # Example:
36
+ # trait :file => "locale/%s.yaml"
37
+ #
38
+ # Please note that giving a relative String can lead to issues when the
39
+ # application is started from another pwd.
40
+ # That is why we, by default, use a dynamic lambda and set the path
41
+ # relative to Global.root.
42
+ trait :file => lambda{|locale|
43
+ Ramaze::Global.root/"conf/locale_#{locale}.yaml"
44
+ }
45
+
46
+ # The pattern that is substituted with the translation of the current locale.
47
+ trait :regex => /\[\[(.*?)\]\]/
48
+
49
+ # Browsers may send different keys for the same language, this allows you to
50
+ # do some coercion between what you use as keys and what the browser sends.
51
+ trait :mapping => { /^en-/ => 'en', 'ja' => 'jp'}
52
+
53
+ # When this is set to false, it will not save newly collected translatable
54
+ # strings to disk. Disable this for production use, as it slows the
55
+ # application down.
56
+ trait :collect => true
57
+
58
+ class << self
59
+
60
+ include Trinity
61
+
62
+ # Enables being plugged into Dispatcher::Action::FILTER
63
+
64
+ def call(response, options = {})
65
+ return response unless trait[:enable]
66
+ return response if response.body.nil?
67
+ return response if response.body.respond_to?(:read)
68
+ response.body = localize_body(response.body, options)
69
+ response
70
+ end
17
71
 
18
- # Enable Localization
19
- trait :enable => true
72
+ # Localizes a response body. It reacts to a regular expression as given
73
+ # in trait[:regex]. Every 'entity' in it will be translated, see
74
+ # `localize` for more information.
20
75
 
21
- # Default language that is used if the browser don't suggests otherwise or
22
- # the language requested is not available.
23
- trait :default_language => 'en'
76
+ def localize_body(body, options)
77
+ locale =
78
+ if languages.include?(response["Content-Language"])
79
+ response["Content-Language"]
80
+ else
81
+ (session[:LOCALE] || set_session_locale).to_s
82
+ end
24
83
 
25
- # languages supported
26
- trait :languages => %w[ en ]
84
+ body.gsub!(trait[:regex]) do
85
+ localize($1, locale) unless $1.to_s.empty?
86
+ end
27
87
 
28
- # YAML files the localizations are saved to and loaded from, %s is
29
- # substituted by the values from trait[:languages]
30
- trait :file => 'conf/locale_%s.yaml'.freeze
88
+ store(locale, default_language) if trait[:collect]
31
89
 
32
- # The pattern that is substituted with the translation of the current locale.
33
- trait :regex => /\[\[(.*?)\]\]/
90
+ body
91
+ end
34
92
 
35
- # Browsers may send different keys for the same language, this allows you to
36
- # do some coercion between what you use as keys and what the browser sends.
37
- trait :mapping => { 'en-us' => 'en', 'ja' => 'jp'}
93
+ # Localizes a single 'entity'. If a translation in the chosen language is
94
+ # not available, it falls back to the default language.
38
95
 
39
- # When this is set to false, it will not save newly collected translatable
40
- # strings to disk. Disable this for production use, as it slows the
41
- # application down.
42
- trait :collect => true
96
+ def localize(str, locale)
97
+ dict = dictionary
98
+ dict[locale] ||= {}
99
+ dict[default_language] ||= {}
43
100
 
44
- class << self
101
+ trans = dict[locale][str] ||= dict[default_language][str] ||= str
102
+ rescue Object => ex
103
+ Log.error(ex)
104
+ str
105
+ end
45
106
 
46
- include Trinity
107
+ # Sets session[:LOCALE] to one of the languages defined in the dictionary.
108
+ # It first tries to honor the browsers accepted languages and then falls
109
+ # back to the default language.
47
110
 
48
- # Enables being plugged into Dispatcher::Action::FILTER
111
+ def set_session_locale
112
+ session[:LOCALE] = default_language
113
+ accepted_langs = request.locales << default_language
49
114
 
50
- def call(response, options = {})
51
- return response unless trait[:enable]
52
- return response if response.body.nil?
53
- return response if response.body.respond_to?(:read)
54
- response.body = localize_body(response.body, options)
55
- response
56
- end
115
+ mapping = trait[:mapping]
116
+ dict = dictionary
57
117
 
58
- # Localizes a response body. It reacts to a regular expression as given
59
- # in trait[:regex]. Every 'entity' in it will be translated, see
60
- # `localize` for more information.
118
+ accepted_langs.each do |language|
119
+ if mapped = mapping.find{|k,v| k === language }
120
+ language = mapped[1]
121
+ end
61
122
 
62
- def localize_body(body, options)
63
- locale =
64
- if trait[:languages].include?(response["Content-Language"])
65
- response["Content-Language"]
66
- else
67
- (session[:LOCALE] || set_session_locale).to_s
123
+ if dict.key?(language)
124
+ session[:LOCALE] = language
125
+ break
126
+ end
68
127
  end
69
128
 
70
- body.gsub!(trait[:regex]) do
71
- localize($1, locale) unless $1.to_s.empty?
129
+ session[:LOCALE]
72
130
  end
73
131
 
74
- store(locale, trait[:default_language]) if trait[:collect]
132
+ # Returns the dictionary used for translation.
75
133
 
76
- body
77
- end
134
+ def dictionary
135
+ trait[:languages].map! {|x| x.to_s }.uniq!
136
+ trait[:dictionary] || load(*languages)
137
+ end
78
138
 
79
- # Localizes a single 'entity'. If a translation in the chosen language is
80
- # not available, it falls back to the default language.
139
+ # Load given locales from disk and save it into the dictionary.
81
140
 
82
- def localize(str, locale)
83
- default_language = trait[:default_language]
84
- dict = dictionary
85
- dict[locale] ||= {}
86
- dict[default_language] ||= {}
141
+ def load(*locales)
142
+ Log.debug "loading locales: #{locales.inspect}"
87
143
 
88
- trans = dict[locale].fetch(str, dict[default_language][str])
89
- dict[locale][str] ||= trans
90
- dict[default_language][str] ||= trans
144
+ dict = trait[:dictionary] || {}
91
145
 
92
- trans
93
- rescue Object => ex
94
- Log.error(ex)
95
- str
96
- end
146
+ locales.each do |locale|
147
+ begin
148
+ dict[locale] = YAML.load_file(file_for(locale))
149
+ rescue Errno::ENOENT
150
+ dict[locale] = {}
151
+ end
152
+ end
97
153
 
98
- # Sets session[:LOCALE] to one of the languages defined in the dictionary.
99
- # It first tries to honor the browsers accepted languages and then falls
100
- # back to the default language.
154
+ trait[:dictionary] = dict
155
+ end
101
156
 
102
- def set_session_locale
103
- session[:LOCALE] = trait[:default_language]
104
- accepted_langs = request.http_accept_language rescue 'en'
157
+ # Stores given locales from the dictionary to disk.
105
158
 
106
- mapping = trait[:mapping]
107
- dict = dictionary
108
- accepted_langs = accepted_langs.scan(/([^,;]+)(?:;q=[^,]+)?/m)[0]
159
+ def store(*locales)
160
+ locales.uniq.compact.each do |locale|
161
+ file = file_for(locale)
162
+ data = dictionary[locale].ya2yaml
109
163
 
110
- accepted_langs.each do |language|
111
- language = mapping[language] || language
112
- if dict.key?(language)
113
- session[:LOCALE] = language
114
- break
164
+ Log.dev "saving localized to: #{file}"
165
+ File.open(file, 'w+'){|fd| fd << data }
115
166
  end
167
+ rescue Errno::ENOENT => e
168
+ Log.error e
116
169
  end
117
170
 
118
- session[:LOCALE]
119
- end
120
-
121
- # Returns the dictionary used for translation.
122
-
123
- def dictionary
124
- trait[:languages].map! {|x| x.to_s }.uniq!
125
- trait[:dictionary] || load(*trait[:languages])
126
- end
127
-
128
- # Load given locales from disk and save it into the dictionary.
129
-
130
- def load(*locales)
131
- Log.debug "loading locales: #{locales.inspect}"
171
+ # Call trait[:file] with the passed locale if it reponds to that,
172
+ # otherwise we call #to_s and % with the locale on it.
132
173
 
133
- dict = trait[:dictionary] || {}
174
+ def file_for(locale)
175
+ file_source = trait[:file]
134
176
 
135
- locales.each do |locale|
136
- begin
137
- dict[locale] = YAML.load_file(trait[:file] % locale)
138
- rescue Errno::ENOENT
139
- dict[locale] = {}
177
+ if file_source.respond_to?(:call)
178
+ file = file_source.call(locale)
179
+ else
180
+ file = file_source.to_s % locale
140
181
  end
141
182
  end
142
183
 
143
- trait[:dictionary] = dict
144
- end
184
+ # alias for trait[:languages]
145
185
 
146
- # Stores given locales from the dictionary to disk.
186
+ def languages
187
+ trait[:languages]
188
+ end
147
189
 
148
- def store(*locales)
149
- locales.uniq.compact.each do |locale|
150
- Log.dev "saving localized to: #{trait[:file] % locale}"
151
- data = dictionary[locale].ya2yaml
152
- file = trait[:file] % locale
153
- File.open(file, File::CREAT|File::TRUNC|File::WRONLY) do |fd|
154
- fd.write data
155
- end
190
+ # alias for trait[:default_language]
191
+
192
+ def default_language
193
+ trait[:default_language]
156
194
  end
157
- rescue Errno::ENOENT => e
158
- Log.error e
159
195
  end
160
196
  end
161
197
  end
@@ -1,14 +1,6 @@
1
1
  # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
- module Ramaze #:nodoc:
5
- module Version #:nodoc:
6
- MAJOR = 0
7
- MINOR = 3
8
- TINY = 9.1
9
-
10
- STRING = [MAJOR, MINOR, TINY].join('.')
11
- end
12
-
13
- VERSION = Version::STRING
4
+ module Ramaze
5
+ VERSION = "2008.06"
14
6
  end
@@ -1,17 +1,11 @@
1
- AUTHOR = "manveru"
2
- EMAIL = "m.fellinger@gmail.com"
3
- DESCRIPTION = "Ramaze is a simple and modular web framework"
4
- HOMEPATH = 'http://ramaze.rubyforge.org'
5
- BIN_FILES = %w( ramaze )
6
-
7
1
  BASEDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
8
2
 
9
- NAME = "ramaze"
10
3
  VERS = Ramaze::VERSION
11
4
  COPYRIGHT = [
12
5
  "# Copyright (c) #{Time.now.year} Michael Fellinger m.fellinger@gmail.com",
13
6
  "# All files in this distribution are subject to the terms of the Ruby license."
14
7
  ]
8
+ README = 'README.markdown'
15
9
  CLEAN.include %w[
16
10
  **/.*.sw?
17
11
  *.gem
@@ -22,22 +16,22 @@ CLEAN.include %w[
22
16
  pkg
23
17
  rdoc
24
18
  ]
25
- RDOC_OPTS = %w[
19
+ RDOC_OPTS = %W[
26
20
  --all
27
21
  --quiet
28
22
  --op rdoc
29
23
  --line-numbers
30
24
  --inline-source
31
- --main doc/README
25
+ --main #{README}
32
26
  --opname index.html
33
27
  --title "Ramaze\ documentation"
34
- --exclude "^(_darcs|spec|examples|bin|pkg)/"
28
+ --exclude "^(spec|examples|bin|pkg)/"
35
29
  --exclude "lib/proto"
36
30
  --include "doc"
37
31
  --accessor "trait"
38
32
  ]
39
- RDOC_FILES = %w[
40
- lib doc doc/README doc/FAQ doc/CHANGELOG
33
+ RDOC_FILES = %W[
34
+ lib doc #{README} doc/FAQ doc/CHANGELOG
41
35
  ]
42
36
  POST_INSTALL_MESSAGE = %{
43
37
  #{'=' * 60}
@@ -52,11 +46,13 @@ You can now do following:
52
46
  }.strip
53
47
 
54
48
  AUTHOR_MAP = {
49
+ 'andy@tinnedfruit.org' => 'Andy Smith',
55
50
  'ahoward' => 'Ara T. Howard',
56
51
  'ara.t.howard@gmail.com' => 'Ara T. Howard',
57
52
  'blueonyx@dev-area.net' => 'Martin Hilbig',
58
53
  'clive@crous.co.za' => 'Clive Crous',
59
- 'comp.lang.zenix+ramaze@gmail.com' => 'zenix',
54
+ 'comp.lang.zenix+ramaze@gmail.com' => 'Colin Shea',
55
+ 'evaryont@gmx.us' => 'Colin Shea',
60
56
  'jesusisramazing.10.pistos@geoshell.com' => 'Pistos',
61
57
  'jesuswasramazing.10.pistos@geoshell.com' => 'Pistos',
62
58
  'keita.yamaguchi@gmail.com' => 'Keita Yamaguchi',
@@ -64,9 +60,11 @@ AUTHOR_MAP = {
64
60
  'manveru@weez-int.com' => 'Michael Fellinger',
65
61
  'm.fellinger@gmail.com' => 'Michael Fellinger',
66
62
  'outtenr@gmail.com' => 'Richard Outten',
63
+ 'ryan@wonko.com' => 'Ryan Grove',
67
64
  'rff.rff@gmail.com' => 'Gabriele Renzi',
68
65
  'skaar@waste.org' => 'skaar',
69
66
  'stephan@spaceboyz.net' => 'Stephan Maka',
67
+ 'samcarr@gmail.com' => 'samcarr',
70
68
  }
71
69
 
72
70
  # * Browse and try the Examples in
@@ -1,43 +1,65 @@
1
- spec =
2
- Gem::Specification.new do |s|
3
- s.name = NAME
4
- s.version = VERS
5
- s.platform = Gem::Platform::RUBY
6
- s.has_rdoc = true
7
- s.extra_rdoc_files = RDOC_FILES
8
- s.rdoc_options += RDOC_OPTS
9
- s.summary = DESCRIPTION
10
- s.description = DESCRIPTION
11
- s.author = AUTHOR
12
- s.email = EMAIL
13
- s.homepage = HOMEPATH
14
- s.executables = BIN_FILES
15
- s.bindir = "bin"
16
- s.require_path = "lib"
17
- s.post_install_message = POST_INSTALL_MESSAGE
18
-
19
- s.add_dependency('rake', '>=0.7.3')
20
- s.add_dependency('rack', '>=0.2.0')
21
- # s.required_ruby_version = '>= 1.8.5'
22
-
23
- s.files = (RDOC_FILES + %w[Rakefile] + Dir["{examples,bin,doc,spec,lib,rake_tasks}/**/*"]).uniq
24
-
25
- # s.extensions = FileList["ext/**/extconf.rb"].to_a
26
- end
1
+ def generate_gemspec(version)
2
+ Gem::Specification.new{|s|
3
+ s.name = "ramaze"
4
+ s.version = version
5
+ s.summary = "Ramaze is a simple and modular web framework"
6
+ s.description = s.summary
7
+
8
+ s.author = "Michael 'manveru' Fellinger"
9
+ s.email = "m.fellinger@gmail.com"
10
+ s.homepage = "http://ramaze.rubyforge.org"
11
+ s.rubyforge_project = "ramaze"
12
+
13
+ s.bindir = "bin"
14
+ s.require_path = "lib"
15
+
16
+ s.executables = Dir["#{s.bindir}/*"].map{|f| File.basename(f) }
17
+ s.files = FileList.new('**/*'){|fl|
18
+ fl.exclude(/^pkg\//)
19
+ }
20
+
21
+ s.has_rdoc = true
22
+ s.post_install_message = POST_INSTALL_MESSAGE
27
23
 
28
- Rake::GemPackageTask.new(spec) do |p|
29
- p.need_tar = true
30
- p.gem_spec = spec
24
+ s.add_dependency('rack', '>=0.3.0')
25
+ }
31
26
  end
32
27
 
33
- desc "package and install ramaze"
34
- task :install do
35
- name = "#{NAME}-#{VERS}.gem"
36
- sh %{rake package}
37
- sh %{sudo gem install pkg/#{name}}
28
+ def update_gemspec(spec)
29
+ gemspec = <<-OUT.strip
30
+ Gem::Specification.new do |s|
31
+ s.name = %name%
32
+ s.version = %version%
33
+
34
+ s.summary = %summary%
35
+ s.description = %description%
36
+ s.has_rdoc = %has_rdoc%
37
+ s.author = %author%
38
+ s.email = %email%
39
+ s.homepage = %homepage%
40
+ s.executables = %executables%
41
+ s.bindir = %bindir%
42
+ s.require_path = %require_path%
43
+ s.post_install_message = %post_install_message%
44
+
45
+ %dependencies%
46
+
47
+ s.files = %files%
38
48
  end
49
+ OUT
50
+
51
+ gemspec.gsub!(/%(\w+)%/) do
52
+ case key = $1
53
+ when 'version'
54
+ spec.version.to_s.dump
55
+ when 'dependencies'
56
+ spec.dependencies.map{|dep|
57
+ "s.add_dependency('#{dep.name}', '#{dep.version_requirements}')"
58
+ }.join("\n ")
59
+ else
60
+ spec.send($1).pretty_inspect.strip
61
+ end
62
+ end
39
63
 
40
- desc "uninstall the ramaze gem"
41
- task :uninstall => [:clean] do
42
- sh %{sudo gem uninstall #{NAME}}
64
+ File.open("ramaze.gemspec", 'w+'){|file| file.puts(gemspec) }
43
65
  end