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,37 @@
1
+ module Waves
2
+
3
+ module Helpers
4
+
5
+ module Layouts
6
+
7
+ # Invokes a layout view (i.e., a view from the layouts template directory), using
8
+ # the assigns parameter to define instance variables for the view. The block is
9
+ # evaluated and also passed into the view as the +layout_content+ instance variable.
10
+ #
11
+ # You can define a layout just by creating a template and then calling the
12
+ # +layout_content+ accessor when you want to embed the caller's content.
13
+ #
14
+ # == Example
15
+ #
16
+ # doctype :html4_transitional
17
+ # html do
18
+ # title @title # passed as an assigns parameter
19
+ # end
20
+ # body do
21
+ # layout_content
22
+ # end
23
+ #
24
+ def layout( name, assigns = {}, &block )
25
+ assigns[ :layout_content ] = capture(&block)
26
+ self << Waves.main::Views[:layouts].process( request ) do
27
+ send( name, assigns )
28
+ end
29
+ end
30
+
31
+ def layout_content
32
+ self << @layout_content
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -17,15 +17,19 @@ module Waves
17
17
  # then be called from the template instead of the model helper.
18
18
  #
19
19
  module Model
20
-
20
+
21
+ def model( name )
22
+ Waves.main::Models[ name ][ domain ]
23
+ end
24
+
21
25
  # Just like model.all. Returns all the instances of that model.
22
26
  def all( model )
23
- Waves.application.models[ model ].all( domain )
27
+ model( model ).all
24
28
  end
25
-
29
+
26
30
  # Finds a specific instance using the name field
27
31
  def find( model, name )
28
- Waves.application.models[ model ][ :name => name ] rescue nil
32
+ model( model )[name ] rescue nil
29
33
  end
30
34
 
31
35
  end
@@ -10,12 +10,10 @@ module Waves
10
10
  # view) and returns the result of evaluating the view as content in the current
11
11
  # template.
12
12
  module View
13
-
13
+
14
14
  # Invokes the view for the given model, passing the assigns as instance variables.
15
15
  def view( model, view, assigns = {} )
16
- self << Waves.application.views[ model ].process( request ) do
17
- send( view, assigns )
18
- end
16
+ self << Waves.main::Views[ model ].new( request ).send( view, assigns )
19
17
  end
20
18
 
21
19
 
@@ -1,16 +1,59 @@
1
- require 'layers/inflect/english/rules'
2
- require 'layers/inflect/english/string'
3
1
  module Waves
4
2
  module Layers
5
3
  module Inflect
4
+
5
+ # Adds plural/singular methods for English to String
6
6
  module English
7
7
 
8
8
  def self.included(app)
9
9
 
10
-
10
+ require 'english/inflect'
11
+
12
+ Waves::Resources::Mixin::ClassMethods.module_eval do
13
+ def singular ; basename.snake_case.singular ; end
14
+ def plural ; basename.snake_case.plural ; end
15
+ end
16
+
17
+ Waves::Resources::Mixin.module_eval do
18
+ def singular ; self.class.singular ; end
19
+ def plural ; self.class.plural ; end
20
+ end
11
21
 
12
- String.class_eval do
13
- include Waves::Layers::Inflect::English::StringMethods
22
+ Waves::Resources::Paths.module_eval do
23
+ def resource ; self.class.resource.singular ; end
24
+ def resources ; self.class.resource.plural ; end
25
+
26
+ # TODO: be nice to DRY this up ... basically the same code
27
+ # as the mixin except with the singular / plural stuff
28
+ # mixed in ...
29
+ def generate( template, args )
30
+ return "/#{ args * '/' }" unless template.is_a?( Array ) and not template.empty?
31
+ path = []
32
+ ( "/#{ path * '/' }" ) if template.all? do | want |
33
+ case want
34
+ when true then path += args
35
+ when String then path << want
36
+ when Symbol
37
+ case want
38
+ when :resource then path << resource
39
+ when :resources then path << resources
40
+ else path << args.shift
41
+ end
42
+ when Regexp then path << args.shift
43
+ when Hash
44
+ key, value = want.to_a.first
45
+ case key
46
+ when :resource then path << resource
47
+ when :resources then path << resources
48
+ else
49
+ case value
50
+ when true then path += args
51
+ when String, Symbol, RegExp then path << args.unshift
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
14
57
  end
