waves 0.7.6 → 0.7.7

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 (291) hide show
  1. data/app/Rakefile +64 -6
  2. data/app/configurations/development.rb.erb +2 -1
  3. data/app/configurations/mapping.rb.erb +1 -0
  4. data/app/configurations/production.rb.erb +1 -0
  5. data/app/lib/application.rb.erb +2 -2
  6. data/bin/waves +36 -1
  7. data/doc/HISTORY +44 -0
  8. data/doc/LICENSE +22 -0
  9. data/doc/rdoc/classes/Erubis/Context.html +218 -0
  10. data/doc/rdoc/classes/Kernel.html +145 -0
  11. data/doc/rdoc/classes/Symbol.html +154 -0
  12. data/doc/rdoc/classes/Tempfile.html +161 -0
  13. data/doc/rdoc/classes/Waves.html +455 -0
  14. data/doc/rdoc/classes/Waves/Application.html +371 -0
  15. data/doc/rdoc/classes/Waves/Blackboard.html +296 -0
  16. data/doc/rdoc/classes/Waves/Configurations.html +283 -0
  17. data/doc/rdoc/classes/Waves/Configurations/Base.html +209 -0
  18. data/doc/rdoc/classes/Waves/Configurations/Default.html +237 -0
  19. data/doc/rdoc/classes/Waves/Console.html +187 -0
  20. data/doc/rdoc/classes/Waves/Controllers.html +203 -0
  21. data/doc/rdoc/classes/Waves/Controllers/Base.html +151 -0
  22. data/doc/rdoc/classes/Waves/Controllers/Mixin.html +312 -0
  23. data/doc/rdoc/classes/Waves/Dispatchers.html +118 -0
  24. data/doc/rdoc/classes/Waves/Dispatchers/Base.html +198 -0
  25. data/doc/rdoc/classes/Waves/Dispatchers/Default.html +224 -0
  26. data/doc/rdoc/classes/Waves/Dispatchers/NotFoundError.html +122 -0
  27. data/doc/rdoc/classes/Waves/Dispatchers/Redirect.html +173 -0
  28. data/doc/rdoc/classes/Waves/Foundations.html +131 -0
  29. data/doc/rdoc/classes/Waves/Foundations/Default.html +179 -0
  30. data/doc/rdoc/classes/Waves/Foundations/Simple.html +167 -0
  31. data/doc/rdoc/classes/Waves/Helpers.html +176 -0
  32. data/doc/rdoc/classes/Waves/Helpers/AssetHelper.html +212 -0
  33. data/doc/rdoc/classes/Waves/Helpers/Common.html +213 -0
  34. data/doc/rdoc/classes/Waves/Helpers/Default.html +135 -0
  35. data/doc/rdoc/classes/Waves/Helpers/Form.html +201 -0
  36. data/doc/rdoc/classes/Waves/Helpers/Formatting.html +232 -0
  37. data/doc/rdoc/classes/Waves/Helpers/Model.html +194 -0
  38. data/doc/rdoc/classes/Waves/Helpers/NumberHelper.html +165 -0
  39. data/doc/rdoc/classes/Waves/Helpers/TagHelper.html +226 -0
  40. data/doc/rdoc/classes/Waves/Helpers/UrlHelper.html +242 -0
  41. data/doc/rdoc/classes/Waves/Helpers/View.html +163 -0
  42. data/doc/rdoc/classes/Waves/Inflect/InflectorMethods.html +475 -0
  43. data/doc/rdoc/classes/Waves/Layers.html +175 -0
  44. data/doc/rdoc/classes/Waves/Layers/DefaultErrors.html +161 -0
  45. data/doc/rdoc/classes/Waves/Layers/Inflect.html +119 -0
  46. data/doc/rdoc/classes/Waves/Layers/Inflect/English.html +168 -0
  47. data/doc/rdoc/classes/Waves/Layers/Inflect/English/Rules.html +112 -0
  48. data/doc/rdoc/classes/Waves/Layers/Inflect/English/StringMethods.html +194 -0
  49. data/doc/rdoc/classes/Waves/Layers/MVC.html +204 -0
  50. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord.html +239 -0
  51. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/ControllerMethods.html +246 -0
  52. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/Symbol.html +132 -0
  53. data/doc/rdoc/classes/Waves/Layers/ORM/DataMapper.html +166 -0
  54. data/doc/rdoc/classes/Waves/Layers/ORM/Filebase.html +157 -0
  55. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel.html +232 -0
  56. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel/ControllerMethods.html +246 -0
  57. data/doc/rdoc/classes/Waves/Layers/Simple.html +169 -0
  58. data/doc/rdoc/classes/Waves/Layers/SimpleErrors.html +159 -0
  59. data/doc/rdoc/classes/Waves/Logger.html +288 -0
  60. data/doc/rdoc/classes/Waves/Mapping.html +760 -0
  61. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls.html +129 -0
  62. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/GetRules.html +174 -0
  63. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/RestRules.html +180 -0
  64. data/doc/rdoc/classes/Waves/MimeTypes.html +200 -0
  65. data/doc/rdoc/classes/Waves/Renderers/Erubis.html +162 -0
  66. data/doc/rdoc/classes/Waves/Renderers/Haml.html +160 -0
  67. data/doc/rdoc/classes/Waves/Renderers/Markaby.html +167 -0
  68. data/doc/rdoc/classes/Waves/Renderers/Mixin.html +191 -0
  69. data/doc/rdoc/classes/Waves/Renderers/Scope.html +181 -0
  70. data/doc/rdoc/classes/Waves/Request.html +441 -0
  71. data/doc/rdoc/classes/Waves/Request/ParseError.html +111 -0
  72. data/doc/rdoc/classes/Waves/Response.html +283 -0
  73. data/doc/rdoc/classes/Waves/ResponseMixin.html +460 -0
  74. data/doc/rdoc/classes/Waves/ResponseProxy.html +269 -0
  75. data/doc/rdoc/classes/Waves/Server.html +488 -0
  76. data/doc/rdoc/classes/Waves/Session.html +330 -0
  77. data/doc/rdoc/classes/Waves/Utilities/Hash.html +185 -0
  78. data/doc/rdoc/classes/Waves/Utilities/Integer.html +424 -0
  79. data/doc/rdoc/classes/Waves/Utilities/Module.html +174 -0
  80. data/doc/rdoc/classes/Waves/Utilities/Object.html +155 -0
  81. data/doc/rdoc/classes/Waves/Utilities/Proc.html +145 -0
  82. data/doc/rdoc/classes/Waves/Utilities/String.html +290 -0
  83. data/doc/rdoc/classes/Waves/Views.html +278 -0
  84. data/doc/rdoc/classes/Waves/Views/Base.html +118 -0
  85. data/doc/rdoc/classes/Waves/Views/Mixin.html +279 -0
  86. data/doc/rdoc/classes/Waves/Views/NoTemplateError.html +111 -0
  87. data/doc/rdoc/created.rid +1 -0
  88. data/doc/rdoc/files/README_rdoc.html +415 -0
  89. data/doc/rdoc/files/bin/waves.html +135 -0
  90. data/doc/rdoc/files/doc/HISTORY.html +265 -0
  91. data/doc/rdoc/files/lib/commands/waves-console_rb.html +110 -0
  92. data/doc/rdoc/files/lib/commands/waves-server_rb.html +108 -0
  93. data/doc/rdoc/files/lib/controllers/base_rb.html +101 -0
  94. data/doc/rdoc/files/lib/controllers/mixin_rb.html +101 -0
  95. data/doc/rdoc/files/lib/dispatchers/base_rb.html +101 -0
  96. data/doc/rdoc/files/lib/dispatchers/default_rb.html +101 -0
  97. data/doc/rdoc/files/lib/foundations/default_rb.html +101 -0
  98. data/doc/rdoc/files/lib/foundations/simple_rb.html +101 -0
  99. data/doc/rdoc/files/lib/helpers/asset_helper_rb.html +101 -0
  100. data/doc/rdoc/files/lib/helpers/common_rb.html +101 -0
  101. data/doc/rdoc/files/lib/helpers/default_rb.html +101 -0
  102. data/doc/rdoc/files/lib/helpers/form_rb.html +101 -0
  103. data/doc/rdoc/files/lib/helpers/formatting_rb.html +108 -0
  104. data/doc/rdoc/files/lib/helpers/model_rb.html +101 -0
  105. data/doc/rdoc/files/lib/helpers/number_helper_rb.html +101 -0
  106. data/doc/rdoc/files/lib/helpers/tag_helper_rb.html +101 -0
  107. data/doc/rdoc/files/lib/helpers/url_helper_rb.html +101 -0
  108. data/doc/rdoc/files/lib/helpers/view_rb.html +101 -0
  109. data/doc/rdoc/files/lib/layers/default_errors_rb.html +101 -0
  110. data/doc/rdoc/files/lib/layers/inflect/english/rules_rb.html +101 -0
  111. data/doc/rdoc/files/lib/layers/inflect/english/string_rb.html +101 -0
  112. data/doc/rdoc/files/lib/layers/inflect/english_rb.html +109 -0
  113. data/doc/rdoc/files/lib/layers/mvc_rb.html +101 -0
  114. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/generate_rb.html +101 -0
  115. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/schema_rb.html +101 -0
  116. data/doc/rdoc/files/lib/layers/orm/active_record_rb.html +108 -0
  117. data/doc/rdoc/files/lib/layers/orm/data_mapper_rb.html +108 -0
  118. data/doc/rdoc/files/lib/layers/orm/filebase_rb.html +101 -0
  119. data/doc/rdoc/files/lib/layers/orm/migration_rb.html +101 -0
  120. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/generate_rb.html +101 -0
  121. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/schema_rb.html +101 -0
  122. data/doc/rdoc/files/lib/layers/orm/sequel_rb.html +108 -0
  123. data/doc/rdoc/files/lib/layers/simple_errors_rb.html +101 -0
  124. data/doc/rdoc/files/lib/layers/simple_rb.html +101 -0
  125. data/doc/rdoc/files/lib/mapping/mapping_rb.html +101 -0
  126. data/doc/rdoc/files/lib/mapping/pretty_urls_rb.html +101 -0
  127. data/doc/rdoc/files/lib/renderers/erubis_rb.html +108 -0
  128. data/doc/rdoc/files/lib/renderers/haml_rb.html +108 -0
  129. data/doc/rdoc/files/lib/renderers/markaby_rb.html +108 -0
  130. data/doc/rdoc/files/lib/renderers/mixin_rb.html +101 -0
  131. data/doc/rdoc/files/lib/runtime/application_rb.html +107 -0
  132. data/doc/rdoc/files/lib/runtime/blackboard_rb.html +101 -0
  133. data/doc/rdoc/files/lib/runtime/configuration_rb.html +101 -0
  134. data/doc/rdoc/files/lib/runtime/console_rb.html +101 -0
  135. data/doc/rdoc/files/lib/runtime/debugger_rb.html +101 -0
  136. data/doc/rdoc/files/lib/runtime/logger_rb.html +108 -0
  137. data/doc/rdoc/files/lib/runtime/mime_types_rb.html +101 -0
  138. data/doc/rdoc/files/lib/runtime/request_rb.html +101 -0
  139. data/doc/rdoc/files/lib/runtime/response_mixin_rb.html +101 -0
  140. data/doc/rdoc/files/lib/runtime/response_proxy_rb.html +101 -0
  141. data/doc/rdoc/files/lib/runtime/response_rb.html +101 -0
  142. data/doc/rdoc/files/lib/runtime/server_rb.html +108 -0
  143. data/doc/rdoc/files/lib/runtime/session_rb.html +101 -0
  144. data/doc/rdoc/files/lib/tasks/cluster_rb.html +101 -0
  145. data/doc/rdoc/files/lib/tasks/gem_rb.html +108 -0
  146. data/doc/rdoc/files/lib/tasks/generate_rb.html +101 -0
  147. data/doc/rdoc/files/lib/utilities/hash_rb.html +101 -0
  148. data/doc/rdoc/files/lib/utilities/inflect_rb.html +111 -0
  149. data/doc/rdoc/files/lib/utilities/integer_rb.html +101 -0
  150. data/doc/rdoc/files/lib/utilities/module_rb.html +101 -0
  151. data/doc/rdoc/files/lib/utilities/object_rb.html +101 -0
  152. data/doc/rdoc/files/lib/utilities/proc_rb.html +101 -0
  153. data/doc/rdoc/files/lib/utilities/string_rb.html +101 -0
  154. data/doc/rdoc/files/lib/utilities/symbol_rb.html +101 -0
  155. data/doc/rdoc/files/lib/utilities/tempfile_rb.html +115 -0
  156. data/doc/rdoc/files/lib/views/base_rb.html +101 -0
  157. data/doc/rdoc/files/lib/views/mixin_rb.html +101 -0
  158. data/doc/rdoc/files/lib/waves_rb.html +195 -0
  159. data/doc/rdoc/fr_class_index.html +104 -0
  160. data/doc/rdoc/fr_file_index.html +97 -0
  161. data/doc/rdoc/fr_method_index.html +233 -0
  162. data/doc/rdoc/index.html +24 -0
  163. data/doc/rdoc/rdoc-style.css +208 -0
  164. data/lib/foundations/default.rb +1 -0
  165. data/lib/layers/default_errors.rb +10 -13
  166. data/lib/layers/inflect/english.rb +24 -0
  167. data/lib/layers/inflect/english/rules.rb +88 -0
  168. data/lib/layers/inflect/english/string.rb +24 -0
  169. data/lib/layers/mvc.rb +31 -35
  170. data/lib/layers/orm/active_record.rb +83 -32
  171. data/lib/layers/orm/active_record/tasks/generate.rb +28 -0
  172. data/lib/layers/orm/active_record/tasks/schema.rb +7 -15
  173. data/lib/layers/orm/data_mapper.rb +12 -16
  174. data/lib/layers/orm/migration.rb +20 -11
  175. data/lib/layers/orm/sequel.rb +53 -49
  176. data/lib/layers/orm/sequel/tasks/generate.rb +28 -0
  177. data/lib/layers/orm/sequel/tasks/schema.rb +6 -14
  178. data/lib/layers/simple.rb +6 -13
  179. data/lib/layers/simple_errors.rb +5 -8
  180. data/lib/renderers/haml.rb +45 -0
  181. data/lib/runtime/application.rb +0 -2
  182. data/lib/tasks/cluster.rb +1 -1
  183. data/lib/utilities/inflect.rb +86 -168
  184. data/lib/utilities/integer.rb +23 -16
  185. data/lib/utilities/module.rb +19 -15
  186. data/lib/utilities/object.rb +22 -14
  187. data/lib/utilities/proc.rb +13 -7
  188. data/lib/utilities/string.rb +0 -12
  189. data/lib/utilities/symbol.rb +4 -1
  190. data/lib/utilities/tempfile.rb +9 -0
  191. data/lib/waves.rb +3 -1
  192. data/samples/blog/Rakefile +14 -0
  193. data/samples/blog/bin/waves-console +3 -0
  194. data/samples/blog/bin/waves-server +3 -0
  195. data/samples/blog/blog.db +0 -0
  196. data/samples/blog/configurations/development.rb +31 -0
  197. data/samples/blog/configurations/mapping.rb +23 -0
  198. data/samples/blog/configurations/production.rb +30 -0
  199. data/samples/blog/doc/EMTPY +0 -0
  200. data/samples/blog/lib/application.rb +5 -0
  201. data/samples/blog/models/comment.rb +14 -0
  202. data/samples/blog/models/entry.rb +14 -0
  203. data/samples/blog/public/css/site.css +2 -0
  204. data/samples/blog/public/javascript/site.js +13 -0
  205. data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
  206. data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
  207. data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
  208. data/samples/blog/startup.rb +6 -0
  209. data/samples/blog/templates/comment/add.mab +10 -0
  210. data/samples/blog/templates/comment/list.mab +6 -0
  211. data/samples/blog/templates/entry/editor.mab +13 -0
  212. data/samples/blog/templates/entry/list.mab +11 -0
  213. data/samples/blog/templates/entry/show.mab +9 -0
  214. data/samples/blog/templates/entry/summary.mab +5 -0
  215. data/samples/blog/templates/errors/not_found_404.mab +2 -0
  216. data/samples/blog/templates/errors/server_error_500.mab +2 -0
  217. data/samples/blog/templates/layouts/default.mab +17 -0
  218. data/samples/jub/Rakefile +72 -0
  219. data/samples/jub/bin/waves-console +4 -0
  220. data/samples/jub/bin/waves-server +4 -0
  221. data/samples/jub/configurations/development.rb +31 -0
  222. data/samples/jub/configurations/mapping.rb +18 -0
  223. data/samples/jub/configurations/production.rb +31 -0
  224. data/samples/jub/lib/application.rb +5 -0
  225. data/samples/jub/startup.rb +6 -0
  226. data/samples/jub/templates/errors/not_found_404.mab +2 -0
  227. data/samples/jub/templates/errors/server_error_500.mab +2 -0
  228. data/samples/jub/templates/layouts/default.mab +14 -0
  229. data/verify/app_generation/helpers.rb +24 -0
  230. data/verify/app_generation/startup.rb +39 -0
  231. data/verify/blackboard/blackboard_verify.rb +92 -0
  232. data/verify/blackboard/helpers.rb +5 -0
  233. data/verify/configurations/attributes.rb +37 -0
  234. data/verify/configurations/helpers.rb +1 -0
  235. data/verify/configurations/rack_integration.rb +29 -0
  236. data/verify/controllers/base.rb +37 -0
  237. data/verify/controllers/helpers.rb +13 -0
  238. data/verify/controllers/interface.rb +51 -0
  239. data/verify/core/helpers.rb +3 -0
  240. data/verify/core/utilities.rb +177 -0
  241. data/verify/foundations/default.rb +86 -0
  242. data/verify/foundations/default_application/Rakefile +14 -0
  243. data/verify/foundations/default_application/bin/waves-console +3 -0
  244. data/verify/foundations/default_application/bin/waves-server +3 -0
  245. data/verify/foundations/default_application/configurations/development.rb +26 -0
  246. data/verify/foundations/default_application/configurations/mapping.rb +14 -0
  247. data/verify/foundations/default_application/configurations/production.rb +30 -0
  248. data/verify/foundations/default_application/controllers/default.rb +15 -0
  249. data/verify/foundations/default_application/controllers/loaded.rb +15 -0
  250. data/verify/foundations/default_application/defaultapplication.db +0 -0
  251. data/verify/foundations/default_application/helpers/loaded.rb +10 -0
  252. data/verify/foundations/default_application/lib/application.rb +5 -0
  253. data/verify/foundations/default_application/models/default.rb +13 -0
  254. data/verify/foundations/default_application/models/loaded.rb +13 -0
  255. data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +9 -0
  256. data/verify/foundations/default_application/startup.rb +7 -0
  257. data/verify/foundations/default_application/templates/errors/not_found_404.mab +2 -0
  258. data/verify/foundations/default_application/templates/errors/server_error_500.mab +2 -0
  259. data/verify/foundations/default_application/templates/layouts/default.mab +14 -0
  260. data/verify/foundations/default_application/views/default.rb +7 -0
  261. data/verify/foundations/default_application/views/loaded.rb +15 -0
  262. data/verify/foundations/helpers.rb +1 -0
  263. data/verify/foundations/simple.rb +25 -0
  264. data/verify/helpers.rb +76 -0
  265. data/verify/layers/data_mapper/association_verify.rb +87 -0
  266. data/verify/layers/default_errors.rb +29 -0
  267. data/verify/layers/helpers.rb +1 -0
  268. data/verify/layers/migration.rb +33 -0
  269. data/verify/layers/sequel/model.rb +41 -0
  270. data/verify/layers/sequeltest.db +0 -0
  271. data/verify/mapping/always.rb +19 -0
  272. data/verify/mapping/filters.rb +65 -0
  273. data/verify/mapping/handle.rb +24 -0
  274. data/verify/mapping/helpers.rb +7 -0
  275. data/verify/mapping/matches.rb +27 -0
  276. data/verify/mapping/named.rb +29 -0
  277. data/verify/mapping/options.rb +17 -0
  278. data/verify/mapping/path.rb +40 -0
  279. data/verify/mapping/response_proxy.rb +50 -0
  280. data/verify/mapping/threaded.rb +25 -0
  281. data/verify/requests/helpers.rb +16 -0
  282. data/verify/requests/request.rb +73 -0
  283. data/verify/requests/response.rb +59 -0
  284. data/verify/requests/session.rb +54 -0
  285. data/verify/views/helpers.rb +1 -0
  286. data/verify/views/rendering.rb +34 -0
  287. data/verify/views/templates/foo.erb +0 -0
  288. data/verify/views/templates/moo.erb +0 -0
  289. data/verify/views/templates/moo.mab +0 -0
  290. metadata +597 -224
  291. data/lib/utilities/kernel.rb +0 -34
