waves 0.7.7 → 0.8.0

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 (402) hide show
  1. data/bin/waves +17 -72
  2. data/doc/HISTORY +1 -44
  3. data/doc/README +1 -0
  4. data/doc/VERSION +1 -0
  5. data/lib/caches/file.rb +48 -0
  6. data/lib/caches/memcached.rb +40 -0
  7. data/lib/caches/simple.rb +25 -0
  8. data/lib/caches/synchronized.rb +25 -0
  9. data/lib/commands/console.rb +35 -0
  10. data/lib/commands/generate.rb +52 -0
  11. data/lib/commands/help.rb +5 -0
  12. data/lib/commands/{waves-server.rb → server.rb} +16 -3
  13. data/lib/dispatchers/base.rb +21 -20
  14. data/lib/dispatchers/default.rb +11 -63
  15. data/lib/ext/float.rb +13 -0
  16. data/lib/{utilities → ext}/hash.rb +2 -2
  17. data/lib/{utilities → ext}/integer.rb +5 -2
  18. data/lib/ext/kernel.rb +20 -0
  19. data/lib/ext/module.rb +20 -0
  20. data/lib/{utilities → ext}/object.rb +3 -5
  21. data/lib/ext/string.rb +20 -0
  22. data/lib/ext/symbol.rb +11 -0
  23. data/lib/ext/tempfile.rb +5 -0
  24. data/lib/foundations/classic.rb +64 -0
  25. data/lib/foundations/compact.rb +50 -0
  26. data/lib/helpers/basic.rb +11 -0
  27. data/lib/helpers/doc_type.rb +34 -0
  28. data/lib/helpers/extended.rb +21 -0
  29. data/lib/helpers/form.rb +3 -1
  30. data/lib/helpers/formatting.rb +3 -3
  31. data/lib/helpers/layouts.rb +37 -0
  32. data/lib/helpers/model.rb +8 -4
  33. data/lib/helpers/view.rb +2 -4
  34. data/lib/layers/inflect/english.rb +48 -5
  35. data/lib/layers/mvc.rb +18 -18
  36. data/lib/layers/mvc/controllers.rb +41 -0
  37. data/lib/layers/mvc/extensions.rb +52 -0
  38. data/lib/layers/orm/{active_record.rb → providers/active_record.rb} +9 -14
  39. data/lib/layers/orm/{active_record → providers/active_record}/migrations/empty.rb.erb +0 -0
  40. data/lib/layers/orm/{active_record → providers/active_record}/tasks/generate.rb +1 -1
  41. data/lib/layers/orm/{active_record → providers/active_record}/tasks/schema.rb +1 -1
  42. data/lib/layers/orm/{data_mapper.rb → providers/data_mapper.rb} +3 -4
  43. data/lib/layers/orm/providers/filebase.rb +25 -0
  44. data/lib/layers/orm/{sequel.rb → providers/sequel.rb} +11 -7
  45. data/lib/layers/orm/{sequel → providers/sequel}/migrations/empty.rb.erb +0 -0
  46. data/lib/layers/orm/{sequel → providers/sequel}/tasks/generate.rb +5 -3
  47. data/lib/layers/orm/{sequel → providers/sequel}/tasks/schema.rb +2 -2
  48. data/lib/{renderers → layers/renderers}/erubis.rb +10 -13
  49. data/lib/{renderers → layers/renderers}/haml.rb +27 -25
  50. data/lib/layers/renderers/markaby.rb +29 -0
  51. data/lib/matchers/accept.rb +21 -0
  52. data/lib/matchers/base.rb +30 -0
  53. data/lib/matchers/content_type.rb +17 -0
  54. data/lib/matchers/path.rb +67 -0
  55. data/lib/matchers/query.rb +21 -0
  56. data/lib/matchers/request.rb +27 -0
  57. data/lib/matchers/resource.rb +19 -0
  58. data/lib/matchers/traits.rb +19 -0
  59. data/lib/matchers/uri.rb +20 -0
  60. data/lib/renderers/mixin.rb +15 -29
  61. data/lib/resources/mixin.rb +132 -0
  62. data/lib/resources/paths.rb +34 -0
  63. data/lib/runtime/configuration.rb +55 -135
  64. data/lib/runtime/console.rb +4 -1
  65. data/lib/runtime/logger.rb +24 -48
  66. data/lib/runtime/mime_types.rb +516 -2
  67. data/lib/runtime/mocks.rb +14 -0
  68. data/lib/runtime/monitor.rb +32 -0
  69. data/lib/runtime/request.rb +107 -39
  70. data/lib/runtime/response.rb +5 -2
  71. data/lib/runtime/response_mixin.rb +43 -22
  72. data/lib/runtime/runtime.rb +67 -0
  73. data/lib/runtime/server.rb +14 -101
  74. data/lib/runtime/session.rb +4 -43
  75. data/lib/runtime/worker.rb +86 -0
  76. data/lib/servers/base.rb +42 -0
  77. data/lib/servers/mongrel.rb +13 -0
  78. data/lib/servers/webrick.rb +13 -0
  79. data/lib/tasks/gem.rb +1 -0
  80. data/lib/tasks/generate.rb +67 -62
  81. data/lib/views/errors.rb +49 -0
  82. data/lib/views/mixin.rb +34 -82
  83. data/lib/waves.rb +36 -57
  84. data/samples/blog/Rakefile +16 -5
  85. data/samples/blog/blog.db +0 -0
  86. data/samples/blog/configurations/default.rb +11 -0
  87. data/samples/blog/configurations/development.rb +9 -11
  88. data/samples/blog/configurations/production.rb +11 -15
  89. data/samples/blog/log/waves.production +3 -0
  90. data/samples/blog/models/comment.rb +9 -0
  91. data/samples/blog/models/entry.rb +17 -0
  92. data/samples/blog/public/css/site.css +13 -2
  93. data/samples/blog/public/javascript/jquery-1.2.6.min.js +32 -0
  94. data/samples/blog/resources/entry.rb +39 -0
  95. data/samples/blog/resources/map.rb +9 -0
  96. data/samples/blog/schema/migrations/001_initial_schema.rb +3 -3
  97. data/samples/blog/schema/migrations/002_add_comments.rb +2 -2
  98. data/samples/blog/startup.rb +8 -6
  99. data/samples/blog/templates/comment/add.mab +6 -4
  100. data/samples/blog/templates/comment/list.mab +4 -4
  101. data/samples/blog/templates/entry/{editor.mab → edit.mab} +7 -6
  102. data/samples/blog/templates/entry/list.mab +10 -5
  103. data/samples/blog/templates/entry/show.mab +16 -7
  104. data/samples/blog/templates/entry/summary.mab +8 -4
  105. data/samples/blog/templates/errors/not_found_404.mab +6 -1
  106. data/samples/blog/templates/layouts/default.mab +5 -3
  107. data/samples/blog/templates/waves/status.mab +85 -0
  108. data/{app → templates/classic}/Rakefile +58 -0
  109. data/templates/classic/configurations/default.rb.erb +9 -0
  110. data/{app → templates/classic}/configurations/development.rb.erb +3 -8
  111. data/{app → templates/classic}/configurations/production.rb.erb +3 -5
  112. data/templates/classic/resources/map.rb.erb +8 -0
  113. data/templates/classic/startup.rb.erb +11 -0
  114. data/{app → templates/classic}/templates/errors/not_found_404.mab +0 -0
  115. data/{app → templates/classic}/templates/errors/server_error_500.mab +0 -0
  116. data/{app → templates/classic}/templates/layouts/default.mab +0 -0
  117. data/templates/compact/startup.rb.erb +11 -0
  118. metadata +257 -610
  119. data/app/bin/waves-console +0 -4
  120. data/app/bin/waves-server +0 -4
  121. data/app/configurations/mapping.rb.erb +0 -14
  122. data/app/controllers/.gitignore +0 -0
  123. data/app/doc/.gitignore +0 -0
  124. data/app/helpers/.gitignore +0 -0
  125. data/app/lib/application.rb.erb +0 -5
  126. data/app/lib/tasks/.gitignore +0 -0
  127. data/app/log/.gitignore +0 -0
  128. data/app/models/.gitignore +0 -0
  129. data/app/public/css/.gitignore +0 -0
  130. data/app/public/flash/.gitignore +0 -0
  131. data/app/public/images/.gitignore +0 -0
  132. data/app/public/javascript/.gitignore +0 -0
  133. data/app/schema/migrations/.gitignore +0 -0
  134. data/app/startup.rb +0 -5
  135. data/app/tmp/sessions/.gitignore +0 -0
  136. data/app/views/.gitignore +0 -0
  137. data/bin/waves-console +0 -4
  138. data/bin/waves-server +0 -4
  139. data/doc/rdoc/classes/Erubis/Context.html +0 -218
  140. data/doc/rdoc/classes/Kernel.html +0 -145
  141. data/doc/rdoc/classes/Symbol.html +0 -154
  142. data/doc/rdoc/classes/Tempfile.html +0 -161
  143. data/doc/rdoc/classes/Waves.html +0 -455
  144. data/doc/rdoc/classes/Waves/Application.html +0 -371
  145. data/doc/rdoc/classes/Waves/Blackboard.html +0 -296
  146. data/doc/rdoc/classes/Waves/Configurations.html +0 -283
  147. data/doc/rdoc/classes/Waves/Configurations/Base.html +0 -209
  148. data/doc/rdoc/classes/Waves/Configurations/Default.html +0 -237
  149. data/doc/rdoc/classes/Waves/Console.html +0 -187
  150. data/doc/rdoc/classes/Waves/Controllers.html +0 -203
  151. data/doc/rdoc/classes/Waves/Controllers/Base.html +0 -151
  152. data/doc/rdoc/classes/Waves/Controllers/Mixin.html +0 -312
  153. data/doc/rdoc/classes/Waves/Dispatchers.html +0 -118
  154. data/doc/rdoc/classes/Waves/Dispatchers/Base.html +0 -198
  155. data/doc/rdoc/classes/Waves/Dispatchers/Default.html +0 -224
  156. data/doc/rdoc/classes/Waves/Dispatchers/NotFoundError.html +0 -122
  157. data/doc/rdoc/classes/Waves/Dispatchers/Redirect.html +0 -173
  158. data/doc/rdoc/classes/Waves/Foundations.html +0 -131
  159. data/doc/rdoc/classes/Waves/Foundations/Default.html +0 -179
  160. data/doc/rdoc/classes/Waves/Foundations/Simple.html +0 -167
  161. data/doc/rdoc/classes/Waves/Helpers.html +0 -176
  162. data/doc/rdoc/classes/Waves/Helpers/AssetHelper.html +0 -212
  163. data/doc/rdoc/classes/Waves/Helpers/Common.html +0 -213
  164. data/doc/rdoc/classes/Waves/Helpers/Default.html +0 -135
  165. data/doc/rdoc/classes/Waves/Helpers/Form.html +0 -201
  166. data/doc/rdoc/classes/Waves/Helpers/Formatting.html +0 -232
  167. data/doc/rdoc/classes/Waves/Helpers/Model.html +0 -194
  168. data/doc/rdoc/classes/Waves/Helpers/NumberHelper.html +0 -165
  169. data/doc/rdoc/classes/Waves/Helpers/TagHelper.html +0 -226
  170. data/doc/rdoc/classes/Waves/Helpers/UrlHelper.html +0 -242
  171. data/doc/rdoc/classes/Waves/Helpers/View.html +0 -163
  172. data/doc/rdoc/classes/Waves/Inflect/InflectorMethods.html +0 -475
  173. data/doc/rdoc/classes/Waves/Layers.html +0 -175
  174. data/doc/rdoc/classes/Waves/Layers/DefaultErrors.html +0 -161
  175. data/doc/rdoc/classes/Waves/Layers/Inflect.html +0 -119
  176. data/doc/rdoc/classes/Waves/Layers/Inflect/English.html +0 -168
  177. data/doc/rdoc/classes/Waves/Layers/Inflect/English/Rules.html +0 -112
  178. data/doc/rdoc/classes/Waves/Layers/Inflect/English/StringMethods.html +0 -194
  179. data/doc/rdoc/classes/Waves/Layers/MVC.html +0 -204
  180. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord.html +0 -239
  181. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/ControllerMethods.html +0 -246
  182. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/Symbol.html +0 -132
  183. data/doc/rdoc/classes/Waves/Layers/ORM/DataMapper.html +0 -166
  184. data/doc/rdoc/classes/Waves/Layers/ORM/Filebase.html +0 -157
  185. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel.html +0 -232
  186. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel/ControllerMethods.html +0 -246
  187. data/doc/rdoc/classes/Waves/Layers/Simple.html +0 -169
  188. data/doc/rdoc/classes/Waves/Layers/SimpleErrors.html +0 -159
  189. data/doc/rdoc/classes/Waves/Logger.html +0 -288
  190. data/doc/rdoc/classes/Waves/Mapping.html +0 -760
  191. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls.html +0 -129
  192. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/GetRules.html +0 -174
  193. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/RestRules.html +0 -180
  194. data/doc/rdoc/classes/Waves/MimeTypes.html +0 -200
  195. data/doc/rdoc/classes/Waves/Renderers/Erubis.html +0 -162
  196. data/doc/rdoc/classes/Waves/Renderers/Haml.html +0 -160
  197. data/doc/rdoc/classes/Waves/Renderers/Markaby.html +0 -167
  198. data/doc/rdoc/classes/Waves/Renderers/Mixin.html +0 -191
  199. data/doc/rdoc/classes/Waves/Renderers/Scope.html +0 -181
  200. data/doc/rdoc/classes/Waves/Request.html +0 -441
  201. data/doc/rdoc/classes/Waves/Request/ParseError.html +0 -111
  202. data/doc/rdoc/classes/Waves/Response.html +0 -283
  203. data/doc/rdoc/classes/Waves/ResponseMixin.html +0 -460
  204. data/doc/rdoc/classes/Waves/ResponseProxy.html +0 -269
  205. data/doc/rdoc/classes/Waves/Server.html +0 -488
  206. data/doc/rdoc/classes/Waves/Session.html +0 -330
  207. data/doc/rdoc/classes/Waves/Utilities/Hash.html +0 -185
  208. data/doc/rdoc/classes/Waves/Utilities/Integer.html +0 -424
  209. data/doc/rdoc/classes/Waves/Utilities/Module.html +0 -174
  210. data/doc/rdoc/classes/Waves/Utilities/Object.html +0 -155
  211. data/doc/rdoc/classes/Waves/Utilities/Proc.html +0 -145
  212. data/doc/rdoc/classes/Waves/Utilities/String.html +0 -290
  213. data/doc/rdoc/classes/Waves/Views.html +0 -278
  214. data/doc/rdoc/classes/Waves/Views/Base.html +0 -118
  215. data/doc/rdoc/classes/Waves/Views/Mixin.html +0 -279
  216. data/doc/rdoc/classes/Waves/Views/NoTemplateError.html +0 -111
  217. data/doc/rdoc/created.rid +0 -1
  218. data/doc/rdoc/files/README_rdoc.html +0 -415
  219. data/doc/rdoc/files/bin/waves.html +0 -135
  220. data/doc/rdoc/files/doc/HISTORY.html +0 -265
  221. data/doc/rdoc/files/lib/commands/waves-console_rb.html +0 -110
  222. data/doc/rdoc/files/lib/commands/waves-server_rb.html +0 -108
  223. data/doc/rdoc/files/lib/controllers/base_rb.html +0 -101
  224. data/doc/rdoc/files/lib/controllers/mixin_rb.html +0 -101
  225. data/doc/rdoc/files/lib/dispatchers/base_rb.html +0 -101
  226. data/doc/rdoc/files/lib/dispatchers/default_rb.html +0 -101
  227. data/doc/rdoc/files/lib/foundations/default_rb.html +0 -101
  228. data/doc/rdoc/files/lib/foundations/simple_rb.html +0 -101
  229. data/doc/rdoc/files/lib/helpers/asset_helper_rb.html +0 -101
  230. data/doc/rdoc/files/lib/helpers/common_rb.html +0 -101
  231. data/doc/rdoc/files/lib/helpers/default_rb.html +0 -101
  232. data/doc/rdoc/files/lib/helpers/form_rb.html +0 -101
  233. data/doc/rdoc/files/lib/helpers/formatting_rb.html +0 -108
  234. data/doc/rdoc/files/lib/helpers/model_rb.html +0 -101
  235. data/doc/rdoc/files/lib/helpers/number_helper_rb.html +0 -101
  236. data/doc/rdoc/files/lib/helpers/tag_helper_rb.html +0 -101
  237. data/doc/rdoc/files/lib/helpers/url_helper_rb.html +0 -101
  238. data/doc/rdoc/files/lib/helpers/view_rb.html +0 -101
  239. data/doc/rdoc/files/lib/layers/default_errors_rb.html +0 -101
  240. data/doc/rdoc/files/lib/layers/inflect/english/rules_rb.html +0 -101
  241. data/doc/rdoc/files/lib/layers/inflect/english/string_rb.html +0 -101
  242. data/doc/rdoc/files/lib/layers/inflect/english_rb.html +0 -109
  243. data/doc/rdoc/files/lib/layers/mvc_rb.html +0 -101
  244. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/generate_rb.html +0 -101
  245. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/schema_rb.html +0 -101
  246. data/doc/rdoc/files/lib/layers/orm/active_record_rb.html +0 -108
  247. data/doc/rdoc/files/lib/layers/orm/data_mapper_rb.html +0 -108
  248. data/doc/rdoc/files/lib/layers/orm/filebase_rb.html +0 -101
  249. data/doc/rdoc/files/lib/layers/orm/migration_rb.html +0 -101
  250. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/generate_rb.html +0 -101
  251. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/schema_rb.html +0 -101
  252. data/doc/rdoc/files/lib/layers/orm/sequel_rb.html +0 -108
  253. data/doc/rdoc/files/lib/layers/simple_errors_rb.html +0 -101
  254. data/doc/rdoc/files/lib/layers/simple_rb.html +0 -101
  255. data/doc/rdoc/files/lib/mapping/mapping_rb.html +0 -101
  256. data/doc/rdoc/files/lib/mapping/pretty_urls_rb.html +0 -101
  257. data/doc/rdoc/files/lib/renderers/erubis_rb.html +0 -108
  258. data/doc/rdoc/files/lib/renderers/haml_rb.html +0 -108
  259. data/doc/rdoc/files/lib/renderers/markaby_rb.html +0 -108
  260. data/doc/rdoc/files/lib/renderers/mixin_rb.html +0 -101
  261. data/doc/rdoc/files/lib/runtime/application_rb.html +0 -107
  262. data/doc/rdoc/files/lib/runtime/blackboard_rb.html +0 -101
  263. data/doc/rdoc/files/lib/runtime/configuration_rb.html +0 -101
  264. data/doc/rdoc/files/lib/runtime/console_rb.html +0 -101
  265. data/doc/rdoc/files/lib/runtime/debugger_rb.html +0 -101
  266. data/doc/rdoc/files/lib/runtime/logger_rb.html +0 -108
  267. data/doc/rdoc/files/lib/runtime/mime_types_rb.html +0 -101
  268. data/doc/rdoc/files/lib/runtime/request_rb.html +0 -101
  269. data/doc/rdoc/files/lib/runtime/response_mixin_rb.html +0 -101
  270. data/doc/rdoc/files/lib/runtime/response_proxy_rb.html +0 -101
  271. data/doc/rdoc/files/lib/runtime/response_rb.html +0 -101
  272. data/doc/rdoc/files/lib/runtime/server_rb.html +0 -108
  273. data/doc/rdoc/files/lib/runtime/session_rb.html +0 -101
  274. data/doc/rdoc/files/lib/tasks/cluster_rb.html +0 -101
  275. data/doc/rdoc/files/lib/tasks/gem_rb.html +0 -108
  276. data/doc/rdoc/files/lib/tasks/generate_rb.html +0 -101
  277. data/doc/rdoc/files/lib/utilities/hash_rb.html +0 -101
  278. data/doc/rdoc/files/lib/utilities/inflect_rb.html +0 -111
  279. data/doc/rdoc/files/lib/utilities/integer_rb.html +0 -101
  280. data/doc/rdoc/files/lib/utilities/module_rb.html +0 -101
  281. data/doc/rdoc/files/lib/utilities/object_rb.html +0 -101
  282. data/doc/rdoc/files/lib/utilities/proc_rb.html +0 -101
  283. data/doc/rdoc/files/lib/utilities/string_rb.html +0 -101
  284. data/doc/rdoc/files/lib/utilities/symbol_rb.html +0 -101
  285. data/doc/rdoc/files/lib/utilities/tempfile_rb.html +0 -115
  286. data/doc/rdoc/files/lib/views/base_rb.html +0 -101
  287. data/doc/rdoc/files/lib/views/mixin_rb.html +0 -101
  288. data/doc/rdoc/files/lib/waves_rb.html +0 -195
  289. data/doc/rdoc/fr_class_index.html +0 -104
  290. data/doc/rdoc/fr_file_index.html +0 -97
  291. data/doc/rdoc/fr_method_index.html +0 -233
  292. data/doc/rdoc/index.html +0 -24
  293. data/doc/rdoc/rdoc-style.css +0 -208
  294. data/lib/commands/waves-console.rb +0 -21
  295. data/lib/controllers/base.rb +0 -11
  296. data/lib/controllers/mixin.rb +0 -165
  297. data/lib/foundations/default.rb +0 -27
  298. data/lib/foundations/simple.rb +0 -30
  299. data/lib/helpers/asset_helper.rb +0 -67
  300. data/lib/helpers/common.rb +0 -66
  301. data/lib/helpers/default.rb +0 -13
  302. data/lib/helpers/number_helper.rb +0 -25
  303. data/lib/helpers/tag_helper.rb +0 -58
  304. data/lib/helpers/url_helper.rb +0 -77
  305. data/lib/layers/default_errors.rb +0 -26
  306. data/lib/layers/inflect/english/rules.rb +0 -88
  307. data/lib/layers/inflect/english/string.rb +0 -24
  308. data/lib/layers/orm/filebase.rb +0 -22
  309. data/lib/layers/simple.rb +0 -32
  310. data/lib/layers/simple_errors.rb +0 -23
  311. data/lib/mapping/mapping.rb +0 -289
  312. data/lib/mapping/pretty_urls.rb +0 -96
  313. data/lib/renderers/markaby.rb +0 -33
  314. data/lib/runtime/application.rb +0 -69
  315. data/lib/runtime/blackboard.rb +0 -57
  316. data/lib/runtime/debugger.rb +0 -9
  317. data/lib/runtime/response_proxy.rb +0 -30
  318. data/lib/tasks/cluster.rb +0 -26
  319. data/lib/utilities/inflect.rb +0 -110
  320. data/lib/utilities/module.rb +0 -21
  321. data/lib/utilities/proc.rb +0 -16
  322. data/lib/utilities/string.rb +0 -49
  323. data/lib/utilities/symbol.rb +0 -10
  324. data/lib/utilities/tempfile.rb +0 -9
  325. data/lib/views/base.rb +0 -9
  326. data/samples/blog/bin/waves-console +0 -3
  327. data/samples/blog/bin/waves-server +0 -3
  328. data/samples/blog/configurations/mapping.rb +0 -23
  329. data/samples/blog/doc/EMTPY +0 -0
  330. data/samples/blog/lib/application.rb +0 -5
  331. data/samples/jub/Rakefile +0 -72
  332. data/samples/jub/bin/waves-console +0 -4
  333. data/samples/jub/bin/waves-server +0 -4
  334. data/samples/jub/configurations/development.rb +0 -31
  335. data/samples/jub/configurations/mapping.rb +0 -18
  336. data/samples/jub/configurations/production.rb +0 -31
  337. data/samples/jub/lib/application.rb +0 -5
  338. data/samples/jub/startup.rb +0 -6
  339. data/samples/jub/templates/errors/not_found_404.mab +0 -2
  340. data/samples/jub/templates/errors/server_error_500.mab +0 -2
  341. data/samples/jub/templates/layouts/default.mab +0 -14
  342. data/verify/app_generation/helpers.rb +0 -24
  343. data/verify/app_generation/startup.rb +0 -39
  344. data/verify/blackboard/blackboard_verify.rb +0 -92
  345. data/verify/blackboard/helpers.rb +0 -5
  346. data/verify/configurations/attributes.rb +0 -37
  347. data/verify/configurations/helpers.rb +0 -1
  348. data/verify/configurations/rack_integration.rb +0 -29
  349. data/verify/controllers/base.rb +0 -37
  350. data/verify/controllers/helpers.rb +0 -13
  351. data/verify/controllers/interface.rb +0 -51
  352. data/verify/core/helpers.rb +0 -3
  353. data/verify/core/utilities.rb +0 -177
  354. data/verify/foundations/default.rb +0 -86
  355. data/verify/foundations/default_application/Rakefile +0 -14
  356. data/verify/foundations/default_application/bin/waves-console +0 -3
  357. data/verify/foundations/default_application/bin/waves-server +0 -3
  358. data/verify/foundations/default_application/configurations/development.rb +0 -26
  359. data/verify/foundations/default_application/configurations/mapping.rb +0 -14
  360. data/verify/foundations/default_application/configurations/production.rb +0 -30
  361. data/verify/foundations/default_application/controllers/default.rb +0 -15
  362. data/verify/foundations/default_application/controllers/loaded.rb +0 -15
  363. data/verify/foundations/default_application/defaultapplication.db +0 -0
  364. data/verify/foundations/default_application/helpers/loaded.rb +0 -10
  365. data/verify/foundations/default_application/lib/application.rb +0 -5
  366. data/verify/foundations/default_application/models/default.rb +0 -13
  367. data/verify/foundations/default_application/models/loaded.rb +0 -13
  368. data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +0 -9
  369. data/verify/foundations/default_application/startup.rb +0 -7
  370. data/verify/foundations/default_application/templates/errors/not_found_404.mab +0 -2
  371. data/verify/foundations/default_application/templates/errors/server_error_500.mab +0 -2
  372. data/verify/foundations/default_application/templates/layouts/default.mab +0 -14
  373. data/verify/foundations/default_application/views/default.rb +0 -7
  374. data/verify/foundations/default_application/views/loaded.rb +0 -15
  375. data/verify/foundations/helpers.rb +0 -1
  376. data/verify/foundations/simple.rb +0 -25
  377. data/verify/helpers.rb +0 -76
  378. data/verify/layers/data_mapper/association_verify.rb +0 -87
  379. data/verify/layers/default_errors.rb +0 -29
  380. data/verify/layers/helpers.rb +0 -1
  381. data/verify/layers/migration.rb +0 -33
  382. data/verify/layers/sequel/model.rb +0 -41
  383. data/verify/layers/sequeltest.db +0 -0
  384. data/verify/mapping/always.rb +0 -19
  385. data/verify/mapping/filters.rb +0 -65
  386. data/verify/mapping/handle.rb +0 -24
  387. data/verify/mapping/helpers.rb +0 -7
  388. data/verify/mapping/matches.rb +0 -27
  389. data/verify/mapping/named.rb +0 -29
  390. data/verify/mapping/options.rb +0 -17
  391. data/verify/mapping/path.rb +0 -40
  392. data/verify/mapping/response_proxy.rb +0 -50
  393. data/verify/mapping/threaded.rb +0 -25
  394. data/verify/requests/helpers.rb +0 -16
  395. data/verify/requests/request.rb +0 -73
  396. data/verify/requests/response.rb +0 -59
  397. data/verify/requests/session.rb +0 -54
  398. data/verify/views/helpers.rb +0 -1
  399. data/verify/views/rendering.rb +0 -34
  400. data/verify/views/templates/foo.erb +0 -0
  401. data/verify/views/templates/moo.erb +0 -0
  402. data/verify/views/templates/moo.mab +0 -0
