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
data/bin/waves CHANGED
@@ -1,84 +1,29 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # = Generate or update a Waves application
4
- #
5
- # The +waves+ script generates a new Waves application or updates an existing app. The script uses {RakeGen}[http://github.com/automatthew/rakegen] for file copies and template processing, and the current version of RakeGen requires you to affirm that you want to clobber each and every file when doing an update.
6
- #
7
- # == Usage
8
- #
9
- # # Generate a Waves app using the default ORM layer, which is currently Sequel
10
- # waves /path/to/app
11
- #
12
- # # Generate an app using the default ORM layer, which is currently Sequel
13
- # waves /path/to/app --orm=active_record
14
- #
15
- # # Generate an app that does not include an ORM layer
16
- # waves /path/to/app -o none
3
+ # WARNING: This strange preamble might look easy to clean-up, but it is needed
4
+ # to work with older versions of gems (< 1.2).
17
5
 
18
6
  require 'rubygems'
19
- require 'choice'
20
- require 'rakegen'
21
7
 
8
+ WAVES = "#{File.dirname(__FILE__)}/.." unless defined? WAVES
22
9
 
23
-
24
- # if we're in the waves source, prepend it to the load path
25
- waves_lib = File.expand_path( "#{File.dirname(__FILE__)}/../../waves/lib" )
26
- $:.unshift waves_lib if File.exist?(waves_lib)
27
- require 'waves'
28
-
29
- begin
30
- require 'utilities/string'
31
- rescue LoadError
32
- require File.join(File.dirname(__FILE__), '..', 'lib', 'utilities', 'string')
10
+ waves = [
11
+ WAVES, ENV['WAVES'], './waves'
12
+ ].compact.map { |dir| File.join(dir, 'lib') }.find( &File.method( :directory? ) )
13
+ if waves
14
+ $: << waves
15
+ waves = File.join( waves, 'waves' )
16
+ else
17
+ waves = 'waves'
33
18
  end
19
+ require waves
34
20
 
35
- Choice.options do
36
- banner 'Usage: waves path/to/app [-h]'
37
- option :help do
38
- long '--help'
39
- desc 'Show this message'
40
- end
41
-
42
- option :orm do
43
- short '-o'
44
- long '--orm=ORM'
45
- desc "Select an ORM (e.g. active_record, sequel, none)"
46
- default "sequel"
47
- end
48
-
49
- end
50
-
51
- orm = Choice.choices.orm.snake_case
52
- orm_require, orm_include = case orm
53
- when 'sequel'
54
- ["require 'layers/orm/sequel'", "include Waves::Layers::ORM::Sequel"]
55
- when 'active_record'
56
- ["require 'layers/orm/active_record'", "include Waves::Layers::ORM::ActiveRecord"]
57
- when 'none'
58
- ['', '# This app was generated without an ORM layer']
59
- end
60
21
 
61
- app_path = ARGV[0]
62
- app_name = File.basename(app_path)
63
- if app_name =~ /[^\w\d_]/
64
- raise ArgumentError, <<-TEXT
65
- Unusable name: \"#{app_name}\"
66
- Application names may contain only letters, numbers, and underscores."
67
- TEXT
68
- end
22
+ puts "** Waves #{Waves.version} **"
69
23
 
70
- template = "#{WAVES}/app"
71
24
 
72
- generator = Rakegen.new("waves:app") do |gen|
73
- gen.source = template
74
- gen.target = app_path
75
- gen.template_assigns = {:name => app_name.camel_case, :orm_require => orm_require, :orm_include => orm_include }
76
- gen.executables = %w{ bin/waves-console bin/waves-server}
25
+ begin
26
+ require "commands/#{ARGV.first}"
27
+ rescue LoadError => e
28
+ require "commands/help"
77
29
  end
