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,434 @@
1
+ =begin
2
+ This package is copyrighted free software by Tim Becker <tim@kuriositaet.de>.
3
+ You can redistribute it and/or modify it under either the terms of the GPL
4
+ (see COPYING.txt file), or the conditions below:
5
+
6
+ 1. You may make and give away verbatim copies of the source form of the
7
+ software without restriction, provided that you duplicate all of the
8
+ original copyright notices and associated disclaimers.
9
+
10
+ 2. You may modify your copy of the software in any way, provided that
11
+ you do at least ONE of the following:
12
+
13
+ a) place your modifications in the Public Domain or otherwise
14
+ make them Freely Available, such as by posting said
15
+ modifications to Usenet or an equivalent medium, or by allowing
16
+ the author to include your modifications in the software.
17
+
18
+ b) use the modified software only within your corporation or
19
+ organization.
20
+
21
+ c) rename any non-standard executables so the names do not conflict
22
+ with standard executables, which must also be provided.
23
+
24
+ d) make other distribution arrangements with the author.
25
+
26
+ 3. You may distribute the software in object code or executable
27
+ form, provided that you do at least ONE of the following:
28
+
29
+ a) distribute the executables and library files of the software,
30
+ together with instructions (in the manual page or equivalent)
31
+ on where to get the original distribution.
32
+
33
+ b) accompany the distribution with the machine-readable source of
34
+ the software.
35
+
36
+ c) give non-standard executables non-standard names, with
37
+ instructions on where to get the original software distribution.
38
+
39
+ d) make other distribution arrangements with the author.
40
+
41
+ 4. You may modify and include the part of the software into any other
42
+ software (possibly commercial). But some files in the distribution
43
+ are not written by the author, so that they are not under this terms.
44
+
45
+ They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
46
+ files under the ./missing directory. See each file for the copying
47
+ condition.
48
+
49
+ 5. The scripts and library files supplied as input to or produced as
50
+ output from the software do not automatically fall under the
51
+ copyright of the software, but belong to whomever generated them,
52
+ and may be sold commercially, and may be aggregated with this
53
+ software.
54
+
55
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
56
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
57
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
58
+ PURPOSE.
59
+ =end
60
+
61
+ require 'net/http'
62
+ require 'net/https'
63
+ require 'uri'
64
+ require 'cgi'
65
+
66
+
67
+ # Wrapper around ruby's standard net/http classes. Currently, only GET
68
+ # and POST https methods are supported. `SimpleHttp` provides class
69
+ # methods `get` and `post` to handle basic functionality. In case more
70
+ # complicated requests need to be made or default settings need to be
71
+ # overriden, it's possible to instantiate `SimpleHttp` and use instance
72
+ # methods `get` and `put`.
73
+ #
74
+ #
75
+ # Features:
76
+ #
77
+ # * Handles Redirects automatically
78
+ # * Proxy used transparently if http_proxy environment variable is
79
+ # set.
80
+ # * SSL handled automatically
81
+ # * fault tolerant uri, e.g. all of these would work:
82
+ # "www.example.com", "www.example.com/", "http://www.example.com"
83
+ #
84
+ # Some usage examples:
85
+ # # plain GET (using class methods)
86
+ # SimpleHttp.get "www.example.com"
87
+ #
88
+ # # POST using the instance methods
89
+ # uri = URI.parse "https://www.example.com/index.html"
90
+ # sh = SimpleHttp uri
91
+ # sh.set_proxy "my.proxy", "8080"
92
+ # sh.post {"query" => "query_data"}
93
+ #
94
+ # # POST using class methods.
95
+ # binaryData = getImage
96
+ # SimpleData.post binaryData, "image/png"
97
+ #
98
+ # # GET requst with a custom request_header
99
+ # sh = SimpleHttp.new "http://www.example.com"
100
+ # sh.request_headers= {'X-Special-Http-Header'=>'my-value'}
101
+ # sh.get
102
+ class SimpleHttp
103
+
104
+ VERSION='0.1.1'
105
+
106
+ attr_accessor :proxy_host, :proxy_port, :proxy_user, :proxy_pwd, :uri, :request_headers, :response_headers, :response_handlers, :follow_num_redirects
107
+
108
+ RESPONSE_HANDLERS = {
109
+ Net::HTTPResponse => lambda { |request, response, http|
110
+ response.each_header {|key, value|
111
+ http.response_headers[key]=value
112
+ }
113
+ raise response.to_s
114
+ },
115
+ Net::HTTPSuccess => lambda { |request, response, http|
116
+ response.each_header {|key, value|
117
+ http.response_headers[key]=value
118
+ }
119
+ return response.body
120
+ },
121
+ Net::HTTPRedirection => lambda { |request, response, http|
122
+ raise "too many redirects!" unless http.follow_num_redirects > 0
123
+
124
+ # create a new SimpleHttp for the location
125
+ # refered to decreasing the remaining redirects
126
+ # by one.
127
+ sh = SimpleHttp.new response['location']
128
+ sh.follow_num_redirects = http.follow_num_redirects-1
129
+
130
+ # copy the response handlers used in the current
131
+ # request in case they were non standard.
132
+ sh.response_handlers = http.response_handlers
133
+
134
+ # copy the request headers
135
+ sh.request_headers = http.request_headers
136
+ sh.response_headers = http.response_headers
137
+
138
+ # copy host and port
139
+ sh.uri.host = http.uri.host
140
+ sh.uri.port = http.uri.port
141
+
142
+ # http doesn't permit redirects for methods
143
+ # other than GET of HEAD, so we complain in case
144
+ # we get them in response to a POST request. (Or
145
+ # anything other than GET, for that matter.)
146
+
147
+ case request
148
+ when Net::HTTP::Get
149
+ sh.get
150
+ when Net::HTTP::Post
151
+ sh.post
152
+ else
153
+ raise "Not a valid HTTP method for redirection: #{request.class}"
154
+ end
155
+ }
156
+
157
+ }
158
+
159
+ # SimpleHttp can either be used directly through the +get+ and
160
+ # +post+ class methods or be instantiated, in case you need to
161
+ # to add custom behaviour to the requests.
162
+ #
163
+ # @param may be a URI or a String.
164
+ #
165
+ # Example:
166
+ # http = SimpleHttp.new(URI.parse("http://www.example.com"))
167
+ # http = SimpleHttp.new "www.example.com"
168
+ # http = SimpleHttp.new "http://usr:pwd@www.example.com:1234"
169
+ def initialize uri
170
+ set_proxy ENV['http_proxy'] if ENV['http_proxy']
171
+
172
+ if uri.class == String
173
+
174
+ unless uri =~ /^https?:\/\//
175
+ uri = "http://#{uri}"
176
+ end
177
+
178
+ uri = URI.parse uri
179
+
180
+ end
181
+ @uri = uri
182
+ if !@uri.path || "" == @uri.path.strip
183
+ @uri.path="/"
184
+ end
185
+
186
+
187
+ @request_headers={}
188
+ @response_headers={}
189
+ @response_handlers=RESPONSE_HANDLERS.clone
190
+ @follow_num_redirects=3
191
+
192
+ if @uri.user
193
+ basic_authentication @uri.user, @uri.password
194
+ end
195
+
196
+ end
197
+
198
+ #
199
+ # Provides facilities to perform http basic authentication. You
200
+ # don't need to provide +usr+ and +pwd+ if they are already included
201
+ # in the uri, i.e. http://user:password@www.example.com/
202
+ #
203
+
204
+ def basic_authentication usr, pwd
205
+ str = ["#{usr}:#{pwd}"].pack("*m")
206
+ str = "Basic #{str}"
207
+ @request_headers["Authorization"]=str
208
+ end
209
+
210
+ #
211
+ # this method can be used to register response handlers for specific
212
+ # http responses in case you need to override the default behaviour.
213
+ # Defaults are:
214
+ #
215
+ # HTTPSuccess : return the body of the response
216
+ # HTTPRedirection : follow the redirection until success
217
+ # Others : raise an exception
218
+ #
219
+ # `clazz` is the subclass of HTTPResponse (or HTTPResponse in case you
220
+ # want to define "default" behaviour) that you are registering the
221
+ # handler for.
222
+ #
223
+ # `block` is the handler itself, if a response of the appropriate class
224
+ # is received, `block` is called with three parameters: the the
225
+ # Net::HTTPRequest, the actual HTTPResponse object that was received
226
+ # and a reference to the instance of `SimpleHttp` that is executing the
227
+ # call.
228
+ #
229
+ # example:
230
+ #
231
+ # # to override the default action of following a HTTP
232
+ # # redirect, you could register the folllowing handler:
233
+ #
234
+ # sh = SimpleHttp "www.example.com"
235
+ # sh.register_response_handler Net::HTTPRedirection {|request, response, shttp|
236
+ # response['location']
237
+ # }
238
+ #
239
+
240
+ def register_response_handler clazz, &block
241
+ c = clazz
242
+ while c != Object
243
+ # completely unnecessary sanity check to make sure parameter
244
+ # `clazz` is in fact a HTTPResponse ...
245
+ if c == Net::HTTPResponse
246
+ @response_handlers[clazz]=block
247
+ return
248
+ end
249
+ c = c.superclass
250
+ end
251
+
252
+ raise "Trying to register a response handler for non-response class: #{clazz}"
253
+ end
254
+
255
+ #
256
+ # Set the proxy to use for the http request.
257
+ # Note that you don't need to set the proxy in case the
258
+ # `http_proxy` environment variable is set. To override
259
+ # previous proxy settings and connect directly, call
260
+ # `set_proxy nil`
261
+ #
262
+ # usage:
263
+ # http = SimpleHttp.new "www.example.com"
264
+ #
265
+ # http.set_proxy "http://proxy:8000"
266
+ # or:
267
+ # http.set_proxy(URI.parse("http://proxy:8000"))
268
+ # or:
269
+ # http.set_proxy 'proxy', '8000', 'my_user', 'secret'
270
+ # or:
271
+ # http.set_proxy nil # to override previous proxy
272
+ # settings and make the request directly.
273
+ #
274
+
275
+
276
+ def set_proxy proxy, port=nil, user=nil, pwd=nil
277
+
278
+
279
+ if !proxy
280
+ @proxy_host=@proxy_port=@proxy_user=@proxy_pwd=nil
281
+ return
282
+ end
283
+
284
+ if proxy.class == String
285
+ if !port && !user && !pwd
286
+ proxy = URI.parse(proxy)
287
+ else
288
+ @proxy_host= host
289
+ @proxy_port= port
290
+ @proxy_user= user
291
+ @proxy_pwd = pwd
292
+ end
293
+ end
294
+
295
+ if proxy.class == URI::HTTP
296
+ @proxy_host= proxy.host
297
+ @proxy_port= proxy.port
298
+ @proxy_user= proxy.user
299
+ @proxy_pwd = proxy.password
300
+ end
301
+ end
302
+
303
+ # interal
304
+ # Takes a HTTPResponse (or subclass) and determines how to
305
+ # handle the response. Default behaviour is:
306
+ #
307
+ # HTTPSuccess : return the body of the response
308
+ # HTTPRedirection : follow the redirect until success.
309
+ # default : raise the HTTPResponse.
310
+ #
311
+ # the default behaviour can be overidden by registering a
312
+ # response handler using the `register_response_handler` method.
313
+ #
314
+
315
+ def handle_response http_request, http_response
316
+ raise "Not a Net::HTTPResponse" unless http_response.is_a? Net::HTTPResponse
317
+
318
+ c = http_response.class
319
+ while c!=Object
320
+ # the response_handlers hash contains a handler
321
+ # for the specific response class.
322
+ if @response_handlers[c]
323
+ return @response_handlers[c].call(http_request, http_response, self)
324
+ end
325
+
326
+ c=c.superclass
327
+ end
328
+
329
+ # if we reached this place, no handler was registered
330
+ # for this response. default is to return the response.
331
+
332
+ return http_response
333
+ end
334
+
335
+ # internal
336
+ def do_http request
337
+ response = nil
338
+
339
+ http = Net::HTTP.new(@uri.host, @uri.port, proxy_host,
340
+ proxy_port, proxy_user, proxy_pwd)
341
+ http.use_ssl = @uri.scheme == 'https'
342
+
343
+ # add custom request headers.
344
+
345
+ @request_headers.each {|key,value|
346
+ request[key]=value
347
+ }
348
+
349
+ handle_response(request, http.request(request))
350
+ end
351
+
352
+ # internal
353
+ def make_query query
354
+ return query unless query && query.class == Hash
355
+ query.inject([]) do |s, (key, value)|
356
+ s + [CGI::escape(key) + "=" + CGI::escape(value)]
357
+ end.join('&')
358
+ end
359
+
360
+ # Make a simple GET request to the provided URI.
361
+ #
362
+ # Example:
363
+ # puts(SimpleHttp.get("www.example.com"))
364
+ def self.get uri, query=nil
365
+ http = SimpleHttp.new uri
366
+ http.get query
367
+ end
368
+
369
+ # Make a POST request to the provided URI.
370
+ #
371
+ # Example:
372
+ # puts(SimpleHttp.post("www.example.com", "query"=>"my_query"))
373
+ #
374
+ # Alternatively, you can post any sort of data, but will have to
375
+ # set the appriate content_type:
376
+ #
377
+ # SimpleHttp.post("http://www.example.com/", binary_data, "img/png")
378
+
379
+ def self.post uri, query=nil, content_type='application/x-www-form-urlencoded'
380
+ http = SimpleHttp.new uri
381
+ http.post query, content_type
382
+ end
383
+
384
+ # Call the +get+ method as an instance method if you need to
385
+ # modify the default behaviour of the library, or set special
386
+ # headers:
387
+ #
388
+ # http = SimpleHttp.new "www.example.com"
389
+ # http.request_headers["X-Special"]="whatever"
390
+ # str = http.get
391
+ def get query = nil
392
+ if (query = make_query query)
393
+ @uri.query = @uri.query ? @uri.query+"&"+query : query
394
+ end
395
+ full_path = @uri.path + (@uri.query ? "?#{@uri.query}" : "")
396
+
397
+ req = Net::HTTP::Get.new(full_path)
398
+ # puts Net::HTTP::Proxy(@proxy_host, @proxy_port, @proxy_user, @proxy_pwd).get(@uri)
399
+ do_http req
400
+ end
401
+
402
+ #
403
+ # Post the query data to the url.
404
+ # The body of the request remains empty if query=nil.
405
+ # In case `query` is a `Hash`, it's assumed that we are
406
+ # sending a form.
407
+ # In case `query` is a `String`, it's also assumed that a
408
+ # form is being sent, UNLESS the `content_type` parameter
409
+ # is set.
410
+ #
411
+ def post query=nil, content_type='application/x-www-form-urlencoded'
412
+ req = Net::HTTP::Post.new(@uri.path)
413
+
414
+ req.body= make_query query if query
415
+ req.content_type=content_type if query
416
+ req.content_length=query ? req.body.length : 0
417
+
418
+ do_http req
419
+ end
420
+
421
+ end
422
+
423
+ #ht = SimpleHttp.new "http://www.google.com/aldfksjaldskjfalskjfdlk"
424
+ ##ht.register_response_handler(Net::HTTPRedirection) {|req, res, ht| puts res['location']}
425
+ #puts ht.get.class
426
+ ##puts(ht.get("q"=>"bla"))
427
+ #
428
+ ##puts (SimpleHttp.get "http://www.google.com")
429
+ #
430
+ #['http://www.google.com/', 'www.google.com', 'https://www.google.com'].each {|u|
431
+ # SimpleHttp.new u
432
+ #}
433
+ ##puts ht.post
434
+
@@ -0,0 +1,14 @@
1
+ if caller
2
+ snippet = caller.grep(%r!spec/snippets/!).first.split(':').first
3
+ require File.expand_path(snippet).gsub('/spec/', '/lib/ramaze/')
4
+
5
+ if defined?(Ramaze::CoreExtensions)
6
+ Ramaze::CoreExtensions.constants.each do |const|
7
+ ext = Ramaze::CoreExtensions.const_get(const)
8
+ into = Module.const_get(const)
9
+ into.__send__(:include, ext)
10
+ end
11
+ end
12
+ end
13
+
14
+ require 'lib/ramaze/spec/helper/bacon'
@@ -0,0 +1,135 @@
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
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'ramaze'
10
+ require 'ramaze/spec/helper/bacon'
11
+
12
+ # Invoke ramaze with a set of default options suitable for testing.
13
+ # you may pass your options that will override the defaults.
14
+ class Bacon::Context
15
+ # Skip start from required files
16
+ Ramaze.trait[:started] = true
17
+
18
+ def ramaze(options = {})
19
+ options = {
20
+ :adapter => false,
21
+ :run_loose => true,
22
+ :error_page => false,
23
+ :port => 7007,
24
+ :host => '127.0.0.1',
25
+ :sourcereload => false,
26
+ :origin => :spec,
27
+ }.merge(options)
28
+
29
+ Ramaze.start!(options)
30
+ end
31
+ end
32
+
33
+ SPEC_REQUIRE_DEPENDENCY = {
34
+ 'sequel' => %w[sqlite3 sequel_model sequel_core]
35
+ }
36
+
37
+ # require each of the following and rescue LoadError, telling you why it failed.
38
+ def spec_require(*following)
39
+ following << following.map{|f| SPEC_REQUIRE_DEPENDENCY[f] }
40
+ following.flatten.uniq.compact.reverse.each do |file|
41
+ require file.to_s
42
+ end
43
+ rescue LoadError => ex
44
+ puts ex
45
+ puts "Can't run #{$0}: #{ex}"
46
+ puts "Usually you should not worry about this failure, just install the"
47
+ puts "library and try again (if you want to use that feature later on)"
48
+ exit
49
+ end
50
+
51
+ shared "http" do
52
+ require 'ramaze/spec/helper/mock_http'
53
+ extend MockHTTP
54
+ end
55
+
56
+ shared 'browser' do
57
+ require 'ramaze/spec/helper/simple_http'
58
+ require 'ramaze/spec/helper/browser'
59
+ end
60
+
61
+ shared 'requester' do
62
+ require 'ramaze/spec/helper/mock_http'
63
+ require 'ramaze/spec/helper/requester'
64
+ extend Requester
65
+ extend MockHTTP
66
+ end
67
+
68
+ # make it easier to use XPATH on the MockResponse#body - in cases you can't use
69
+ # Hpricot or if you want to keep dependencies down
70
+ shared 'xpath' do
71
+ behaves_like 'http'
72
+
73
+ require 'rexml/document'
74
+ require 'rexml/xpath'
75
+
76
+ class Rack::MockResponse
77
+ # Delegate to REXML::XPath::match
78
+ def match(xpath = '*')
79
+ REXML::XPath::match(REXML::Document.new(body), xpath)
80
+ end
81
+ alias / match
82
+ alias search match
83
+
84
+ # Delegate to REXML::XPath::first
85
+ def first(xpath = '*')
86
+ REXML::XPath::first(REXML::Document.new(body), xpath)
87
+ end
88
+ alias at first
89
+
90
+ # Delegate to REXML::XPath::each
91
+ def each(xpath = '*', &block)
92
+ REXML::XPath::each(REXML::Document.new(body), xpath, &block)
93
+ end
94
+ end
95
+
96
+ # Delegate to REXML::XPath::match
97
+ def xp_match(obj, xpath = '*', &block)
98
+ REXML::XPath::match(rexml_doc(obj), xpath, &block)
99
+ end
100
+ alias xp_search xp_match
101
+
102
+ # Delegate to REXML::XPath::first
103
+ def xp_first(obj, xpath = '*', &block)
104
+ REXML::XPath::first(rexml_doc(obj), xpath, &block)
105
+ end
106
+ alias xp_at xp_first
107
+
108
+ # Delegate to REXML::XPath::each
109
+ def xp_each(obj, xpath = '*', &block)
110
+ REXML::XPath::each(rexml_doc(obj), xpath, &block)
111
+ end
112
+
113
+ # Delegate to REXML::Document.new - return the obj if it's already an
114
+ # instance.
115
+ def rexml_doc(obj)
116
+ case obj
117
+ when REXML::Document, REXML::Element
118
+ obj
119
+ else
120
+ REXML::Document.new(obj)
121
+ end
122
+ end
123
+ end
124
+
125
+ shared 'resolve' do
126
+ # shortcut for Ramaze::Controller::resolve
127
+ def resolve(url)
128
+ Ramaze::Controller::resolve(url)
129
+ end
130
+
131
+ # Shortcut to stack on the instance of Action return from resolve
132
+ def stack(url, &block)
133
+ resolve(url).stack(&block)
134
+ end
135
+ end
@@ -0,0 +1 @@
1
+ require 'ramaze/spec/helper'
@@ -0,0 +1,109 @@
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 'yaml/store'
5
+
6
+ module Ramaze
7
+
8
+ # Namespace for Stores in Ramaze
9
+
10
+ module Store
11
+
12
+ # A simple wrapper around YAML::Store
13
+
14
+ class Default
15
+ include Enumerable
16
+
17
+ attr_accessor :db
18
+
19
+ # create a new store with a filename
20
+
21
+ def initialize filename = 'db.yaml'
22
+ FileUtils.touch(filename)
23
+ @db = YAML::Store.new(filename)
24
+ end
25
+
26
+ # yield a block in a transaction, identical to #db.transaction{}
27
+
28
+ def transaction
29
+ @db.transaction do
30
+ yield
31
+ end
32
+ end
33
+
34
+ # pass on all methods inside a transaction
35
+
36
+ def method_missing(meth, *args, &block)
37
+ read_only = (meth == :[])
38
+
39
+ @db.transaction(read_only) do
40
+ @db.send(meth, *args, &block)
41
+ end
42
+ end
43
+
44
+ # the actual content of the store in YAML format
45
+
46
+ def to_yaml
47
+ dump(:x)
48
+ end
49
+
50
+ # loads the #to_yaml
51
+
52
+ def original
53
+ YAML.load(to_yaml)
54
+ end
55
+
56
+ # available keys of the store
57
+
58
+ def keys
59
+ (original || {}).keys
60
+ end
61
+
62
+ # is the Store empty? (no keys)
63
+
64
+ def empty?
65
+ keys.empty?
66
+ end
67
+
68
+ # nondestructive merge on #original
69
+
70
+ def merge hash = {}
71
+ original.merge(hash)
72
+ end
73
+
74
+ # destructive #merge
75
+
76
+ def merge! hash = {}
77
+ hash.each do |key, value|
78
+ transaction do
79
+ @db[key] = value
80
+ end
81
+ end
82
+
83
+ original
84
+ end
85
+
86
+ # delete all entries
87
+
88
+ def clear
89
+ keys.each do |key|
90
+ delete key
91
+ end
92
+ end
93
+
94
+ # number of #keys
95
+
96
+ def size
97
+ keys.size
98
+ end
99
+
100
+ # Iterate over #original and pass the key and value to a block.
101
+
102
+ def each
103
+ original.each do |key, value|
104
+ yield key, value
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end