@@ -0,0 +1,132 @@
1
+ module Waves
2
+
3
+ module Resources
4
+
5
+ StatusCodes = {
6
+ Waves::Dispatchers::NotFoundError => 404
7
+ }
8
+
9
+
10
+ module Mixin
11
+
12
+ attr_reader :request
13
+
14
+ module ClassMethods
15
+
16
+ def paths
17
+ unless @paths
18
+ resource = self
19
+ @paths = Class.new( superclass.respond_to?( :paths ) ? superclass.paths : Waves::Resources::Paths ) do
20
+ @resource = resource
21
+ def self.resource ; @resource ; end
22
+ end
23
+ else
24
+ @paths
25
+ end
26
+ end
27
+ def with( options ) ; @options = options ; yield ; @options = nil ; end
28
+ def on( method, path = true, options = nil, &block )
29
+ if path.is_a? Hash
30
+ generator = path.keys.first
31
+ path = path.values.first
32
+ end
33
+ if options
34
+ options[ :path ] = path
35
+ else
36
+ options = { :path => path }
37
+ end
38
+ options = @options.merge( options ) if @options
39
+ matcher = Waves::Matchers::Resource.new( options )
40
+ methods = case method
41
+ when nil then nil
42
+ when true then [ :post, :get, :put, :delete ]
43
+ when Array then method
44
+ else [ method ]
45
+ end
46
+ methods.each do | method |
47
+ functor_with_self( method, matcher, &block )
48
+ end
49
+ paths.module_eval {
50
+ define_method( generator ) { | *args | generate( path, args ) }
51
+ } if generator
52
+ end
53
+ def before( path = nil, options = {}, &block )
54
+ on( :before, path, options, &block )
55
+ end
56
+ def after( path = nil, options = {}, &block )
57
+ on( :after, path, options, &block )
58
+ end
59
+ def wrap( path = nil, options = {}, &block )
60
+ before( path, options, &block )
61
+ after( path, options, &block )
62
+ end
63
+ def handler( exception, &block ) ; functor( :handler, exception, &block ) ; end
64
+ def always( &block ) ; define_method( :always, &block ) ; end
65
+
66
+ end
67
+
68
+ # this is necessary because you can't define functors within a module because the functor attempts
69
+ # to incorporate the superclass functor table into it's own
70
+ def self.included( resource )
71
+
72
+ resource.module_eval do
73
+
74
+ include ResponseMixin, Functor::Method ; extend ClassMethods
75
+
76
+ def initialize( request ); @request = request ; end
77
+
78
+ def process
79
+ begin
80
+ before ; body = send( request.method ) ; after
81
+ rescue Exception => e
82
+ response.status = ( StatusCodes[ e.class ] || 500 )
83
+ ( body = handler( e ) ) rescue raise e
84
+ Waves::Logger.warn e.to_s
85
+ Waves::Logger.debug "#{e.class.name} : #{e.message}"
86
+ e.backtrace.each { |t| Waves::Logger.debug " #{t}" }
87
+ ensure
88
+ always
89
+ end
90
+ return body
91
+ end
92
+
93
+ def to( resource )
94
+ resource = case resource
95
+ when Base
96
+ resource
97
+ when Symbol, String
98
+ begin
99
+ Waves.main::Resources[ resource ]
100
+ rescue NameError
101
+ raise Waves::Dispatchers::NotFoundError
102
+ end
103
+ Waves.main::Resources[ resource ]
104
+ end
105
+ r = traits.waves.resource = resource.new( request )
106
+ r.process
107
+ end
108
+
109
+ def redirect( path ) ; request.redirect( path ) ; end
110
+
111
+ # override for resources that may have long-running requests. this helps servers
112
+ # determine how to handle the request
113
+ def deferred? ; false ; end
114
+
115
+ before {} ; after {} ; always {}
116
+
117
+ %w( post get put delete head ).each do | method |
118
+ on( method ) { not_found }
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ end
126
+
127
+ class Base ; include Mixin ; end
128
+
129
+ end
130
+
131
+
132
+ end
@@ -0,0 +1,34 @@
1
+ module Waves
2
+
3
+ module Resources
4
+
5
+ class Paths
6
+
7
+ attr_accessor :request
8
+
9
+ include Waves::ResponseMixin
10
+
11
+ def initialize( request ) ; @request = request ; end
12
+
13
+ def generate( template, args )
14
+ return "/#{ args * '/' }" unless template.is_a?( Array ) and not template.empty?
15
+ path = []
16
+ ( "/#{ path * '/' }" ) if template.all? do | want |
17
+ case want
18
+ when true then path += args
19
+ when String then path << want
20
+ when Symbol then path << args.shift
21
+ when Regexp then path << args.shift
22
+ when Hash
23
+ key, value = want.to_a.first
24
+ case value
25
+ when true then path += args
26
+ when String, Symbol, RegExp then path << args.unshift
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -1,114 +1,5 @@
1
1
  module Waves
