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,44 @@
1
+ module Ramaze
2
+ module Helper
3
+ module Ultraviolet
4
+ trait :ultraviolet => {
5
+ :output => 'xhtml',
6
+ :syntax => nil, # syntax_name, nil|false indicates automatic detection
7
+ :line_numbers => false,
8
+ :style => 'classic', # render_style
9
+ :headers => false, # ouput document with all headers
10
+ }
11
+
12
+ # Parse and output the file at the given path.
13
+ # Please head over to the Ultraviolet documentation for more information
14
+ # on possible options.
15
+ def ultraviolet(path, options = {})
16
+ o = ancestral_trait[:ultraviolet].merge(options)
17
+ output, syntax, lines, style, headers =
18
+ o.values_at(:output, :syntax, :line_numbers, :style, :headers)
19
+
20
+ syntax ||= Uv.syntax_for_file(path).first.first
21
+ code = File.read(path)
22
+
23
+ p [code, output, syntax, lines, style, headers]
24
+ Uv.parse(code, output, syntax, lines, style, headers)
25
+ end
26
+
27
+ # Return absolute path to the css of given name.
28
+ #
29
+ # Usually this will point to somewhere in the gem tree.
30
+ #
31
+ # It seems like Uv will add support for user-defined PATH in the future,
32
+ # so we will, to be future-proof, traverse the Uv.path even though it
33
+ # currently will only have one directory.
34
+
35
+ def ultraviolet_css(theme)
36
+ Uv.path.each do |path|
37
+ Dir[path/"render/xhtml/files/css/*.css"].each do |css|
38
+ return css if File.basename(css, '.css') == theme
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,110 @@
1
+ module Ramaze
2
+ module Helper
3
+
4
+ # This helper provides a convenience wrapper for handling authentication
5
+ # and persistence of users.
6
+ #
7
+ # Example:
8
+ #
9
+ # class MainController < Ramaze::Controller
10
+ # def index
11
+ # if user?
12
+ # A('login', :href => Rs(:login))
13
+ # else
14
+ # "Hello #{user.name}"
15
+ # end
16
+ # end
17
+ #
18
+ # def login
19
+ # user_login if reuqest.post?
20
+ # end
21
+ # end
22
+
23
+ module User
24
+ # return existing or instantiate User::Wrapper
25
+ def user
26
+ model = ancestral_trait[:user_model] ||= ::User
27
+ callback = ancestral_trait[:user_callback] ||= nil
28
+ STATE[:user] ||= Wrapper.new(model, callback)
29
+ end
30
+
31
+ # shortcut for user.user_login but default argument are request.params
32
+
33
+ def user_login(creds = request.params)
34
+ user._login(creds)
35
+ end
36
+
37
+ # shortcut for user.user_logout
38
+
39
+ def user_logout
40
+ user._logout
41
+ end
42
+
43
+ def logged_in?
44
+ user._logged_in?
45
+ end
46
+
47
+ # Wrapper for the ever-present "user" in your application.
48
+ # It wraps around an arbitrary instance and worries about authentication
49
+ # and storing information about the user in the session.
50
+ #
51
+ # In order to not interfere with the wrapped instance/model we start our
52
+ # methods with an underscore.
53
+ # Suggestions on improvements as usual welcome.
54
+ class Wrapper < BlankSlate
55
+ attr_accessor :_model, :_callback, :_user
56
+
57
+ def initialize(model, callback)
58
+ @_model, @_callback = model, callback
59
+ @_user = nil
60
+ _login
61
+ end
62
+
63
+ def _login(creds = _persistence)
64
+ if @_user = _would_login?(creds)
65
+ self._persistence = creds
66
+ end
67
+ end
68
+
69
+ # The callback should return an instance of the user, otherwise it
70
+ # should answer with nil.
71
+ #
72
+ # This will not actually login, just check whether the credentials
73
+ # would result in a user.
74
+ def _would_login?(creds)
75
+ if c = @_callback
76
+ c.call(creds)
77
+ elsif _model.respond_to?(:authenticate)
78
+ _model.authenticate(creds)
79
+ else
80
+ Log.warn("Helper::User has no callback and %p doesn't respond to #authenticate" % _model)
81
+ nil
82
+ end
83
+ end
84
+
85
+ def _logout
86
+ _persistence.clear
87
+ STATE[:user] = nil
88
+ end
89
+
90
+ def _logged_in?
91
+ !!_user
92
+ end
93
+
94
+ def _persistence=(creds)
95
+ Current.session[:USER] = creds
96
+ end
97
+
98
+ def _persistence
99
+ Current.session[:USER] || {}
100
+ end
101
+
102
+ # Refer everything not known
103
+ def method_missing(meth, *args, &block)
104
+ return unless _user
105
+ _user.send(meth, *args, &block)
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,23 @@
1
+ module Ramaze::Helper
2
+ module XHTML
3
+ def css(name, media = 'screen', options = {})
4
+ if options.empty?
5
+ "<link rel='stylesheet' href='/css/#{name}.css' type='text/css' media='#{media}' />"
6
+ elsif options[:only] == 'IE'
7
+ "<!--[if IE]>#{css(name, media)}<![endif]-->"
8
+ end
9
+ end
10
+
11
+ def css_for(*names)
12
+ names.flatten.map{|name| css(name) }.join("\n")
13
+ end
14
+
15
+ def js(name)
16
+ "<script src='/js/#{name}.js' type='text/javascript'></script>"
17
+ end
18
+
19
+ def js_for(*names)
20
+ names.flatten.map{|name| js(name) }.join("\n")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,79 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'ramaze/trinity'
5
+
6
+ module Ramaze
7
+
8
+ # A module used by the Templates and the Controllers
9
+ # it provides both Ramaze::Trinity (request/response/session)
10
+ # and also a helper method, look below for more information about it
11
+
12
+ module Helper
13
+ LOOKUP = Set.new
14
+ PATH = ['']
15
+ trait :ignore => [
16
+ /#{Regexp.escape(File.expand_path(BASEDIR/'../spec/ramaze/helper/'))}\//
17
+ ]
18
+
19
+ module Methods
20
+ def self.included other
21
+ other.send :extend, Trinity
22
+ other.send :extend, Methods
23
+ other.send :include, Trinity
24
+ super
25
+ end
26
+
27
+ def self.extend_object other
28
+ other.send :extend, Trinity
29
+ super
30
+ end
31
+
32
+ # This loads the helper-files from /ramaze/helper/helpername.rb and
33
+ # includes it into Ramaze::Template (or wherever it is called)
34
+ #
35
+ # Usage:
36
+ # helper :redirect, :link
37
+
38
+ def helper(*syms)
39
+ syms.each do |sym|
40
+ name = sym.to_s
41
+ if mod = find_helper(name)
42
+ use_helper(mod)
43
+ else
44
+ if require_helper(name)
45
+ redo
46
+ else
47
+ raise LoadError, "#{name} not found"
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def find_helper(name)
56
+ name = name.to_s.camel_case
57
+ ramaze_helper_consts = ::Ramaze::Helper.constants.grep(/^#{name}$/i)
58
+ if mod_name = ramaze_helper_consts.first
59
+ ::Ramaze::Helper.const_get(mod_name)
60
+ end
61
+ end
62
+
63
+ def require_helper(name)
64
+ paths = (PATH + [Global.root, BASEDIR/:ramaze]).join(',')
65
+ glob = "{#{paths}}/helper/#{name}.{so,bundle,rb}"
66
+ files = Dir[glob]
67
+ ignore = Helper.trait[:ignore]
68
+ files.reject!{|f| ignore.any?{|i| f =~ i }}
69
+ raise LoadError, "#{name} not found" unless file = files.first
70
+ require(file)
71
+ end
72
+
73
+ def use_helper(mod)
74
+ include mod
75
+ extend mod
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'swiftcore/Analogger/Client'
5
+
6
+ module Ramaze
7
+ module Logger
8
+
9
+ # Informer for the Swiftcore Analogger logging system.
10
+ #
11
+ # You can find it at http://analogger.swiftcore.org and install with
12
+ # gem install analogger
13
+
14
+ class Analogger < ::Swiftcore::Analogger::Client
15
+ include Logging
16
+
17
+ # identifier for your application
18
+ trait :name => 'walrus'
19
+
20
+ # Host analogger runs on
21
+ trait :host => '127.0.0.1'
22
+
23
+ # Port analogger runs on
24
+ trait :port => 6766
25
+
26
+ # Create a new instance, parameters default to the traits.
27
+
28
+ def initialize(name = class_trait[:name], host = class_trait[:host], port = class_trait[:port])
29
+ super
30
+ end
31
+
32
+ # integration to Logging
33
+
34
+ def log(tag, *args)
35
+ log(tag, args.join("\n"))
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'ruby-growl'
5
+
6
+ module Ramaze
7
+ module Logger
8
+
9
+ # Informer for the growl notification system on OSX.
10
+
11
+ class Growl < ::Growl
12
+
13
+ trait :defaults => {
14
+ :name => 'walrus',
15
+ :host => 'localhost',
16
+ :password => 'walrus',
17
+ :all_notifies => %w[error warn debug info dev],
18
+ :default_notifies => %w[error warn info]
19
+ }
20
+
21
+ # Takes the options from the default trait for merging.
22
+
23
+ def initialize(options = {})
24
+ options = class_trait[:defaults].merge(options).values_at(:host, :name, :all_notifies, :default_notifies, :password)
25
+ super(*options)
26
+ end
27
+
28
+ # integration to Logging
29
+
30
+ def log(tag, *args)
31
+ notify(tag.to_s, Time.now.strftime("%X"), args.join("\n")[0..100])
32
+ rescue Errno::EMSGSIZE
33
+ # Send size was to big (not really), ignore
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ module Logger
6
+
7
+ # Bundles different informer instances and sends incoming messages to each.
8
+ # This is the default with Informer as only member.
9
+
10
+ class LogHub
11
+ include Logging
12
+
13
+ attr_accessor :loggers
14
+ attr_accessor :ignored_tags
15
+
16
+ # Takes a list of instances or classes (which will be initialized) and that
17
+ # are added to @loggers. All messages are then sent to each member.
18
+
19
+ def initialize(*loggers)
20
+ @loggers = loggers
21
+ @ignored_tags = Set.new
22
+ @loggers.map! do |logger|
23
+ next(nil) if logger == self
24
+ logger.is_a?(Class) ? logger.new : logger
25
+ end
26
+ @loggers.uniq!
27
+ @loggers.compact!
28
+ end
29
+
30
+ # integration to Logging
31
+
32
+ def log(tag, *args)
33
+ return if @ignored_tags.include?(tag)
34
+ @loggers.each do |logger|
35
+ logger.log(tag, *args)
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,128 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ module Logger
6
+
7
+ # A minimal logger for Ramaze, supports files, CLI, colors and some
8
+ # customization.
9
+
10
+ class Informer
11
+ include Logging
12
+
13
+ attr_accessor :out, :colorize, :log_levels
14
+
15
+ # Should Ramaze try to use colors?
16
+ trait :colorize => true
17
+
18
+ # parameter for Time.now.strftime
19
+ trait :timestamp => "%Y-%m-%d %H:%M:%S"
20
+
21
+ # This is how the final output is arranged.
22
+ trait :format => "[%time] %prefix %text"
23
+
24
+ # Which tag should be in what color
25
+ COLORS = {
26
+ :dev => :blue,
27
+ :debug => :yellow,
28
+ :info => :green,
29
+ :warn => :red,
30
+ :error => :red,
31
+ }
32
+
33
+ # Create a new instance of Informer.
34
+ # You can spcify
35
+ #
36
+ # Examples:
37
+ # Informer.new #=> logs to stdout with all levels being
38
+ # shown.
39
+ # Informer.new($stderr) #=> same, but to stderr
40
+ # Informer.new("foo.log") #=> same, but logs to the file foo.log
41
+ # (or creates it if it doesn't exist yet)
42
+ # Informer.new($stdout, [:info]) #=> show only #info messages to stdout.
43
+
44
+ def initialize(out = $stdout, log_levels = [:debug, :error, :info, :warn])
45
+ @colorize = false
46
+
47
+ @out =
48
+ case out
49
+ when STDOUT, :stdout, 'stdout'
50
+ $stdout
51
+ when STDERR, :stderr, 'stderr'
52
+ $stderr
53
+ when IO
54
+ out
55
+ else
56
+ if out.respond_to?(:puts)
57
+ out
58
+ else
59
+ File.open(out.to_s, 'ab+')
60
+ end
61
+ end
62
+
63
+ if @out.respond_to?(:tty?) and class_trait[:colorize]
64
+ @colorize = @out.tty?
65
+ end
66
+
67
+ @log_levels = log_levels
68
+ end
69
+
70
+ # Close the file we log to if it isn't closed already.
71
+
72
+ def shutdown
73
+ if @out.respond_to?(:close)
74
+ Log.debug("close, #{@out.inspect}")
75
+ @out.close
76
+ end
77
+ end
78
+
79
+ # Integration to Logging.
80
+
81
+ def log tag, *messages
82
+ return if closed? || !@log_levels.include?(tag)
83
+ messages.flatten!
84
+
85
+ prefix = tag.to_s.upcase.ljust(5)
86
+
87
+ if @colorize
88
+ color = COLORS[tag] ||= :white
89
+ prefix.replace prefix.send(color)
90
+ end
91
+
92
+ messages.each do |message|
93
+ @out.puts(log_interpolate(prefix, message))
94
+ end
95
+
96
+ @out.flush if @out.respond_to?(:flush)
97
+ end
98
+
99
+ # Takes the prefix (tag), text and timestamp and applies it to
100
+ # the :format trait.
101
+
102
+ def log_interpolate prefix, text, time = timestamp
103
+ message = class_trait[:format].dup
104
+
105
+ vars = { '%time' => time, '%prefix' => prefix, '%text' => text }
106
+ vars.each{|from, to| message.gsub!(from, to) }
107
+
108
+ message
109
+ end
110
+
111
+ # This uses Global.inform_timestamp or a date in the format of
112
+ # %Y-%m-%d %H:%M:%S
113
+ # # => "2007-01-19 21:09:32"
114
+
115
+ def timestamp
116
+ mask = class_trait[:timestamp]
117
+ Time.now.strftime(mask || "%Y-%m-%d %H:%M:%S")
118
+ end
119
+
120
+ # is @out closed?
121
+
122
+ def closed?
123
+ @out.respond_to?(:closed?) and @out.closed?
124
+ end
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,28 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ module Logger
6
+
7
+ # Informer for the Knotify notfication system used on KDE.
8
+ # Doesn't need any special libraries.
9
+
10
+ class Knotify
11
+ include Logging
12
+
13
+ trait :present => 16
14
+
15
+ # Please see for more information on the API used here:
16
+ # http://lukeplant.me.uk/articles.php?id=3
17
+
18
+ def log(tag, *messages)
19
+ present = class_trait[:present]
20
+ tag = tag.to_s.capitalize
21
+ messages.flatten.each do |message|
22
+ system(%{dcop knotify default notify Ramaze "#{tag}" "#{message}" '' '' #{present} 0})
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'logger'
5
+
6
+ module Ramaze
7
+ module Logger
8
+
9
+ # Informer for the Stdlib Logger
10
+
11
+ class Logger < ::Logger
12
+
13
+ # integration to Logging
14
+
15
+ def log(tag, *args)
16
+ __send__(tag, args.join("\n"))
17
+ end
18
+
19
+ # Stub for compatibility
20
+ def dev(*args)
21
+ debug(*args)
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,89 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+
6
+ # This module provides a basic skeleton for your own loggers to be compatible.
7
+ # The minimal usage is like this:
8
+ #
9
+ # class MyLogger
10
+ # include Logging
11
+ #
12
+ # def log(tag, *args)
13
+ # p tag => args
14
+ # end
15
+ # end
16
+
17
+ module Logging
18
+
19
+ # Takes the tag (:warn|:debug|:error|:info) and the name of a method to be
20
+ # called upon elements of msgs that don't respond to :to_str
21
+ # Goes on and sends the tag and transformed messages each to the #log method.
22
+ # If you include this module you have to define #log or it will raise.
23
+
24
+ def tag_log(tag, meth, *msgs)
25
+ msgs.each do |msg|
26
+ string = (msg.respond_to?(:to_str) ? msg : msg.send(meth))
27
+ log(tag, string)
28
+ end
29
+ end
30
+
31
+ # Converts everything given to strings and passes them on with :info
32
+
33
+ def info(*objects)
34
+ tag_log(:info, :to_s, *objects)
35
+ end
36
+
37
+ # Converts everything given to strings and passes them on with :warn
38
+
39
+ def warn(*objects)
40
+ tag_log(:warn, :to_s, *objects)
41
+ end
42
+
43
+ # inspects objects if they are no strings. Tag is :debug
44
+
45
+ def debug(*objects)
46
+ tag_log(:debug, :inspect, *objects)
47
+ end
48
+
49
+ # inspects objects if they are no strings. Tag is :dev
50
+
51
+ def dev(*objects)
52
+ tag_log(:dev, :inspect, *objects)
53
+ end
54
+
55
+ alias << debug
56
+
57
+ # Takes either an Exception or just a String, formats backtraces to be a bit
58
+ # more readable and passes all of this on to tag_log :error
59
+
60
+ def error(ex)
61
+ if ex.respond_to?(:exception)
62
+ message = [ex.backtrace].flatten[0..Global.backtrace_size]
63
+ message.map{|m| m.to_s.gsub(/^#{Regexp.escape(Dir.pwd)}/, '.') }
64
+ message.unshift(ex.inspect)
65
+ else
66
+ message = ex.to_s
67
+ end
68
+ tag_log(:error, :to_s, *message)
69
+ end
70
+
71
+ # raises
72
+
73
+ def log(*args)
74
+ raise "#log should be implemented by an instance including this module (#{self})"
75
+ end
76
+
77
+ # nothing
78
+
79
+ def shutdown
80
+ end
81
+
82
+ # stub for WEBrick
83
+
84
+ def debug?
85
+ false
86
+ end
87
+ end
88
+
89
+ end
@@ -0,0 +1,51 @@
1
+ # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
+ # Copyright (c) 2008 rob@rebeltechnologies.nl
3
+ # All files in this distribution are subject to the terms of the Ruby license.
4
+
5
+ require 'syslog'
6
+
7
+ # Add aliases for the levelnames used by Ramaze logging
8
+ module Syslog
9
+ alias dev debug
10
+ alias warn warning
11
+ alias error err
12
+ module_function :dev, :warn, :error
13
+ end
14
+
15
+ module Ramaze
16
+ module Logger
17
+ # Logger class for writing to syslog. It is a *very* thin wrapper
18
+ # around the Syslog library.
19
+ class Syslog
20
+ include Logging
21
+
22
+ # Open the syslog library, if it is allready open, we reopen it using the
23
+ # new argument list. The argument list is passed on to the Syslog library
24
+ # so please check that, and man syslog for detailed information.
25
+ # There are 3 parameters:
26
+ #
27
+ # ident: The identification used in the log file, defaults to $0
28
+ # options: defaults to Syslog::LOG_PID | Syslog::LOG_CONS
29
+ # facility: defaults to Syslog::LOG_USER
30
+ #
31
+ def initialize( *args )
32
+ ::Syslog.close if ::Syslog.opened?
33
+ ::Syslog.open( *args )
34
+ end
35
+
36
+ # just sends all messages received to ::Syslog
37
+ # We simply return if the log was closed for some reason, this behavior
38
+ # was copied from Informer. We do not handle levels here. This will
39
+ # be done by te syslog daemon based on it's configuration.
40
+ def log(tag, *messages)
41
+ return if !::Syslog.opened?
42
+ ::Syslog.send(tag, *messages)
43
+ end
44
+
45
+ # Has to call the modules singleton-method.
46
+ def inspect
47
+ ::Syslog.inspect
48
+ end
49
+ end
50
+ end
51
+ end