15
58
 
16
59
  end
@@ -1,22 +1,16 @@
1
1
  module Waves
2
2
  module Layers
3
- # The MVC layer establishes the Models, Views, Controllers, and Helpers namespaces inside
4
- # a Waves application. In each namespace, undefined constants are handled by AutoCode, which
5
- # loads the constant from the correct file in the appropriate directory if it exists, or creates
6
- # from default otherwise.
7
3
  module MVC
8
4
 
9
5
  def self.included( app )
10
6
 
11
- def app.models ; self::Models ; end
12
- def app.views ; self::Views ; end
13
- def app.controllers ; self::Controllers ; end
14
- def app.helpers ; self::Helpers ; end
7
+ require 'layers/mvc/extensions'
8
+ require 'layers/mvc/controllers'
15
9
 
16
10
  app.auto_create_module( :Models ) do
17
11
  include AutoCode
18
12
  auto_create_class :Default
19
- auto_load :Default, :directories => [:models]
13
+ auto_load :Default, :directories => [ :models ]
20
14
  end
21
15
 
22
16
  app.auto_eval( :Models ) do
@@ -24,30 +18,36 @@ module Waves
24
18
  auto_load true, :directories => [ :models ]
25
19
  end
26
20
 
27
- app.auto_create_module( :Views ) { include AutoCode }
21
+ app.auto_create_module( :Views ) do
22
+ include AutoCode
23
+ auto_create_class :Default, Waves::Views::Base
24
+ auto_load :Default, :directories => [ :views ]
25
+ end
28
26
 
29
27
  app.auto_eval( :Views ) do
30
- auto_create_class :Default, Waves::Views::Base
31
- auto_load :Default, :directories => [:views]
32
28
  auto_create_class true, app::Views::Default
33
29
  auto_load true, :directories => [ :views ]
34
30
  end
35
31
 
36
- app.auto_create_module( :Controllers ) { include AutoCode }
32
+ app.auto_create_module( :Controllers ) do
33
+ include AutoCode
34
+ auto_create_class :Default, Waves::Controllers::Base
35
+ auto_load :Default, :directories => [ :controllers ]
36
+ end
37
37
 
38
38
  app.auto_eval( :Controllers ) do
39
- auto_create_class :Default, Waves::Controllers::Base
40
- auto_load :Default, :directories => [:controllers]
41
39
  auto_create_class true, app::Controllers::Default
42
40
  auto_load true, :directories => [ :controllers ]
43
41
  end
44
42
 
45
43
  app.auto_create_module( :Helpers ) do
46
44
  include AutoCode
47
- auto_create_module { include Waves::Helpers::Default }
45
+ auto_create_module( :Default ) { include Waves::Helpers::Extended }
46
+ auto_load :Default, :directories => [ :helpers ]
47
+ auto_create_module( true ) { include app::Helpers::Default }
48
48
  auto_load true, :directories => [ :helpers ]
49
- end
50
-
49
+ end
50
+
51
51
  end
52
52
  end
53
53
  end