2
2
 
3
- # Waves configurations are Ruby code. This means you can use a Ruby expression as
4
- # the value of a configuration attribute, extend and inherit your configurations, and
5
- # add your own attributes. You can even use it as a repository
6
- # for your application configuration.
7
- #
8
- # You can access configuration attributes using the attribute name as a method, with the value as the argument.
9
- #
10
- # == Example
11
- #
12
- # module Blog
13
- # module Configurations
14
- # class Development < Default
15
- # host '127.0.0.1'
16
- # port 2000
17
- # reloadable [ Blog ]
18
- # log :level => :debug
19
- # application do
20
- # use Rack::ShowExceptions
21
- # run Waves::Dispatchers::Default.new
22
- # end
23
- # end
24
- # end
25
- # end
26
- #
27
- # There are three forms for accessing attributes:
28
- #
29
- # Waves.config.port # generic form - gets the value for current config
30
- # Blog.configurations[:development].port # gets the value for a specified config
31
- # Blog::Configurations::Development.port # Access a specific config constant directly
32
- #
33
- # Configuration data is inheritable, as shown in the example above. Typically, you
34
- # would set data common to all configurations in the Default class, from which
35
- # your variations inherit.
36
- #
37
- # You may define your own heritable attributes using the +attribute+ class method:
38
- #
39
- # class Default < Waves::Configurations::Default
40
- # attribute 'theme' # define an attribute named "theme"
41
- # theme 'ultra' # set an inheritable default
42
- # end
43
- #
44
- # Certain attributes are reserved for internal use by Waves:
45
- #
46
- # - application: configure the application for use with Rack
47
- # - database: initialization parameters needed by the ORM layer
48
- # - reloadable: an array of module names to reload; see below for more
49
- # - log: takes a hash of parameters; see below for more
50
- # - host: the host to bind the server to (string)
51
- # - port: the port for the server to listen on (number)
52
- # - ports: used by the cluster:start task for clustering servers (array of numbers)
53
- # - debug: true if running in "debug" mode, which automatically reloads code
54
- #
55
- # == Configuring The Rack Application
56
- #
57
- # One of the really nice features of Rack is the ability to install "middleware"
58
- # components to optimize the way you handle requests. Waves exposes this ability
59
- # directly to the application developer via the +application+ configuration method.
60
- #
61
- # *Example*
62
- #
63
- # # Typical debugging configuration
64
- # application do
65
- # use Rack::ShowExceptions
66
- # run Waves::Dispatchers::Default.new
67
- # end
68
- #
69
- # == Configuring Database Access
70
- #
71
- # The ORM layers provided with Waves use the +database+ attribute for connection initialization.
72
- # Most ORMs take a hash for this purpose, with keys that may vary depending on the ORM and backend.
73
- #
74
- # # Sequel with a MySQL db
75
- # database :host => 'localhost', :adapter => 'mysql', :database => 'blog',
76
- # :user => 'root', :password => 'guess'
77
- #
78
- # # Sequel with an SQLite db
79
- # database :adapter => 'sqlite', :database => 'blog'
80
- #
81
- # See the documentation for each ORM layer for details.
82
- #
83
- # == Configuring Code Reloading
84
- #
85
- # The +reloadable+ attribute takes an array of modules. Before every request, the default Waves
86
- # dispatcher calls +reload+ on each listed module. The module should remove any reloadable constants
87
- # currently defined in its namespace.
88
- #
89
- # In a Waves application built on the Default foundation, +reload+ functionality is provided
90
- # by AutoCode for the Configurations, Controllers, Helpers, Models, and Views modules.
91
- #
92
- # Listing only your application module will work in most cases:
93
- #
94
- # reloadable [ Blog ]
95
- #
96
- # As an alternative, you could reload only some of the modules within your application:
97
- #
98
- # reloadable [ Blog::Models, Blog::Controllers ]
99
- #
100
- # == Configuring Logging
101
- #
102
- # The +log+ configuration attribute takes hash with these keys:
103
- # - :level - The log filter level. Uses Ruby's built in Logger class.
104
- # - :output - A filename or IO object. Should be a filename if running as a daemon.
105
- #
106
- # *Examples*
107
- #
108
- # log :level => :info, :output => $stderr
109
- # log :level => :error, :output => 'log/blog.log'
110
- #
111
-
112
3
  module Configurations
