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.
- data/app/Rakefile +64 -6
- data/app/configurations/development.rb.erb +2 -1
- data/app/configurations/mapping.rb.erb +1 -0
- data/app/configurations/production.rb.erb +1 -0
- data/app/lib/application.rb.erb +2 -2
- data/bin/waves +36 -1
- data/doc/HISTORY +44 -0
- data/doc/LICENSE +22 -0
- data/doc/rdoc/classes/Erubis/Context.html +218 -0
- data/doc/rdoc/classes/Kernel.html +145 -0
- data/doc/rdoc/classes/Symbol.html +154 -0
- data/doc/rdoc/classes/Tempfile.html +161 -0
- data/doc/rdoc/classes/Waves.html +455 -0
- data/doc/rdoc/classes/Waves/Application.html +371 -0
- data/doc/rdoc/classes/Waves/Blackboard.html +296 -0
- data/doc/rdoc/classes/Waves/Configurations.html +283 -0
- data/doc/rdoc/classes/Waves/Configurations/Base.html +209 -0
- data/doc/rdoc/classes/Waves/Configurations/Default.html +237 -0
- data/doc/rdoc/classes/Waves/Console.html +187 -0
- data/doc/rdoc/classes/Waves/Controllers.html +203 -0
- data/doc/rdoc/classes/Waves/Controllers/Base.html +151 -0
- data/doc/rdoc/classes/Waves/Controllers/Mixin.html +312 -0
- data/doc/rdoc/classes/Waves/Dispatchers.html +118 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Base.html +198 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Default.html +224 -0
- data/doc/rdoc/classes/Waves/Dispatchers/NotFoundError.html +122 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Redirect.html +173 -0
- data/doc/rdoc/classes/Waves/Foundations.html +131 -0
- data/doc/rdoc/classes/Waves/Foundations/Default.html +179 -0
- data/doc/rdoc/classes/Waves/Foundations/Simple.html +167 -0
- data/doc/rdoc/classes/Waves/Helpers.html +176 -0
- data/doc/rdoc/classes/Waves/Helpers/AssetHelper.html +212 -0
- data/doc/rdoc/classes/Waves/Helpers/Common.html +213 -0
- data/doc/rdoc/classes/Waves/Helpers/Default.html +135 -0
- data/doc/rdoc/classes/Waves/Helpers/Form.html +201 -0
- data/doc/rdoc/classes/Waves/Helpers/Formatting.html +232 -0
- data/doc/rdoc/classes/Waves/Helpers/Model.html +194 -0
- data/doc/rdoc/classes/Waves/Helpers/NumberHelper.html +165 -0
- data/doc/rdoc/classes/Waves/Helpers/TagHelper.html +226 -0
- data/doc/rdoc/classes/Waves/Helpers/UrlHelper.html +242 -0
- data/doc/rdoc/classes/Waves/Helpers/View.html +163 -0
- data/doc/rdoc/classes/Waves/Inflect/InflectorMethods.html +475 -0
- data/doc/rdoc/classes/Waves/Layers.html +175 -0
- data/doc/rdoc/classes/Waves/Layers/DefaultErrors.html +161 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect.html +119 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English.html +168 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English/Rules.html +112 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English/StringMethods.html +194 -0
- data/doc/rdoc/classes/Waves/Layers/MVC.html +204 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord.html +239 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/ControllerMethods.html +246 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/Symbol.html +132 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/DataMapper.html +166 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Filebase.html +157 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Sequel.html +232 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Sequel/ControllerMethods.html +246 -0
- data/doc/rdoc/classes/Waves/Layers/Simple.html +169 -0
- data/doc/rdoc/classes/Waves/Layers/SimpleErrors.html +159 -0
- data/doc/rdoc/classes/Waves/Logger.html +288 -0
- data/doc/rdoc/classes/Waves/Mapping.html +760 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls.html +129 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/GetRules.html +174 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/RestRules.html +180 -0
- data/doc/rdoc/classes/Waves/MimeTypes.html +200 -0
- data/doc/rdoc/classes/Waves/Renderers/Erubis.html +162 -0
- data/doc/rdoc/classes/Waves/Renderers/Haml.html +160 -0
- data/doc/rdoc/classes/Waves/Renderers/Markaby.html +167 -0
- data/doc/rdoc/classes/Waves/Renderers/Mixin.html +191 -0
- data/doc/rdoc/classes/Waves/Renderers/Scope.html +181 -0
- data/doc/rdoc/classes/Waves/Request.html +441 -0
- data/doc/rdoc/classes/Waves/Request/ParseError.html +111 -0
- data/doc/rdoc/classes/Waves/Response.html +283 -0
- data/doc/rdoc/classes/Waves/ResponseMixin.html +460 -0
- data/doc/rdoc/classes/Waves/ResponseProxy.html +269 -0
- data/doc/rdoc/classes/Waves/Server.html +488 -0
- data/doc/rdoc/classes/Waves/Session.html +330 -0
- data/doc/rdoc/classes/Waves/Utilities/Hash.html +185 -0
- data/doc/rdoc/classes/Waves/Utilities/Integer.html +424 -0
- data/doc/rdoc/classes/Waves/Utilities/Module.html +174 -0
- data/doc/rdoc/classes/Waves/Utilities/Object.html +155 -0
- data/doc/rdoc/classes/Waves/Utilities/Proc.html +145 -0
- data/doc/rdoc/classes/Waves/Utilities/String.html +290 -0
- data/doc/rdoc/classes/Waves/Views.html +278 -0
- data/doc/rdoc/classes/Waves/Views/Base.html +118 -0
- data/doc/rdoc/classes/Waves/Views/Mixin.html +279 -0
- data/doc/rdoc/classes/Waves/Views/NoTemplateError.html +111 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README_rdoc.html +415 -0
- data/doc/rdoc/files/bin/waves.html +135 -0
- data/doc/rdoc/files/doc/HISTORY.html +265 -0
- data/doc/rdoc/files/lib/commands/waves-console_rb.html +110 -0
- data/doc/rdoc/files/lib/commands/waves-server_rb.html +108 -0
- data/doc/rdoc/files/lib/controllers/base_rb.html +101 -0
- data/doc/rdoc/files/lib/controllers/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/dispatchers/base_rb.html +101 -0
- data/doc/rdoc/files/lib/dispatchers/default_rb.html +101 -0
- data/doc/rdoc/files/lib/foundations/default_rb.html +101 -0
- data/doc/rdoc/files/lib/foundations/simple_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/asset_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/common_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/default_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/form_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/formatting_rb.html +108 -0
- data/doc/rdoc/files/lib/helpers/model_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/number_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/tag_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/url_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/view_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/default_errors_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english/rules_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english/string_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english_rb.html +109 -0
- data/doc/rdoc/files/lib/layers/mvc_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record/tasks/schema_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/orm/data_mapper_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/orm/filebase_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/migration_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel/tasks/schema_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/simple_errors_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/simple_rb.html +101 -0
- data/doc/rdoc/files/lib/mapping/mapping_rb.html +101 -0
- data/doc/rdoc/files/lib/mapping/pretty_urls_rb.html +101 -0
- data/doc/rdoc/files/lib/renderers/erubis_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/haml_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/markaby_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/application_rb.html +107 -0
- data/doc/rdoc/files/lib/runtime/blackboard_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/configuration_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/console_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/debugger_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/logger_rb.html +108 -0
- data/doc/rdoc/files/lib/runtime/mime_types_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/request_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_proxy_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/server_rb.html +108 -0
- data/doc/rdoc/files/lib/runtime/session_rb.html +101 -0
- data/doc/rdoc/files/lib/tasks/cluster_rb.html +101 -0
- data/doc/rdoc/files/lib/tasks/gem_rb.html +108 -0
- data/doc/rdoc/files/lib/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/hash_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/inflect_rb.html +111 -0
- data/doc/rdoc/files/lib/utilities/integer_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/module_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/object_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/proc_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/string_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/symbol_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/tempfile_rb.html +115 -0
- data/doc/rdoc/files/lib/views/base_rb.html +101 -0
- data/doc/rdoc/files/lib/views/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/waves_rb.html +195 -0
- data/doc/rdoc/fr_class_index.html +104 -0
- data/doc/rdoc/fr_file_index.html +97 -0
- data/doc/rdoc/fr_method_index.html +233 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/lib/foundations/default.rb +1 -0
- data/lib/layers/default_errors.rb +10 -13
- data/lib/layers/inflect/english.rb +24 -0
- data/lib/layers/inflect/english/rules.rb +88 -0
- data/lib/layers/inflect/english/string.rb +24 -0
- data/lib/layers/mvc.rb +31 -35
- data/lib/layers/orm/active_record.rb +83 -32
- data/lib/layers/orm/active_record/tasks/generate.rb +28 -0
- data/lib/layers/orm/active_record/tasks/schema.rb +7 -15
- data/lib/layers/orm/data_mapper.rb +12 -16
- data/lib/layers/orm/migration.rb +20 -11
- data/lib/layers/orm/sequel.rb +53 -49
- data/lib/layers/orm/sequel/tasks/generate.rb +28 -0
- data/lib/layers/orm/sequel/tasks/schema.rb +6 -14
- data/lib/layers/simple.rb +6 -13
- data/lib/layers/simple_errors.rb +5 -8
- data/lib/renderers/haml.rb +45 -0
- data/lib/runtime/application.rb +0 -2
- data/lib/tasks/cluster.rb +1 -1
- data/lib/utilities/inflect.rb +86 -168
- data/lib/utilities/integer.rb +23 -16
- data/lib/utilities/module.rb +19 -15
- data/lib/utilities/object.rb +22 -14
- data/lib/utilities/proc.rb +13 -7
- data/lib/utilities/string.rb +0 -12
- data/lib/utilities/symbol.rb +4 -1
- data/lib/utilities/tempfile.rb +9 -0
- data/lib/waves.rb +3 -1
- data/samples/blog/Rakefile +14 -0
- data/samples/blog/bin/waves-console +3 -0
- data/samples/blog/bin/waves-server +3 -0
- data/samples/blog/blog.db +0 -0
- data/samples/blog/configurations/development.rb +31 -0
- data/samples/blog/configurations/mapping.rb +23 -0
- data/samples/blog/configurations/production.rb +30 -0
- data/samples/blog/doc/EMTPY +0 -0
- data/samples/blog/lib/application.rb +5 -0
- data/samples/blog/models/comment.rb +14 -0
- data/samples/blog/models/entry.rb +14 -0
- data/samples/blog/public/css/site.css +2 -0
- data/samples/blog/public/javascript/site.js +13 -0
- data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
- data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
- data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
- data/samples/blog/startup.rb +6 -0
- data/samples/blog/templates/comment/add.mab +10 -0
- data/samples/blog/templates/comment/list.mab +6 -0
- data/samples/blog/templates/entry/editor.mab +13 -0
- data/samples/blog/templates/entry/list.mab +11 -0
- data/samples/blog/templates/entry/show.mab +9 -0
- data/samples/blog/templates/entry/summary.mab +5 -0
- data/samples/blog/templates/errors/not_found_404.mab +2 -0
- data/samples/blog/templates/errors/server_error_500.mab +2 -0
- data/samples/blog/templates/layouts/default.mab +17 -0
- data/samples/jub/Rakefile +72 -0
- data/samples/jub/bin/waves-console +4 -0
- data/samples/jub/bin/waves-server +4 -0
- data/samples/jub/configurations/development.rb +31 -0
- data/samples/jub/configurations/mapping.rb +18 -0
- data/samples/jub/configurations/production.rb +31 -0
- data/samples/jub/lib/application.rb +5 -0
- data/samples/jub/startup.rb +6 -0
- data/samples/jub/templates/errors/not_found_404.mab +2 -0
- data/samples/jub/templates/errors/server_error_500.mab +2 -0
- data/samples/jub/templates/layouts/default.mab +14 -0
- data/verify/app_generation/helpers.rb +24 -0
- data/verify/app_generation/startup.rb +39 -0
- data/verify/blackboard/blackboard_verify.rb +92 -0
- data/verify/blackboard/helpers.rb +5 -0
- data/verify/configurations/attributes.rb +37 -0
- data/verify/configurations/helpers.rb +1 -0
- data/verify/configurations/rack_integration.rb +29 -0
- data/verify/controllers/base.rb +37 -0
- data/verify/controllers/helpers.rb +13 -0
- data/verify/controllers/interface.rb +51 -0
- data/verify/core/helpers.rb +3 -0
- data/verify/core/utilities.rb +177 -0
- data/verify/foundations/default.rb +86 -0
- data/verify/foundations/default_application/Rakefile +14 -0
- data/verify/foundations/default_application/bin/waves-console +3 -0
- data/verify/foundations/default_application/bin/waves-server +3 -0
- data/verify/foundations/default_application/configurations/development.rb +26 -0
- data/verify/foundations/default_application/configurations/mapping.rb +14 -0
- data/verify/foundations/default_application/configurations/production.rb +30 -0
- data/verify/foundations/default_application/controllers/default.rb +15 -0
- data/verify/foundations/default_application/controllers/loaded.rb +15 -0
- data/verify/foundations/default_application/defaultapplication.db +0 -0
- data/verify/foundations/default_application/helpers/loaded.rb +10 -0
- data/verify/foundations/default_application/lib/application.rb +5 -0
- data/verify/foundations/default_application/models/default.rb +13 -0
- data/verify/foundations/default_application/models/loaded.rb +13 -0
- data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +9 -0
- data/verify/foundations/default_application/startup.rb +7 -0
- data/verify/foundations/default_application/templates/errors/not_found_404.mab +2 -0
- data/verify/foundations/default_application/templates/errors/server_error_500.mab +2 -0
- data/verify/foundations/default_application/templates/layouts/default.mab +14 -0
- data/verify/foundations/default_application/views/default.rb +7 -0
- data/verify/foundations/default_application/views/loaded.rb +15 -0
- data/verify/foundations/helpers.rb +1 -0
- data/verify/foundations/simple.rb +25 -0
- data/verify/helpers.rb +76 -0
- data/verify/layers/data_mapper/association_verify.rb +87 -0
- data/verify/layers/default_errors.rb +29 -0
- data/verify/layers/helpers.rb +1 -0
- data/verify/layers/migration.rb +33 -0
- data/verify/layers/sequel/model.rb +41 -0
- data/verify/layers/sequeltest.db +0 -0
- data/verify/mapping/always.rb +19 -0
- data/verify/mapping/filters.rb +65 -0
- data/verify/mapping/handle.rb +24 -0
- data/verify/mapping/helpers.rb +7 -0
- data/verify/mapping/matches.rb +27 -0
- data/verify/mapping/named.rb +29 -0
- data/verify/mapping/options.rb +17 -0
- data/verify/mapping/path.rb +40 -0
- data/verify/mapping/response_proxy.rb +50 -0
- data/verify/mapping/threaded.rb +25 -0
- data/verify/requests/helpers.rb +16 -0
- data/verify/requests/request.rb +73 -0
- data/verify/requests/response.rb +59 -0
- data/verify/requests/session.rb +54 -0
- data/verify/views/helpers.rb +1 -0
- data/verify/views/rendering.rb +34 -0
- data/verify/views/templates/foo.erb +0 -0
- data/verify/views/templates/moo.erb +0 -0
- data/verify/views/templates/moo.mab +0 -0
- metadata +597 -224
- 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 … 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 … 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‘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‘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 => 'sqlite', :database => '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‘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‘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 => :get do | model, name |
|
|
210
|
+
resource( model ) do
|
|
211
|
+
controller { find( name ) } | view { |data| show( model => 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 "/user/vyvyan", for example, will pass
|
|
226
|
+
"user" and "vyvyan" 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 "|" 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 "vyvyan"
|
|
241
|
+
as the argument. The resulting object is passed to an instance of
|
|
242
|
+
Views::User, which calls <tt>show( "user" => <some user
|
|
243
|
+
object>)</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 = <the user object>. 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‘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
|
+
<tt>handler</tt> parameter. The default is Mongrel. For example, to
|
|
367
|
+
switch to Thin:
|
|
368
|
+
</p>
|
|
369
|
+
<pre>
|
|
370
|
+
handler ::Rack::Handler::Thin, :Host => host, :Port => 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>
|