@@ -0,0 +1,41 @@
1
+ module Waves
2
+
3
+ module Controllers
4
+
5
+ module Mixin
6
+
7
+ attr_reader :request
8
+
9
+ include Waves::ResponseMixin
10
+
11
+ def initialize( request )
12
+ @request = request
13
+ end
14
+
15
+ def find( name )
16
+ model.find( name )
17
+ end
18
+
19
+ def create( attributes )
20
+ model.create( attributes )
21
+ end
22
+
23
+ def update( name, attributes )
24
+ find( name ).attributes = attributes
25
+ end
26
+
27
+ def delete( name )
28
+ model.delete( name )
29
+ end
30
+
31
+ def list
32
+ model.all
33
+ end
34
+
35
+ end
36
+
37
+ class Base ; include Mixin ; end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,52 @@
1
+ module Waves
2
+
3
+ module Resources
4
+
5
+ module Mixin
6
+
7
+ def controller( resource = nil )
8
+ resource ||= self.class.basename
9
+ @controller ||= app::Controllers[ resource ].new( @request )
10
+ end
11
+
12
+ def view( resource = nil )
13
+ resource ||= self.class.basename
14
+ @view ||= app::Views[ resource ].new( @request )
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ module ResponseMixin
22
+
23
+ # Returns the name of the model corresponding to this controller by taking the basename
24
+ # of the module and converting it to snake case. If the model plurality is different than
25
+ # the controller, this will not, in fact, be the model name.
26
+ def model_name; self.class.basename.snake_case; end
27
+
28
+ # Returns the model corresponding to this controller by naively assuming that
29
+ # +model_name+ must be correct. This allows you to write generic controller methods such as:
30
+ #
31
+ # model.find( name )
32
+ #
33
+ # to find an instance of a given model. Again, the plurality of the controller and
34
+ # model must be the same for this to work.
35
+ def model; app::Models[ model_name.intern ]; end
36
+
37
+ # MVC Params get automatically destructured with the keys as accessors methods.
38
+ # You can still access the original query by calling request.query
39
+ def query
40
+ @query ||= Waves::Request::Query.new(
41
+ Waves::Request::Utilities.destructure( request.query ) )
42
+ end
43
+
44
+ # Attributes are just the query elements specific to the model associated with
45
+ # the current resource.
46
+ def attributes
47
+ query[ model_name ]
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -17,15 +17,10 @@ module Waves
17
17
  # - create
18
18
  # - delete(name)
19
19
  # - update(name)
20
-
20
+
21
+
21
22
  def self.included(app)
22
-
23
- class Symbol
24
- # Protect ActiveRecord from itself by undefining the to_proc method.
25
- # Don't worry, AR will redefine it.
26
- alias :extensions_to_proc :to_proc
27
- remove_method :to_proc
28
- end
23
+
29
24
  require 'active_record'
30
25
  require "#{File.dirname(__FILE__)}/active_record/tasks/schema" if defined?(Rake)
31
26
  require "#{File.dirname(__FILE__)}/active_record/tasks/generate" if defined?(Rake)
@@ -66,20 +61,20 @@ module Waves
66
61
  model.find(:all)
67
62
  end
68
63
 
69
- def find( id )
70
- model.find(id) or not_found
64
+ def find( name )
65
+ model.find_by_name(name) or not_found
71
66
  end
72
67
 
73
68
  def create
74
69
  model.create( attributes )
75
70
  end
76
71
 
77
- def delete( id )
78
- find( id ).destroy
72
+ def delete( name )
73
+ find( name ).destroy
79
74
  end
80
75
 
81
- def update( id )
82
- instance = find( id )
76
+ def update( name )
77
+ instance = find( name )
83
78
  instance.update_attributes( attributes )
84
79
  instance
85
80
  end
@@ -13,7 +13,7 @@ namespace :generate do
13
13
  end
14
14
 
15
15
  model = <<TEXT
16
- module #{Waves.application.name}
16
+ module #{app_name}
17
17
  module Models
18
18
  class #{model_name} < Default
19
19
 
@@ -14,7 +14,7 @@ namespace :schema do
14
14
  end
15
15
 
16
16
  task :connect do
17
- Waves.application.database
17
+ Waves.main.database
18
18
  ActiveRecord::Base.logger = Logger.new($stdout)
19
19
  end
20
20
 