113
4
 
114
5
  class Base
@@ -131,33 +22,51 @@ module Waves
131
22
  end
132
23
  self[ name ] = nil
133
24
  end
25
+
26
+ def self.attributes( *names )
27
+ names.each { |name| attribute( name ) }
28
+ end
134
29
 
135
30
  end
136
31
 
137
32
  # The Default configuration defines sensible defaults for attributes required by Waves.
138
- # debug true
139
- # synchronize? true
140
- # session :duration => 30.minutes, :path => '/tmp/sessions'
141
- # log :level => :info, :output => $stderr
142
- # reloadable []
143
33
  class Default < Base
144
-
145
- %w( host port ports log reloadable database session debug root synchronize? ).
146
- each { |name| attribute(name) }
147
-
148
- # Set the Rack handler, along with any specific options
149
- # that need to be passed to the handler's #run method.
150
- #
151
- # When accessing the value
152
- # (calling with no arguments), returns an array of the handler and options.
153
- def self.handler(*args)
154
- if args.length > 0
155
- @rack_handler, @rack_handler_options = args
156
- else
157
- [ @rack_handler, @rack_handler_options ]
158
- end
159
- end
160
-
34
+
35
+ # define where a server should listen
36
+ # can be overridden by -p and -h options
37
+ attributes( :host, :port, :ports )
38
+
39
+ # which server to use, ex: Waves::Servers::Mongrel
40
+ attribute( :server )
41
+
42
+ # where will the logger write to? can be a IO object or a pathname
43
+ # also can set the level here to :fatal, :debug, :warn, :info
44
+ attribute( :log )
45
+
46
+ # which modules are going to be reloaded on each request?
47
+ attribute( :reloadable )
48
+
49
+ # which resource to use as the "main" resource for this server
50
+ attribute( :resource )
51
+
52
+ # parameters for the database connection, varies by ORM
53
+ attribute( :database )
54
+
55
+ # options for the session: options for duration and path
56
+ attribute( :session )
57
+
58
+ # set the debug mode flag; typically done in dev / test configurations
59
+ attribute( :debug )
60
+
61
+ # what object to use as the main Waves cache
62
+ attribute( :cache )
63
+
64
+ # do you want to run a console thread (ex: LiveConsole)
65
+ attribute( :console )
66
+
67
+ # are there any gems we need to check for on startup?
68
+ attributes( :dependencies )
69
+
161
70
  # Provides access to the Waves::MimeTypes class via the configuration. You