@@ -0,0 +1,111 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Waves::Views::NoTemplateError</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Waves::Views::NoTemplateError</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../files/lib/views/mixin_rb.html">
59
+ lib/views/mixin.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Exception
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+
82
+
83
+ </div>
84
+
85
+
86
+ </div>
87
+
88
+
89
+ <!-- if includes -->
90
+
91
+ <div id="section">
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <!-- if method_list -->
101
+
102
+
103
+ </div>
104
+
105
+
106
+ <div id="validator-badges">
107
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
108
+ </div>
109
+
110
+ </body>
111
+ </html>
@@ -0,0 +1 @@
1
+ Fri, 11 Jul 2008 16:51:25 -0500
@@ -0,0 +1,415 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: README.rdoc</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>README.rdoc</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>README.rdoc
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Fri Jul 11 16:43:28 -0500 2008</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+ <div id="description">
72
+ <h1><a href="../classes/Waves.html">Waves</a></h1>
73
+ <p>
74
+ An open source framework for building web-applications with Ruby.
75
+ </p>
76
+ <p>
77
+ <a href="../classes/Waves.html">Waves</a> is &#8230; Full-featured and
78
+ thread-safe. Compact and extensible. Configuration <b>and</b> convention.
79
+ RESTful but also Magical (very important).
80
+ </p>
81
+ <p>
82
+ <a href="../classes/Waves.html">Waves</a> is powered by &#8230; Rack and
83
+ Mongrel (HTTP server), Sequel or Filebase (storage), AutoCode (code
84
+ reloading), LiveConsole (hot patching).
85
+ </p>
86
+ <h2>Links</h2>
87
+ <ul>
88
+ <li><a href="http://rubywaves.com/">Web Site</a>
89
+
90
+ <ul>
91
+ <li><a href="http://rubywaves.com/tutorial">Tutorial</a>
92
+
93
+ </li>
94
+ <li><a href="http://rubywaves.com/credits">Contributors</a>
95
+
96
+ </li>
97
+ </ul>
98
+ </li>
99
+ <li><a href="http://github.com/dyoder/waves">Source</a>
100
+
101
+ </li>
102
+ <li><a href="http://waves.lighthouseapp.com">Issue tracker</a>
103
+
104
+ </li>
105
+ <li><a href="http://groups.google.com/group/rubywaves/">Mailing List</a>
106
+
107
+ </li>
108
+ <li><a href="http://rubyforge.org/projects/waves/">RubyForge</a>
109
+
110
+ </li>
111
+ <li><a href="http://waves.rubyforge.org/">RDoc</a>
112
+
113
+ </li>
114
+ </ul>
115
+ <h2>Bootstrap!</h2>
116
+ <h3>Get <a href="../classes/Waves.html">Waves</a></h3>
117
+ <pre>
118
+ # latest release from Rubyforge
119
+ gem install waves
120
+
121
+ # relatively recent gem build from master on GitHub
122
+ gem install dyoder-waves --source=http://gems.github.com
123
+
124
+ # get the framework source
125
+ git clone git://github.com/dyoder/waves.git
126
+ cd waves
127
+ rake setup # install gem dependencies needed to work from source
128
+ </pre>
129
+ <h3>Generate an application</h3>
130
+ <pre>
131
+ # working from gems
132
+ waves ~/dev/web/killer_app
133
+
134
+ # working from source
135
+ ./bin/waves ~/dev/web/killer_app
136
+ </pre>
137
+ <p>
138
+ This generates a default application in the target directory. The
139
+ application module&#8216;s name is the constant-cased version of the target
140
+ directory basename, in this case KillerApp.
141
+ </p>
142
+ <h3>Configure basic settings</h3>
143
+ <p>
144
+ Configure your database connection using the <tt>database</tt> attribute in
145
+ <tt>configurations/development.rb</tt>. The default ORM is currently
146
+ Sequel, but there are other ORM layers in the works. The value of
147
+ <tt>database</tt> is used with <a
148
+ href="http://sequel.rubyforge.org/classes/Sequel.html#M000069">Sequel.connect</a>.
149
+ Sequel&#8216;s current documentation seems to favor a URL-style argument,
150
+ but we have been getting along fine with a hash.
151
+ </p>
152
+ <pre>
153
+ # With the Sequel sqlite adapter, the :database parameter is read as a path
154
+ # relative to the application root.
155
+ database :adapter =&gt; 'sqlite', :database =&gt; 'killer_app.db'
156
+ </pre>
157
+ <p>
158
+ Create the initial db schema. You can create a <a
159
+ href="http://sequel.rubyforge.org/classes/Sequel/Migration.html">Sequel
160
+ migration</a> with:
161
+ </p>
162
+ <pre>
163
+ rake schema:migration name=users
164
+ vi schema/migrations/001_users.rb
165
+ </pre>
166
+ <p>
167
+ And you can run migrations with:
168
+ </p>
169
+ <pre>
170
+ rake schema:migrate
171
+
172
+ # or with a version number
173
+ rake schema:migrate version=1
174
+ </pre>
175
+ <h3>Mappings</h3>
176
+ <p>
177
+ Mappings are the <a href="../classes/Waves.html">Waves</a> equivalent to
178
+ routes. An individual mapping consists of a request-matching construct and
179
+ an arbitrary block. When a request matches a mapping, <a
180
+ href="../classes/Waves.html">Waves</a> runs that block. In the simplest
181
+ case, you do all the response work in the block, a la <a
182
+ href="http://sinatrarb.com/Home">Sinatra</a>. The standard <a
183
+ href="../classes/Waves.html">Waves</a> application also offers an MVC
184
+ infrastructure, with a silent R for Resource.
185
+ </p>
186
+ <p>
187
+ An application&#8216;s mappings live in <tt>configurations/mapping.rb</tt>.
188
+ The generated default mixes in some RESTy mappings as a helpful starter:
189
+ </p>
190
+ <ul>
191
+ <li><a
192
+ href="../classes/Waves/Mapping/PrettyUrls/RestRules.html">Waves::Mapping::PrettyUrls::RestRules</a>
193
+
194
+ </li>
195
+ <li><a
196
+ href="../classes/Waves/Mapping/PrettyUrls/GetRules.html">Waves::Mapping::PrettyUrls::GetRules</a>
197
+
198
+ </li>
199
+ </ul>
200
+ <p>
201
+ Here&#8216;s an example of a mapping adapted from GetRules:
202
+ </p>
203
+ <pre>
204
+ # define some regexes
205
+ model_regex = '([\w\-]+)'
206
+ name_regex = '([\w\-\_\.\+\@]+)';
207
+
208
+ # display the given resource for the given model
209
+ path %r{^/#{model_regex}/#{name_regex}/?$}, :method =&gt; :get do | model, name |
210
+ resource( model ) do
211
+ controller { find( name ) } | view { |data| show( model =&gt; data ) }
212
+ end
213
+ end
214
+ </pre>
215
+ <p>
216
+ For convenience, we defined regexes to match the model and name components
217
+ of a path. The <tt>path</tt> method registers a block for use with requests
218
+ where the path matches the supplied regex and where the HTTP method is GET.
219
+ The parameters passed to the block are the MatchData captures, i.e. the
220
+ strings caught by <tt>model_regex</tt> and <tt>name_regex</tt>. Note that
221
+ you can supply strings instead of regexes to match exact text. There is
222
+ also a <tt>url</tt> method for matching against the entire URL.
223
+ </p>
224
+ <p>
225
+ So a GET to &quot;/user/vyvyan&quot;, for example, will pass
226
+ &quot;user&quot; and &quot;vyvyan&quot; to the block as the model and name
227
+ parameters, respectively.
228
+ </p>
229
+ <p>
230
+ The <tt>resource</tt> method uses its argument to determine which
231
+ controller and view will be instantiated for work done in its block. Thus
232
+ using the example above, we instantiate KillerApp::Controllers::User when
233
+ we call <tt>controller</tt> and KillerApp::Views::User when we call
234
+ <tt>view</tt>.
235
+ </p>
236
+ <p>
237
+ The &quot;|&quot; character, as seen between the controller and view
238
+ invocations, is a method that causes the result of the controller block to
239
+ be passed into the view block. Thus, in the controller block, an instance
240
+ of Controllers::User calls its <tt>find</tt> method with &quot;vyvyan&quot;
241
+ as the argument. The resulting object is passed to an instance of
242
+ Views::User, which calls <tt>show( &quot;user&quot; =&gt; &lt;some user
243
+ object&gt;)</tt>.
244
+ </p>
245
+ <p>
246
+ When undefined methods are called on a View, it attempts to render a
247
+ template named after the method, with the method argument passed into the
248
+ renderer as instance variables. In the present example, the view will try
249
+ to render <tt>templates/user/show.mab</tt> (or show.erb), providing it with
250
+ @user = &lt;the user object&gt;. You can, of course, define methods in the
251
+ View to override this.
252
+ </p>
253
+ <p>
254
+ You can also register <tt>before</tt>, <tt>after</tt>, <tt>wrap</tt>, and
255
+ <tt>always</tt> mappings, with the same flexibility in matching requests.
256
+ The <tt>handle</tt> method registers exception handling blocks, matching
257
+ the exception class as well as the usual request attributes.
258
+ </p>
259
+ <p>
260
+ For more complete documentation, see <a
261
+ href="../classes/Waves/Mapping.html">Waves::Mapping</a>.
262
+ </p>
263
+ <h2>Running an application</h2>
264
+ <pre>
265
+ cd killer_app
266
+
267
+ # defaults to running on 127.0.0.1:3000, using the development config, not daemonized.
268
+ waves-server -h 0.0.0.0 -p 3001 -c production --daemon
269
+ </pre>
270
+ <p>
271
+ There are also rake tasks for running a cluster:
272
+ </p>
273
+ <pre>
274
+ rake cluster:start mode=production # will read the Production config to determine which ports.
275
+ </pre>
276
+ <p>
277
+ You can work in an irb-based console:
278
+ </p>
279
+ <pre>
280
+ waves-console # or bin/waves-console
281
+ </pre>
282
+ <h2>Freeze it. Freeze it real good.</h2>
283
+ <p>
284
+ When deploying an application or when running off a copy of <a
285
+ href="../classes/Waves.html">Waves</a> source, you may need to freeze the
286
+ app to a specific version of <a href="../classes/Waves.html">Waves</a>.
287
+ Applications look for framework source in ./waves before falling back on
288
+ the gem. You can freeze the framework to this location using the rake tasks
289
+ <tt>waves:freeze</tt> and <tt>waves:freeze:current</tt>.
290
+ </p>
291
+ <pre>
292
+ # copy the specified framework source to killer_app/waves
293
+ rake waves:freeze src=/path/to/waves
294
+
295
+ # figure out whatever framework source your app happens to be using and copy it to killer_app/waves
296
+ rake waves:freeze:current
297
+ </pre>
298
+ <p>
299
+ Unfreeze using <tt>rake waves:unfreeze</tt>, or just delete the ./waves
300
+ directory if you&#8216;re feeling obvious.
301
+ </p>
302
+ <h2>Where the Wavy Things Are</h2>
303
+ <p>
304
+ A <a href="../classes/Waves.html">Waves</a> application consists of a Ruby
305
+ module structured with internal namespaces. Thus:
306
+ </p>
307
+ <pre>
308
+ KillerApp::Configurations
309
+ KillerApp::Controllers
310
+ KillerApp::Helpers
311
+ KillerApp::Models
312
+ KillerApp::Views
313
+ </pre>
314
+ <p>
315
+ As you might have guessed, the working classes live in these namespaces.
316
+ E.g. <tt>KillerApp::Models::User</tt>.
317
+ </p>
318
+ <p>
319
+ The otherwise harsh birth and life of these working classes is softened by
320
+ <a href="http://autocode.rubyforge.org/">AutoCode</a>, a sort of
321
+ mini-Industrial Revolution for Ruby constants. The <a
322
+ href="../classes/Waves.html">Waves</a> framework uses AutoCode to
323
+ automatically generate controllers, models, views, etc. the first time each
324
+ constant is needed by the application. <a
325
+ href="../classes/Waves.html">Waves</a> looks for a file in a path that
326
+ corresponds to the namespaced constant name. If such exists, it gets
327
+ loaded. If not, <a href="../classes/Waves.html">Waves</a> creates the class
328
+ or module from sensible defaults.
329
+ </p>
330
+ <p>
331
+ For example, when a <a href="../classes/Waves.html">Waves</a> application
332
+ encounters <tt>KillerApp::Views::MonkeyShines</tt> for the first time, it
333
+ tries to load it from <tt>./views/monkey_shines.rb</tt>. If that file does
334
+ not exist, the app creates <tt>KillerApp::Views::MonkeyShines</tt> as a
335
+ dupe of <tt><a
336
+ href="../classes/Waves/Views/Base.html">Waves::Views::Base</a></tt>.
337
+ </p>
338
+ <p>
339
+ The result is that you only need to define models, views, etc. <em>when the
340
+ default behavior stops meeting your needs.</em>
341
+ </p>
342
+ <h3>Directory structure</h3>
343
+ <pre>
344
+ ./
345
+ bin/
346
+ waves-console
347
+ waves-server
348
+ configurations/ # auto_load defined for Mapping; (auto_load || auto_create) anything else
349
+ controllers/ # (auto_load || auto_create)
350
+ helpers/ # (auto_load || auto_create)
351
+ lib/
352
+ application.rb # Application requires and includes, plus your configuration needs.
353
+ tasks/ # .rb and .rake files in here are automatically required by the main Rakefile
354
+ models/ # (auto_load || auto_create)
355
+ schema/
356
+ migrations/
357
+ startup.rb # Framework setup. Don't touch.
358
+ templates/ # Views expect templates to live here.
359
+ views/ # (auto_load || auto_create)
360
+ </pre>
361
+ <h3>Web Server</h3>
362
+ <p>
363
+ You can run on any {Rack-supported Web server}[], including Thin and
364
+ Mongrel. Just edit your configuration file, like you did for your database
365
+ settings(<tt>configurations/development.rb) and change the
366
+ &lt;tt&gt;handler</tt> parameter. The default is Mongrel. For example, to
367
+ switch to Thin:
368
+ </p>
369
+ <pre>
370
+ handler ::Rack::Handler::Thin, :Host =&gt; host, :Port =&gt; port
371
+ </pre>
372
+ <p>
373
+ In addition, you can also configure your Rack application the same way.
374
+ Just edit the <tt>application</tt> parameter:
375
+ </p>
376
+ <pre>
377
+ application do
378
+ use ::Rack::ShowExceptions
379
+ use Rack::CommonLogger
380
+ run ::Waves::Dispatchers::Default.new
381
+ end
382
+ </pre>
383
+
384
+ </div>
385
+
386
+
387
+ </div>
388
+
389
+
390
+ </div>
391
+
392
+
393
+ <!-- if includes -->
394
+
395
+ <div id="section">
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+ <!-- if method_list -->
405
+
406
+
407
+ </div>
408
+
409
+
410
+ <div id="validator-badges">
411
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
412
+ </div>
413
+
414
+ </body>
415
+ </html>