@@ -1,7 +1,3 @@
1
- gem 'dm-core', '=0.9.0'
2
-
3
- require 'data_mapper'
4
-
5
1
  module Waves
6
2
  module Layers
7
3
  module ORM
@@ -10,6 +6,9 @@ module Waves
10
6
  module DataMapper
11
7
 
12
8
  def self.included(app)
9
+ gem 'dm-core', '=0.9.0'
10
+
11
+ require 'data_mapper'
13
12
 
14
13
  def app.database
15
14
  @adapter ||= ::DataMapper.setup(:main_repository, config.database[:database])
@@ -0,0 +1,25 @@
1
+ module Waves
2
+ module Layers
3
+ module ORM
4
+
5
+ # The Filebase ORM layer configures model classes to use Filebase with a datastore located in
6
+ # <tt>db/model_name</tt>, where @model_name@ is the snakecased version of the class name.
7
+ #
8
+ # The Filebase store for Blog::Models::Entry would be located in <tt>db/entry</tt>, for example.
9
+ module Filebase
10
+
11
+ def self.included(app)
12
+ app.module_eval do
13
+ auto_eval( :Models ) do
14
+ auto_eval( true ) { include ::Filebase::Model[ :db / self.basename.snake_case ] }
15
+ end
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -2,10 +2,10 @@ module Waves
2
2
  module Layers
3
3
  module ORM # :nodoc:
4
4
 
5
- # Sets up the Sequel connection and configures AutoCode on Models, so that constants in that
6
- # namespace get loaded from file or created as subclasses of Models::Default
5
+ # The Sequel ORM layer sets up the Sequel connection and configures AutoCode on Models, so that constants in that
6
+ # namespace get loaded from file or created as subclasses of Models::Default. The dataset for models is set to the
7
+ # snakecased version of the model's class name.
7
8
  module Sequel
8
-
9
9
  # On inclusion, this module:
10
10
  # - creates on the application module a database method that establishes the Sequel connection
11
11
  # - arranges for autoloading/autocreation of missing constants in the Models namespace
@@ -18,6 +18,8 @@ module Waves
18
18
  # - delete(name)
19
19
  # - update(name)
20
20
  #
21
+
22
+
21
23
  def self.included(app)
22
24
 
23
25
  gem 'sequel', '>= 2.0.0'
@@ -25,7 +27,7 @@ module Waves
25
27
  require "#{File.dirname(__FILE__)}/sequel/tasks/schema" if defined?(Rake)
26
28
  require "#{File.dirname(__FILE__)}/sequel/tasks/generate" if defined?(Rake)
27
29
 
28
- def app.database ; @sequel ||= ::Sequel.open( config.database ) ; end
30
+ def app.database ; @sequel ||= ::Sequel.open( Waves.config.database ) ; end
29
31
 
30
32
  app.auto_create_module( :Models ) do
31
33
  include AutoCode
@@ -44,7 +46,9 @@ module Waves
44
46
  if @dataset && @dataset.opts[:from] != [ default ]
45
47
  # don't clobber dataset from autoloaded file
46
48
  else
47
- set_dataset Waves.application.database[ basename.snake_case.pluralize.intern ]
49
+ if respond_to? :set_dataset
50
+ set_dataset Waves.main.database[ basename.snake_case.pluralize.intern ]
51
+ end
48
52
  end
49
53
  end
50
54
  end
@@ -66,7 +70,7 @@ module Waves
66
70
  end
67
71
 
68
72
  def create
69
- model.create( attributes )
73
+ model.create( attributes.to_hash )
70
74
  end
71
75
 
72
76
  def delete( name )
@@ -75,7 +79,7 @@ module Waves
75
79
 
76
80
  def update( name )
77
81
  instance = find( name )
78
- instance.update_with_params( attributes )
82
+ instance.update_with_params( attributes.to_hash )
79
83
  instance
80
84
  end
81
85
  end