162
71
  # can override #mime_types to return your own MIME types repository class.
163
72
  def self.mime_types
@@ -173,13 +82,24 @@ module Waves
173
82
  self['application']
174
83
  end
175
84
  end
176
-
177
- debug true ; synchronize? true
85
+
86
+ # default options
87
+ debug true
178
88
  session :duration => 30.minutes, :path => '/tmp/sessions'
179
89
  log :level => :info, :output => $stderr
180
90
  reloadable []
91
+ dependencies []
92
+ server Waves::Servers::WEBrick
93
+ application {
94
+ use ::Rack::ShowExceptions
95
+ use Rack::Session::Cookie, :key => 'rack.session',
96
+ # :domain => 'foo.com',
97
+ :path => '/',
98
+ :expire_after => 2592000,
99
+ :secret => 'Change it'
100
+
101
+ run ::Waves::Dispatchers::Default.new
102
+ }
181
103
  end
182
104
  end
183
105
  end
184
-
185
-
@@ -1,6 +1,7 @@
1
+ require 'runtime/mocks'
1
2
  module Waves
2
3
 
3
- class Console < Application
4
+ class Console < Runtime
4
5
 
5
6
  class << self
6
7
 
@@ -8,6 +9,8 @@ module Waves
8
9
 
9
10
  def load( options={} )