78
-
79
- puts "** Creating new Waves application ..."
80
-
81
- Rake::Task["waves:app"].invoke
82
-
83
- puts "** Application created!"
84
-
@@ -1,44 +1 @@
1
- 0.7.7
2
- - ActiveRecord ORM layer
3
- - base controller helpers that rely on a particular ORM are now defined in the ORM layers
4
- - Sequel requires moved into the self.included block, to help with the mem footprint
5
- - rake generate:model reappeared
6
- - rake waves:freeze and waves:unfreeze
7
- - Rack::Static declared for /css, /javascript, and /images in generated applications
8
- - added Lawrence Pit's Haml renderer
9
- - English inflector pulled into its own layer, in the hope of allowing localization someday
10
- - utility monkeypatches pulled into modules where possible, for better troubleshooting
11
- - docs, samples, and verify now actually included in the gem
12
- - monkeypatch to Tempfile to work around problem with file uploading and Rack.
13
- 0.7.6
14
- - added metaid as gem dependency
15
- - Special handling in Windows for interrupts ('cause Windows has trouble with those)
16
- - Fixed query param destructuring to work for 3+ levels
17
- 0.7.5
18
- - Foundations and Layers
19
- - Sequel ORM is now a Layer, instead of being baked in
20
- - Almost all boilerplate code removed from generated app, by virtue of the Layers refactoring
21
- - Configuration attribute for selecting a Rack handler
22
- - Mapping#handle method to register blocks that handle exceptions (e.g. NotFoundError)
23
- - Blackboard, a very simple shared storaged usable during request processing.
24
- - Fixed waves script to work when installed as gem (regression)
25
- - Revised and extended documentation
26
- - Expanded spec coverage
27
- 0.7.3:
28
- - Added explicit require for daemons gem
29
- - Added support for running off source
30
- - Added support for using SQLite
31
- - Improved inflection
32
- - Windows support for waves, waves-server, and waves-console
33
- 0.7.2:
34
- - Minor bug fixes, improved documentation
35
- 0.7.1:
36
- - Minor bug fixes, improved documentation
37
- 0.7.0:
38
- - Minor bug fixes, improved documentation
39
- 0.6.9:
40
- - Minor bug fixes, improved documentation
41
- 0.6.8:
42
- - Minor bug fixes, improved documentation
43
- 0.6.7:
44
- - Initial gem release.
1
+ See http://github.com/dyoder/waves/tree/master
@@ -0,0 +1 @@
1
+ To find out more about Waves, visit our Web site, http://rubywaves.com.
@@ -0,0 +1 @@
1
+ 0.8.0
@@ -0,0 +1,48 @@
1
+ require 'caches/synchronized'
2
+
3
+ module Waves
4
+ module Caches
5
+
6
+ class File < Simple
7
+
8
+ def initialize( args )
9
+ raise ArgumentError, ":directory is nil" if args[ :directory ].nil?
10
+ @directory = args[ :directory ] ; @keys = []
11
+ end
12
+
13
+ def store( key, value )
14
+ @keys << key
15
+ ::File.open( @directory / key, 'w') { |f| Marshal.dump( value, f ) }
16
+ end
17
+
18
+ def delete( key )
19
+ if @keys.include? key
20
+ ::File.delete( @directory / key )
21
+ @keys.delete( key )
22
+ end
23
+ end
24
+
25
+ def clear
26
+ @keys.each { |key| delete( key ) }
27
+ end
28
+
29
+ def fetch( key )
30
+ Marshal.load( ::File.read( @directory / key ) ) if @keys.include?( key )
31
+ rescue ArgumentError
32
+ nil
33
+ end
34
+
35
+ end
36
+
37
+ class SynchronizedFile < Synchronized
38
+
39
+ def initialize( args )
40
+ super( File.new( args ) )
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+
48
+
@@ -0,0 +1,40 @@
1
+ require 'memcached'
2
+ module Waves
3
+ module Caches
4
+ class Memcached < Simple
5
+
6
+ def initialize( args )
7
+ raise ArgumentError, ":servers is nil" if args[ :servers ].nil?
8
+ @cache = ::Memcached.new( args[ :servers ], args[ :options ] || {} )
9
+ end
10
+
11
+ def store( key,value, ttl = 0, marshal = true )
12
+ cache = @cache.clone; cache.add( key.to_s, value, ttl, marshal ); cache.destroy
13
+ end
14
+
15
+ def fetch( key )
16
+ cache = @cache.clone; cache.get( key.to_s ); cache.destroy
17
+ rescue ::Memcached::NotFound => e
18
+ nil
19
+ end
20
+
21
+ def delete( key )
22
+ cache = @cache.clone; cache.delete( key.to_s ); cache.destroy
23
+ end
24
+
25
+ def clear
26
+ cache = @cache.clone; cache.flush; cache.destroy
27
+ end
28
+
29
+ end
30
+
31
+ class SynchronizedMemcached < Synchronized
32
+
33
+ def initialize( args )
34
+ super( Memcached.new( args ) )
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ module Waves
2
+
3
+ module Caches
4
+
5
+ #
6
+ # This class is more or less here to establish the basic interface for caching and for
7
+ # lightweight caching that doesn't require a dedicated caching process.
8
+ #
9
+
10
+ class Simple
11
+
12
+ def initialize( hash = {} ) ; @cache = hash ; end
13
+ def [](key) ; fetch(key) ; end
14
+ def []=( key, value ) ; store( key, value ) ; end
15
+ def exists?( key ) ; fetch(key) == nil ? false : true ; end
16
+ alias :exist? :exists?
17
+ def store( key, val ) ; @cache[ key ] = val ; end
18
+ def fetch( key ) ; @cache[ key ] ; end
19
+ def delete( key ) ; @cache.delete( key ) ; end
20
+ def clear ; @cache = {} ; end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+
2
+ module Waves
3
+
4
+ module Caches
5
+
6
+ #
7
+ # This is just a proxy for the real cache, but adds Waves synchronization
8
+ #
9
+
10
+ class Synchronized
11
+
12
+ def initialize( cache ) ; @cache = cache ; end
13
+ def [](key) ; @cache.fetch(key) ; end
14
+ def []=( key, value ) ; @cache.store( key, value ) ; end
15
+ def exists?( key ) ; @cache.has_key?( key ) ; end
16
+ alias :exist? :exists?
17
+ def store( key, val ) ; synchronize { @cache.store( key, value ) }; end
18
+ def fetch( keys ) ; @cache.fetch( key ) ; end
19
+ def delete( key ) ; synchronize { @cache.delete( key ) } ; end
20
+ def clear ; synchronize { @cache.clear } ; end
21
+ def synchronize( &block ) ; Waves.synchronize( &block ) ; end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,35 @@
1
+ require 'choice'
2
+
3
+ Choice.options do
4
+ header 'Run waves in console mode.'
5
+ header ''
6
+ option :mode do
7
+ short '-c'
8
+ long '--config=CONFIG'
9
+ desc 'Configuration to use.'
10
+ desc 'Defaults to development.'
11
+ cast Symbol
12
+ end
13
+ separator ''
14
+ option :startup do
15
+ short '-s'
16
+ long '--startup'
17
+ desc 'Startup file to load.'
18
+ desc 'Defaults to "startup.rb"'
19
+ end
20
+ separator ''
21
+ end
22
+
23
+ require 'runtime/console'
24
+
25
+ begin
26
+ console = Waves::Console.load( Choice.choices )
27
+ Object.send(:define_method, :waves) { console }
28
+ require 'irb'
29
+ require 'irb/completion'
30
+ ARGV.clear
31
+ Waves.log.info "Runtime console starting ..."
32
+ IRB.start
33
+ rescue LoadError => e
34
+ puts e.message
35
+ end
@@ -0,0 +1,52 @@
1
+ require 'choice'
2
+ require 'rakegen'
3
+
4
+ waves = File.expand_path( File.dirname( __FILE__ ) / '..' / '..' )
5
+ orms = Dir[ waves / :lib / :layers / :orm / :providers / '*.rb' ].map { |path| File.basename( path, '.rb' )}
6
+ templates = Dir[ waves / :templates / '*' ].map { |path| File.basename( path ) }
7
+
8
+ Choice.options do
9
+
10
+ option :help do
11
+ long '--help'
12
+ desc 'Show this message'
13
+ end
14
+
15
+ option :orm do
16
+ short '-o'
17
+ long '--orm=ORM'
18
+ desc "Select an ORM (currently supported: #{orms * ', '} )"
19
+ valid orms
20
+ end
21
+
22
+ option :template do
23
+ short '-t'
24
+ long '--template=TEMPLATE'
25
+ desc "Select a template for your app (options: #{templates * ', '})."
26
+ valid templates
27
+ default 'classic'
28
+ end
29
+
30
+ option :name, :required => true do
31
+ short '-n'
32
+ long '--name'
33
+ desc "Select a name for the application. Use only letters, numbers, dashes, or underscores."
34
+ validate /^[\w\d\-]+$/
35
+ end
36
+
37
+ end
38
+
39
+ options = Choice.choices
40
+
41
+ puts "** Creating new Waves application ..."
42
+
43
+ # why do i have to do this?
44
+ FileUtils.mkdir( File.expand_path( options.name ) )
45
+
46
+ generator = Rakegen.new("generate") do |gen|
47
+ gen.source = waves / :templates / options.template
48
+ gen.target = File.expand_path( options.name )
49
+ gen.template_assigns = options.merge( :name => options.name.gsub('-','_').camel_case )
50
+ end.invoke
51
+
52
+ puts "** Application created!"
@@ -0,0 +1,5 @@
1
+ puts <<-HELP
2
+ Usage: waves [ gen | start | console ] [ options ]
3
+ Run a waves command with the given options. Use --help with any command to learn
4
+ more about that command. EXAMPLE: waves gen --help
5
+ HELP
@@ -39,6 +39,12 @@ Choice.options do
39
39
  desc 'Run as a daemon.'
40
40
  end
41
41
  separator ''
42
+ option :turbo do
43
+ short '-t'
44
+ long '--turbo'
45
+ desc 'For thread-safe applications, run without dispatch level mutex.'
46
+ end
47
+ separator ''
42
48
  option :debugger do
43
49
  short '-u'
44
50
  long '--debugger'
@@ -47,9 +53,16 @@ Choice.options do
47
53
  separator ''
48
54
  option :startup do
49
55
  short '-s'
50
- long '--startup'
56
+ long '--startup=PATH'
51
57
  desc 'Startup file to load.'
52
- desc 'Defaults to "lib/startup.rb"'
58
+ desc 'Defaults to "startup.rb"'
53
59
  end
60
+ separator ''
61
+ end
62
+
63
+ require 'runtime/server'
64
+ begin
65
+ Waves::Server.run( Choice.choices )
66
+ rescue LoadError => e
67
+ puts e.message
54
68
  end
55
- Waves::Server.run( Choice.choices )
@@ -2,11 +2,9 @@ module Waves
2
2
 
3
3
  module Dispatchers
4
4
 
5
- # A NotFoundError means what you think it means. The dispatchers included with Waves do not
6
- # natively intercept this exception. Instead an exception handler must be registered in the application
7
- # mappings. The Simple foundation registers a minimal handler, while the Default foundation registers
8
- # a slightly fleshier one.
9
- class NotFoundError < Exception ; end
5
+ class NotFoundError < RuntimeError ; end
6
+ class Unauthorized < RuntimeError; end
7
+ class BadRequest < RuntimeError; end
10
8
 
11
9
  # Redirect exceptions are rescued by the Waves dispatcher and used to set the
12
10
  # response status and location.
@@ -16,32 +14,35 @@ module Waves
16
14
  @path = path
17
15
  @status = status
18
16
  end
17
+ def message
18
+ "location: #{@path} status: #{@status}"
19
+ end
19
20
  end
20
21
 
21
- # Waves::Dispatchers::Base provides the basic request processing structure.
22
- # All other Waves dispatchers should inherit from it. It creates a Waves request,
23
- # determines whether to enclose the request processing in a mutex, benchmarks it,
24
- # logs it, and handles common exceptions and redirects. Derived classes need only
25
- # process the request within the +safe+ method, which must take a Waves::Request and return a Waves::Response.
26
-
22
+ #
23
+ # Waves::Dispatchers::Base provides the basic request processing structure
24
+ # for a Rack application. It creates a Waves request, determines whether
25
+ # to enclose the request processing in a mutex benchmarks it, logs it,
26
+ # and handles redirects. Derived classes need only process the request
27
+ # within the +safe+ method, which must take a Waves::Request and return
28
+ # a Waves::Response.
29
+ #
30
+
27
31
  class Base
28
32
 
29
33
  # As with any Rack application, a Waves dispatcher must provide a call method
30
- # that takes an +env+ parameter.
34
+ # that takes an +env+ hash.
31
35
  def call( env )
32
- if Waves.config.synchronize?
33
- Waves::Application.instance.synchronize { _call( env ) }
36
+ response = if Waves.synchronize? or Waves.debug?
37
+ Waves.synchronize { Waves.reload ; _call( env ) }
34
38
  else
35
39
  _call( env )
36
40
  end
37
41
  end
38
42
 
39
43
  # Called by event driven servers like thin and ebb. Returns true if
40
- # the server should run the request in a separate thread, as determined by
41
- # Configurations::Mapping#threaded?
42
- def deferred?( env )
43
- Waves::Application.instance.mapping.threaded?( env )
44
- end
44
+ # the server should run the request in a separate thread.
45
+ def deferred?( env ) ; Waves.config.resource.new( Waves::Request.new( env ) ).deferred? ; end
45
46
 
46
47
  private
47
48
 
@@ -59,7 +60,7 @@ module Waves
59
60
  Waves::Logger.info "#{request.method}: #{request.url} handled in #{(t*1000).round} ms."
60
61
  response.finish
61
62
  end
62
-
63
+
63
64
  end
64
65
 
65
66
  end