10
11
  @console ||= Waves::Console.new( options )
12
+ Kernel.load( options[:startup] || 'startup.rb' )
13
+ Object.instance_eval { include Waves::Mocks }
11
14
  end
12
15
 
13
16
  # allow Waves::Console to act as The Console Instance
@@ -1,56 +1,32 @@
1
1
  require 'logger'
2
2
  module Waves
3
3
 
4
- # Waves::Logger is based on Ruby's built-in Logger. It uses the same filtering approach
5
- # (debug, info, warn, error, fatal), although the interface is slightly different.
6
- # You won't typically instantiate this class directly; instead, you will specify the
7
- # logging configuration you want in your configuration files. See Waves::Configurations
8
- # for more information on this.
9
- #
10
- # To use the logger for output, you can usually just call +log+, since the Waves::ResponseHelper
11
- # mixin defines it (meaning it is available in the mapping file, controllers, views, and
12
- # templates). Or, you can access Waves::Logger directly. Either way, the logger provides five
13
- # methods for output corresponding to the log levels.
14
- #
15
- # *Examples*
16
- # # log the value of foo
17
- # log.info "Value of foo: #{foo}"
18
- #
19
- # # fatal error!
20
- # Waves::Logger.fatal "She can't hold up any longer, cap'n!"
21
- #
22
4
  module Logger
23
5
 
24
- class << self
25
-
26
- # Returns the object being used for output by the logger.
27
- def output
28
- @output ||= ( config[:output] ? File.expand_path( config[:output] ) : $stderr )
29
- end
30
-
31
- # Returns the active configuration for the logger.
32
- def config
33
- @config ||= Waves::Server.config.log
34
- end
35
-
36
- # Returns the logging level used to filter logging events.
37
- def level ; @level ||= ::Logger.const_get( config[:level].to_s.upcase || 'INFO' ) ; end
38
-
39
- # Starts the logger, using the active configuration to initialize it.
40
- def start
41
- @log = config[:rotation] ?
42
- ::Logger.new( output, config[:rotation].intern ) :
43
- ::Logger.new( output )
44
- @log.level = level
45
- @log.datetime_format = "%Y-%m-%d %H:%M:%S "
46
- self
47
- end
48
-
49
- # Forwards logging methods to the logger.
50
- def method_missing(name,*args,&block)
51
- @log.send name,*args, &block if @log
52
- end
53
-
6
+ # Returns the object being used for output by the logger.
7
+ def self.output
8
+ @output ||= ( config[:output] or $stderr )
9
+ end
10
+
11
+ # Returns the active configuration for the logger.
12
+ def self.config ; @config ||= Waves.config.log ; end
13
+
14
+ # Returns the logging level used to filter logging events.
15
+ def self.level ; @level ||= ::Logger.const_get( config[:level].to_s.upcase || 'INFO' ) ; end
16
+
17
+ # Starts the logger, using the active configuration to initialize it.
18
+ def self.start
19
+ @log = config[:rotation] ?
20
+ ::Logger.new( output, config[:rotation].to_sym ) :
21
+ ::Logger.new( output )
22
+ @log.level = level
23
+ @log.datetime_format = "%Y-%m-%d %H:%M:%S "
24
+ self
25
+ end
26
+
27
+ # Forwards logging methods to the logger.
28
+ def self.method_missing(name,*args,&block)
29
+ @log.send name,*args, &block if @log
54
30
  end
55
31
 
56
32
  end