wee 0.1.0 → 0.3.1
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/INSTALL +7 -0
- data/README +268 -0
- data/Rakefile +26 -0
- data/TODO +116 -0
- data/benchmark/Centrino1300/result.2000.counter.action +45 -0
- data/benchmark/Centrino1300/result.2000.counter.render +43 -0
- data/benchmark/Centrino1300/result.2000.filehandler +43 -0
- data/benchmark/Centrino600/result.2000.counter.action +47 -0
- data/benchmark/Centrino600/result.2000.counter.render +45 -0
- data/benchmark/Centrino600/result.2000.filehandler +43 -0
- data/benchmark/Makefile +48 -0
- data/benchmark/bench.sh +24 -0
- data/benchmark/counter.rb +96 -0
- data/benchmark/filehandler.rb +6 -0
- data/doc/rdoc/classes/Array.html +172 -0
- data/doc/rdoc/classes/Cache.html +126 -0
- data/doc/rdoc/classes/Cache/StorageCache.html +320 -0
- data/doc/rdoc/classes/Cache/Strategy.html +128 -0
- data/doc/rdoc/classes/Cache/Strategy/CapacityBounded.html +269 -0
- data/doc/rdoc/classes/Cache/Strategy/LFU.html +238 -0
- data/doc/rdoc/classes/Cache/Strategy/LFU/Item.html +111 -0
- data/doc/rdoc/classes/Cache/Strategy/LRU.html +238 -0
- data/doc/rdoc/classes/Cache/Strategy/LRU/Item.html +111 -0
- data/doc/rdoc/classes/Cache/Strategy/Unbounded.html +225 -0
- data/doc/rdoc/classes/Cache/Strategy/Unbounded/Item.html +111 -0
- data/doc/rdoc/classes/Enumerable.html +146 -0
- data/doc/rdoc/classes/LiteralMethod.html +196 -0
- data/doc/rdoc/classes/Object.html +178 -0
- data/doc/rdoc/classes/String.html +172 -0
- data/doc/rdoc/classes/Struct.html +174 -0
- data/doc/rdoc/classes/Wee.html +160 -0
- data/doc/rdoc/classes/Wee/AnswerDecoration.html +182 -0
- data/doc/rdoc/classes/Wee/Application.html +337 -0
- data/doc/rdoc/classes/Wee/Brush.html +245 -0
- data/doc/rdoc/classes/Wee/Brush/ActionCallbackMixin.html +149 -0
- data/doc/rdoc/classes/Wee/Brush/ActionMixin.html +146 -0
- data/doc/rdoc/classes/Wee/Brush/ActionURLCallbackMixin.html +157 -0
- data/doc/rdoc/classes/Wee/Brush/AnchorTag.html +210 -0
- data/doc/rdoc/classes/Wee/Brush/AssignMixin.html +141 -0
- data/doc/rdoc/classes/Wee/Brush/CallbackMixin.html +141 -0
- data/doc/rdoc/classes/Wee/Brush/FormTag.html +225 -0
- data/doc/rdoc/classes/Wee/Brush/GenericEncodedTextBrush.html +176 -0
- data/doc/rdoc/classes/Wee/Brush/GenericTagBrush.html +283 -0
- data/doc/rdoc/classes/Wee/Brush/GenericTextBrush.html +176 -0
- data/doc/rdoc/classes/Wee/Brush/ImageButtonTag.html +195 -0
- data/doc/rdoc/classes/Wee/Brush/InputCallbackMixin.html +149 -0
- data/doc/rdoc/classes/Wee/Brush/InputTag.html +172 -0
- data/doc/rdoc/classes/Wee/Brush/Page.html +193 -0
- data/doc/rdoc/classes/Wee/Brush/SelectListTag.html +267 -0
- data/doc/rdoc/classes/Wee/Brush/SelectOptionTag.html +177 -0
- data/doc/rdoc/classes/Wee/Brush/SubmitButtonTag.html +154 -0
- data/doc/rdoc/classes/Wee/Brush/TableDataTag.html +173 -0
- data/doc/rdoc/classes/Wee/Brush/TableHeaderTag.html +146 -0
- data/doc/rdoc/classes/Wee/Brush/TableRowTag.html +277 -0
- data/doc/rdoc/classes/Wee/Brush/TableTag.html +146 -0
- data/doc/rdoc/classes/Wee/Brush/TextAreaTag.html +229 -0
- data/doc/rdoc/classes/Wee/Brush/TextInputTag.html +154 -0
- data/doc/rdoc/classes/Wee/Callback.html +231 -0
- data/doc/rdoc/classes/Wee/CallbackRegistry.html +308 -0
- data/doc/rdoc/classes/Wee/CallbackStream.html +227 -0
- data/doc/rdoc/classes/Wee/Canvas.html +235 -0
- data/doc/rdoc/classes/Wee/Component.html +933 -0
- data/doc/rdoc/classes/Wee/Context.html +111 -0
- data/doc/rdoc/classes/Wee/Decoration.html +338 -0
- data/doc/rdoc/classes/Wee/Delegate.html +247 -0
- data/doc/rdoc/classes/Wee/ErrorPage.html +175 -0
- data/doc/rdoc/classes/Wee/ErrorResponse.html +180 -0
- data/doc/rdoc/classes/Wee/GenericResponse.html +162 -0
- data/doc/rdoc/classes/Wee/HtmlCanvas.html +751 -0
- data/doc/rdoc/classes/Wee/HtmlWriter.html +351 -0
- data/doc/rdoc/classes/Wee/LiteralMethodCallback.html +180 -0
- data/doc/rdoc/classes/Wee/MethodCallback.html +193 -0
- data/doc/rdoc/classes/Wee/Page.html +111 -0
- data/doc/rdoc/classes/Wee/Presenter.html +521 -0
- data/doc/rdoc/classes/Wee/RedirectResponse.html +150 -0
- data/doc/rdoc/classes/Wee/RefreshResponse.html +157 -0
- data/doc/rdoc/classes/Wee/RenderingContext.html +111 -0
- data/doc/rdoc/classes/Wee/Request.html +268 -0
- data/doc/rdoc/classes/Wee/RequestHandler.html +336 -0
- data/doc/rdoc/classes/Wee/Response.html +260 -0
- data/doc/rdoc/classes/Wee/Session.html +469 -0
- data/doc/rdoc/classes/Wee/SimpleIdGenerator.html +198 -0
- data/doc/rdoc/classes/Wee/Snapshot.html +211 -0
- data/doc/rdoc/classes/Wee/StateHolder.html +149 -0
- data/doc/rdoc/classes/Wee/StateRegistry.html +434 -0
- data/doc/rdoc/classes/Wee/StateRegistry/Snapshot.html +320 -0
- data/doc/rdoc/classes/Wee/StateRegistry/WithObject.html +153 -0
- data/doc/rdoc/classes/Wee/Utils.html +111 -0
- data/doc/rdoc/classes/Wee/Utils/LRUCache.html +148 -0
- data/doc/rdoc/classes/Wee/ValueHolder.html +220 -0
- data/doc/rdoc/classes/Wee/WEBrickAdaptor.html +330 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/INSTALL.html +118 -0
- data/doc/rdoc/files/README.html +466 -0
- data/doc/rdoc/files/lib/cache/cache_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/adaptors/webrick_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/application_rb.html +112 -0
- data/doc/rdoc/files/lib/wee/callback_rb.html +107 -0
- data/doc/rdoc/files/lib/wee/component_ext_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/component_rb.html +109 -0
- data/doc/rdoc/files/lib/wee/context_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/core/callback_rb.html +115 -0
- data/doc/rdoc/files/lib/wee/core/component_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/core/decoration_rb.html +133 -0
- data/doc/rdoc/files/lib/wee/core/presenter_rb.html +112 -0
- data/doc/rdoc/files/lib/wee/core/snapshot_rb.html +113 -0
- data/doc/rdoc/files/lib/wee/core/valueholder_rb.html +110 -0
- data/doc/rdoc/files/lib/wee/core_rb.html +131 -0
- data/doc/rdoc/files/lib/wee/decoration_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/holder_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/html_canvas_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/html_writer_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/idgen_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/page_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/presenter_rb.html +112 -0
- data/doc/rdoc/files/lib/wee/renderer/html/brushes_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/renderer/html/canvas_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/renderer/html/writer_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/rendering/html/brushes_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/rendering/html/canvas_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/rendering/html/writer_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/request_rb.html +113 -0
- data/doc/rdoc/files/lib/wee/requesthandler_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/response_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/session_rb.html +109 -0
- data/doc/rdoc/files/lib/wee/snapshot_ext_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/snapshot_rb.html +107 -0
- data/doc/rdoc/files/lib/wee/state_registry_rb.html +110 -0
- data/doc/rdoc/files/lib/wee/stuff_rb.html +144 -0
- data/doc/rdoc/files/lib/wee/utils/cache_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/webrick_rb.html +108 -0
- data/doc/rdoc/files/lib/wee_rb.html +132 -0
- data/doc/rdoc/fr_class_index.html +93 -0
- data/doc/rdoc/fr_file_index.html +51 -0
- data/doc/rdoc/fr_method_index.html +242 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/examples/ObjectSpaceBrowser.rb +199 -0
- data/examples/calendar.rb +366 -0
- data/examples/cc.rb +94 -0
- data/examples/draw.rb +91 -0
- data/examples/example.rb +223 -0
- data/examples/test.rb +66 -0
- data/examples/window.rb +53 -0
- data/lib/cache/cache.rb +9 -0
- data/lib/wee.rb +18 -8
- data/lib/wee/adaptors/webrick.rb +73 -0
- data/lib/wee/application.rb +69 -71
- data/lib/wee/context.rb +2 -12
- data/lib/wee/core.rb +15 -0
- data/lib/wee/core/callback.rb +108 -0
- data/lib/wee/core/component.rb +314 -0
- data/lib/wee/core/decoration.rb +129 -0
- data/lib/wee/core/presenter.rb +132 -0
- data/lib/wee/core/snapshot.rb +21 -0
- data/lib/wee/core/valueholder.rb +19 -0
- data/lib/wee/idgen.rb +13 -0
- data/lib/wee/page.rb +1 -1
- data/lib/wee/renderer/html/brushes.rb +435 -0
- data/lib/wee/renderer/html/canvas.rb +148 -0
- data/lib/wee/{html_writer.rb → renderer/html/writer.rb} +31 -16
- data/lib/wee/request.rb +57 -0
- data/lib/wee/requesthandler.rb +77 -0
- data/lib/wee/response.rb +77 -0
- data/lib/wee/session.rb +70 -64
- data/lib/wee/{snapshot.rb → snapshot_ext.rb} +4 -4
- data/test/components/calltest.rb +16 -0
- data/test/components/counter.rb +17 -0
- data/test/components/messagebox.rb +15 -0
- data/test/components/page.rb +14 -0
- data/test/components/page_decoration.rb +7 -0
- data/test/stress.rb +64 -0
- data/test/test_component.rb +106 -0
- data/test/test_html_canvas.rb +25 -0
- data/test/test_html_writer.rb +27 -0
- data/test/test_request.rb +13 -0
- data/test/utils/cross.rb +65 -0
- data/test/utils/generic_plotter.rb +28 -0
- data/test/utils/gnuplot.rb +31 -0
- data/test/utils/measure_memory.rb +9 -0
- data/test/utils/memory_plotter.rb +10 -0
- data/test/utils/object_plotter.rb +10 -0
- data/test/utils/webrick_background.rb +31 -0
- data/wee.gemspec +22 -0
- metadata +222 -18
- data/lib/wee/component.rb +0 -126
- data/lib/wee/delegate_decoration.rb +0 -22
- data/lib/wee/handler_registry.rb +0 -89
- data/lib/wee/holder.rb +0 -14
- data/lib/wee/html_canvas.rb +0 -379
- data/lib/wee/state_registry.rb +0 -173
- data/lib/wee/stuff.rb +0 -29
- data/lib/wee/webrick.rb +0 -15
|
@@ -0,0 +1,235 @@
|
|
|
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: Wee::Canvas</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">Wee::Canvas</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr class="top-aligned-row">
|
|
56
|
+
<td><strong>In:</strong></td>
|
|
57
|
+
<td>
|
|
58
|
+
<a href="../../files/lib/wee/renderer/html/canvas_rb.html">
|
|
59
|
+
lib/wee/renderer/html/canvas.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
|
+
<a href="../Object.html">
|
|
69
|
+
Object
|
|
70
|
+
</a>
|
|
71
|
+
</td>
|
|
72
|
+
</tr>
|
|
73
|
+
</table>
|
|
74
|
+
</div>
|
|
75
|
+
<!-- banner header -->
|
|
76
|
+
|
|
77
|
+
<div id="bodyContent">
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<div id="contextContent">
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<div id="method-list">
|
|
88
|
+
<h3 class="section-bar">Methods</h3>
|
|
89
|
+
|
|
90
|
+
<div class="name-list">
|
|
91
|
+
<a href="#M000153">close</a>
|
|
92
|
+
<a href="#M000155">nest</a>
|
|
93
|
+
<a href="#M000152">new</a>
|
|
94
|
+
<a href="#M000154">set_brush</a>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
<!-- if includes -->
|
|
102
|
+
|
|
103
|
+
<div id="section">
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
<!-- if method_list -->
|
|
113
|
+
<div id="methods">
|
|
114
|
+
<h3 class="section-bar">Public Class methods</h3>
|
|
115
|
+
|
|
116
|
+
<div id="method-M000152" class="method-detail">
|
|
117
|
+
<a name="M000152"></a>
|
|
118
|
+
|
|
119
|
+
<div class="method-heading">
|
|
120
|
+
<a href="#M000152" class="method-signature">
|
|
121
|
+
<span class="method-name">new</span><span class="method-args">()</span>
|
|
122
|
+
</a>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div class="method-description">
|
|
126
|
+
<p><a class="source-toggle" href="#"
|
|
127
|
+
onclick="toggleCode('M000152-source');return false;">[Source]</a></p>
|
|
128
|
+
<div class="method-source-code" id="M000152-source">
|
|
129
|
+
<pre>
|
|
130
|
+
<span class="ruby-comment cmt"># File lib/wee/renderer/html/canvas.rb, line 4</span>
|
|
131
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
|
|
132
|
+
<span class="ruby-ivar">@parent_brush</span> = <span class="ruby-keyword kw">nil</span>
|
|
133
|
+
<span class="ruby-ivar">@current_brush</span> = <span class="ruby-keyword kw">nil</span>
|
|
134
|
+
<span class="ruby-keyword kw">end</span>
|
|
135
|
+
</pre>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
141
|
+
|
|
142
|
+
<div id="method-M000153" class="method-detail">
|
|
143
|
+
<a name="M000153"></a>
|
|
144
|
+
|
|
145
|
+
<div class="method-heading">
|
|
146
|
+
<a href="#M000153" class="method-signature">
|
|
147
|
+
<span class="method-name">close</span><span class="method-args">()</span>
|
|
148
|
+
</a>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<div class="method-description">
|
|
152
|
+
<p><a class="source-toggle" href="#"
|
|
153
|
+
onclick="toggleCode('M000153-source');return false;">[Source]</a></p>
|
|
154
|
+
<div class="method-source-code" id="M000153-source">
|
|
155
|
+
<pre>
|
|
156
|
+
<span class="ruby-comment cmt"># File lib/wee/renderer/html/canvas.rb, line 9</span>
|
|
157
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
|
|
158
|
+
<span class="ruby-ivar">@current_brush</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@current_brush</span>
|
|
159
|
+
<span class="ruby-ivar">@current_brush</span> = <span class="ruby-keyword kw">nil</span>
|
|
160
|
+
<span class="ruby-keyword kw">end</span>
|
|
161
|
+
</pre>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<div id="method-M000155" class="method-detail">
|
|
167
|
+
<a name="M000155"></a>
|
|
168
|
+
|
|
169
|
+
<div class="method-heading">
|
|
170
|
+
<a href="#M000155" class="method-signature">
|
|
171
|
+
<span class="method-name">nest</span><span class="method-args">(&block)</span>
|
|
172
|
+
</a>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<div class="method-description">
|
|
176
|
+
<p><a class="source-toggle" href="#"
|
|
177
|
+
onclick="toggleCode('M000155-source');return false;">[Source]</a></p>
|
|
178
|
+
<div class="method-source-code" id="M000155-source">
|
|
179
|
+
<pre>
|
|
180
|
+
<span class="ruby-comment cmt"># File lib/wee/renderer/html/canvas.rb, line 25</span>
|
|
181
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nest</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
|
182
|
+
<span class="ruby-ivar">@parent_brush</span> = <span class="ruby-ivar">@current_brush</span>
|
|
183
|
+
<span class="ruby-ivar">@current_brush</span> = <span class="ruby-keyword kw">nil</span>
|
|
184
|
+
<span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>
|
|
185
|
+
<span class="ruby-ivar">@current_brush</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@current_brush</span>
|
|
186
|
+
<span class="ruby-ivar">@parent_brush</span> = <span class="ruby-ivar">@parent_brush</span>.<span class="ruby-identifier">parent</span>
|
|
187
|
+
<span class="ruby-keyword kw">end</span>
|
|
188
|
+
</pre>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div id="method-M000154" class="method-detail">
|
|
194
|
+
<a name="M000154"></a>
|
|
195
|
+
|
|
196
|
+
<div class="method-heading">
|
|
197
|
+
<a href="#M000154" class="method-signature">
|
|
198
|
+
<span class="method-name">set_brush</span><span class="method-args">(brush)</span>
|
|
199
|
+
</a>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<div class="method-description">
|
|
203
|
+
<p><a class="source-toggle" href="#"
|
|
204
|
+
onclick="toggleCode('M000154-source');return false;">[Source]</a></p>
|
|
205
|
+
<div class="method-source-code" id="M000154-source">
|
|
206
|
+
<pre>
|
|
207
|
+
<span class="ruby-comment cmt"># File lib/wee/renderer/html/canvas.rb, line 14</span>
|
|
208
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_brush</span>(<span class="ruby-identifier">brush</span>)
|
|
209
|
+
<span class="ruby-comment cmt"># tell previous brush to finish</span>
|
|
210
|
+
<span class="ruby-ivar">@current_brush</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@current_brush</span>
|
|
211
|
+
|
|
212
|
+
<span class="ruby-identifier">brush</span>.<span class="ruby-identifier">parent</span> = <span class="ruby-ivar">@parent_brush</span>
|
|
213
|
+
<span class="ruby-identifier">brush</span>.<span class="ruby-identifier">canvas</span> = <span class="ruby-keyword kw">self</span>
|
|
214
|
+
<span class="ruby-ivar">@current_brush</span> = <span class="ruby-identifier">brush</span>
|
|
215
|
+
|
|
216
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">brush</span>
|
|
217
|
+
<span class="ruby-keyword kw">end</span>
|
|
218
|
+
</pre>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
<div id="validator-badges">
|
|
231
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
</body>
|
|
235
|
+
</html>
|
|
@@ -0,0 +1,933 @@
|
|
|
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: Wee::Component</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">Wee::Component</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr class="top-aligned-row">
|
|
56
|
+
<td><strong>In:</strong></td>
|
|
57
|
+
<td>
|
|
58
|
+
<a href="../../files/lib/wee/core/component_rb.html">
|
|
59
|
+
lib/wee/core/component.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
|
+
<a href="Presenter.html">
|
|
69
|
+
Wee::Presenter
|
|
70
|
+
</a>
|
|
71
|
+
</td>
|
|
72
|
+
</tr>
|
|
73
|
+
</table>
|
|
74
|
+
</div>
|
|
75
|
+
<!-- banner header -->
|
|
76
|
+
|
|
77
|
+
<div id="bodyContent">
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<div id="contextContent">
|
|
82
|
+
|
|
83
|
+
<div id="description">
|
|
84
|
+
<p>
|
|
85
|
+
The base class of all components. You should at least overwrite method <a
|
|
86
|
+
href="Component.html#M000164">render</a> in your own subclasses.
|
|
87
|
+
</p>
|
|
88
|
+
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
<div id="contents-list">
|
|
93
|
+
<h3 class="section-bar">Contents</h3>
|
|
94
|
+
<ul>
|
|
95
|
+
<li><a href="#SEC00063">Render</a></li>
|
|
96
|
+
<li><a href="#SEC00064">Callback</a></li>
|
|
97
|
+
<li><a href="#SEC00065">Init</a></li>
|
|
98
|
+
<li><a href="#SEC00066">Children</a></li>
|
|
99
|
+
<li><a href="#SEC00067">Decoration</a></li>
|
|
100
|
+
<li><a href="#SEC00068">Backtrack</a></li>
|
|
101
|
+
<li><a href="#SEC00069">Call/Answer</a></li>
|
|
102
|
+
</ul>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div id="method-list">
|
|
106
|
+
<h3 class="section-bar">Methods</h3>
|
|
107
|
+
|
|
108
|
+
<div class="name-list">
|
|
109
|
+
<a href="#M000169">add_child</a>
|
|
110
|
+
<a href="#M000173">add_decoration</a>
|
|
111
|
+
<a href="#M000179">answer</a>
|
|
112
|
+
<a href="#M000177">backtrack_state</a>
|
|
113
|
+
<a href="#M000176">backtrack_state_chain</a>
|
|
114
|
+
<a href="#M000178">call</a>
|
|
115
|
+
<a href="#M000168">children</a>
|
|
116
|
+
<a href="#M000170">decoration</a>
|
|
117
|
+
<a href="#M000171">decoration=</a>
|
|
118
|
+
<a href="#M000163">do_render_chain</a>
|
|
119
|
+
<a href="#M000172">each_decoration</a>
|
|
120
|
+
<a href="#M000167">initialize</a>
|
|
121
|
+
<a href="#M000166">process_callbacks</a>
|
|
122
|
+
<a href="#M000165">process_callbacks_chain</a>
|
|
123
|
+
<a href="#M000174">remove_decoration</a>
|
|
124
|
+
<a href="#M000175">remove_decoration_if</a>
|
|
125
|
+
<a href="#M000164">render</a>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
<!-- if includes -->
|
|
133
|
+
|
|
134
|
+
<div id="section">
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
<!-- if method_list -->
|
|
144
|
+
<div id="section">
|
|
145
|
+
<h2 class="section-title"><a name="SEC00063">Render</a></h2>
|
|
146
|
+
<div class="section-comment">
|
|
147
|
+
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
<!-- if method_list -->
|
|
158
|
+
<div id="methods">
|
|
159
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
160
|
+
|
|
161
|
+
<div id="method-M000163" class="method-detail">
|
|
162
|
+
<a name="M000163"></a>
|
|
163
|
+
|
|
164
|
+
<div class="method-heading">
|
|
165
|
+
<a href="#M000163" class="method-signature">
|
|
166
|
+
<span class="method-name">do_render_chain</span><span class="method-args">(rendering_context)</span>
|
|
167
|
+
</a>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<div class="method-description">
|
|
171
|
+
<p>
|
|
172
|
+
Starts rendering the decoration chain by calling method <a
|
|
173
|
+
href="Presenter.html#M000182">Presenter#do_render</a> for the first
|
|
174
|
+
decoration of the component, or calling <em>do_render</em> for the
|
|
175
|
+
component itself if no decorations were specified.
|
|
176
|
+
</p>
|
|
177
|
+
<dl>
|
|
178
|
+
<dt><tt>rendering_context</tt></dt><dd>An object of class <a href="RenderingContext.html">RenderingContext</a>
|
|
179
|
+
|
|
180
|
+
</dd>
|
|
181
|
+
</dl>
|
|
182
|
+
<p><a class="source-toggle" href="#"
|
|
183
|
+
onclick="toggleCode('M000163-source');return false;">[Source]</a></p>
|
|
184
|
+
<div class="method-source-code" id="M000163-source">
|
|
185
|
+
<pre>
|
|
186
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 19</span>
|
|
187
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">do_render_chain</span>(<span class="ruby-identifier">rendering_context</span>)
|
|
188
|
+
<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">do_render</span>(<span class="ruby-identifier">rendering_context</span>)
|
|
189
|
+
<span class="ruby-keyword kw">end</span>
|
|
190
|
+
</pre>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div id="method-M000164" class="method-detail">
|
|
196
|
+
<a name="M000164"></a>
|
|
197
|
+
|
|
198
|
+
<div class="method-heading">
|
|
199
|
+
<a href="#M000164" class="method-signature">
|
|
200
|
+
<span class="method-name">render</span><span class="method-args">()</span>
|
|
201
|
+
</a>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div class="method-description">
|
|
205
|
+
<p>
|
|
206
|
+
This method renders the content of this component.
|
|
207
|
+
</p>
|
|
208
|
+
<p>
|
|
209
|
+
<b>OVERWRITE</b> this method in your own component class to implement the
|
|
210
|
+
view. By default this method does nothing!
|
|
211
|
+
</p>
|
|
212
|
+
<p>
|
|
213
|
+
Use the current renderer as returned by renderer or it’s short-cut r.
|
|
214
|
+
</p>
|
|
215
|
+
<p><a class="source-toggle" href="#"
|
|
216
|
+
onclick="toggleCode('M000164-source');return false;">[Source]</a></p>
|
|
217
|
+
<div class="method-source-code" id="M000164-source">
|
|
218
|
+
<pre>
|
|
219
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 30</span>
|
|
220
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>
|
|
221
|
+
<span class="ruby-keyword kw">end</span>
|
|
222
|
+
</pre>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
</div>
|
|
229
|
+
<div id="section">
|
|
230
|
+
<h2 class="section-title"><a name="SEC00064">Callback</a></h2>
|
|
231
|
+
<div class="section-comment">
|
|
232
|
+
|
|
233
|
+
</div>
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
<!-- if method_list -->
|
|
243
|
+
<div id="methods">
|
|
244
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
245
|
+
|
|
246
|
+
<div id="method-M000166" class="method-detail">
|
|
247
|
+
<a name="M000166"></a>
|
|
248
|
+
|
|
249
|
+
<div class="method-heading">
|
|
250
|
+
<a href="#M000166" class="method-signature">
|
|
251
|
+
<span class="method-name">process_callbacks</span><span class="method-args">(callback_stream)</span>
|
|
252
|
+
</a>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<div class="method-description">
|
|
256
|
+
<p>
|
|
257
|
+
Process and invoke all callbacks specified for this component and all of
|
|
258
|
+
it’s child components.
|
|
259
|
+
</p>
|
|
260
|
+
<p>
|
|
261
|
+
All input callbacks of this component and it’s child components are
|
|
262
|
+
processed/invoked before any of the action callbacks are processed/invoked.
|
|
263
|
+
</p>
|
|
264
|
+
<dl>
|
|
265
|
+
<dt><tt>callback_stream</tt></dt><dd>An object of class <a href="CallbackStream.html">CallbackStream</a>
|
|
266
|
+
|
|
267
|
+
</dd>
|
|
268
|
+
</dl>
|
|
269
|
+
<p><a class="source-toggle" href="#"
|
|
270
|
+
onclick="toggleCode('M000166-source');return false;">[Source]</a></p>
|
|
271
|
+
<div class="method-source-code" id="M000166-source">
|
|
272
|
+
<pre>
|
|
273
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 59</span>
|
|
274
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_callbacks</span>(<span class="ruby-identifier">callback_stream</span>)
|
|
275
|
+
<span class="ruby-keyword kw">super</span> <span class="ruby-keyword kw">do</span>
|
|
276
|
+
<span class="ruby-comment cmt"># process callbacks of all children</span>
|
|
277
|
+
<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>
|
|
278
|
+
<span class="ruby-identifier">child</span>.<span class="ruby-identifier">process_callbacks_chain</span>(<span class="ruby-identifier">callback_stream</span>)
|
|
279
|
+
<span class="ruby-keyword kw">end</span>
|
|
280
|
+
<span class="ruby-keyword kw">end</span>
|
|
281
|
+
<span class="ruby-keyword kw">end</span>
|
|
282
|
+
</pre>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
|
|
287
|
+
<div id="method-M000165" class="method-detail">
|
|
288
|
+
<a name="M000165"></a>
|
|
289
|
+
|
|
290
|
+
<div class="method-heading">
|
|
291
|
+
<a href="#M000165" class="method-signature">
|
|
292
|
+
<span class="method-name">process_callbacks_chain</span><span class="method-args">(callback_stream)</span>
|
|
293
|
+
</a>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<div class="method-description">
|
|
297
|
+
<p>
|
|
298
|
+
Starts processing the callbacks for the decoration chain by invoking method
|
|
299
|
+
<a href="Component.html#M000166">process_callbacks</a> of the first
|
|
300
|
+
decoration or the component itself if no decorations were specified.
|
|
301
|
+
</p>
|
|
302
|
+
<dl>
|
|
303
|
+
<dt><tt>callback_stream</tt></dt><dd>An object of class <a href="CallbackStream.html">CallbackStream</a>
|
|
304
|
+
|
|
305
|
+
</dd>
|
|
306
|
+
</dl>
|
|
307
|
+
<p><a class="source-toggle" href="#"
|
|
308
|
+
onclick="toggleCode('M000165-source');return false;">[Source]</a></p>
|
|
309
|
+
<div class="method-source-code" id="M000165-source">
|
|
310
|
+
<pre>
|
|
311
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 46</span>
|
|
312
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_callbacks_chain</span>(<span class="ruby-identifier">callback_stream</span>)
|
|
313
|
+
<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">process_callbacks</span>(<span class="ruby-identifier">callback_stream</span>)
|
|
314
|
+
<span class="ruby-keyword kw">end</span>
|
|
315
|
+
</pre>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
</div>
|
|
322
|
+
<div id="section">
|
|
323
|
+
<h2 class="section-title"><a name="SEC00065">Init</a></h2>
|
|
324
|
+
<div class="section-comment">
|
|
325
|
+
|
|
326
|
+
</div>
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
<!-- if method_list -->
|
|
336
|
+
<div id="methods">
|
|
337
|
+
<h3 class="section-bar">Protected Instance methods</h3>
|
|
338
|
+
|
|
339
|
+
<div id="method-M000167" class="method-detail">
|
|
340
|
+
<a name="M000167"></a>
|
|
341
|
+
|
|
342
|
+
<div class="method-heading">
|
|
343
|
+
<a href="#M000167" class="method-signature">
|
|
344
|
+
<span class="method-name">initialize</span><span class="method-args">()</span>
|
|
345
|
+
</a>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<div class="method-description">
|
|
349
|
+
<p>
|
|
350
|
+
Initializes a newly created component.
|
|
351
|
+
</p>
|
|
352
|
+
<p>
|
|
353
|
+
Call this method from your own components’ <em>initialize</em> method
|
|
354
|
+
using <tt>super</tt>, before setting up anything else!
|
|
355
|
+
</p>
|
|
356
|
+
<p><a class="source-toggle" href="#"
|
|
357
|
+
onclick="toggleCode('M000167-source');return false;">[Source]</a></p>
|
|
358
|
+
<div class="method-source-code" id="M000167-source">
|
|
359
|
+
<pre>
|
|
360
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 79</span>
|
|
361
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>() <span class="ruby-comment cmt"># :notnew:</span>
|
|
362
|
+
<span class="ruby-ivar">@decoration</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">ValueHolder</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
|
|
363
|
+
<span class="ruby-ivar">@children</span> = []
|
|
364
|
+
<span class="ruby-keyword kw">end</span>
|
|
365
|
+
</pre>
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
</div>
|
|
372
|
+
<div id="section">
|
|
373
|
+
<h2 class="section-title"><a name="SEC00066">Children</a></h2>
|
|
374
|
+
<div class="section-comment">
|
|
375
|
+
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
<!-- if method_list -->
|
|
386
|
+
<div id="methods">
|
|
387
|
+
<h3 class="section-bar">Protected Instance methods</h3>
|
|
388
|
+
|
|
389
|
+
<div id="method-M000169" class="method-detail">
|
|
390
|
+
<a name="M000169"></a>
|
|
391
|
+
|
|
392
|
+
<div class="method-heading">
|
|
393
|
+
<a href="#M000169" class="method-signature">
|
|
394
|
+
<span class="method-name">add_child</span><span class="method-args">(child)</span>
|
|
395
|
+
</a>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
<div class="method-description">
|
|
399
|
+
<p>
|
|
400
|
+
Add a child to the component. Example:
|
|
401
|
+
</p>
|
|
402
|
+
<pre>
|
|
403
|
+
class YourComponent < Wee::Component
|
|
404
|
+
def initialize
|
|
405
|
+
super()
|
|
406
|
+
add_child ChildComponent.new
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
</pre>
|
|
410
|
+
<p>
|
|
411
|
+
If you dynamically add child components to a component at run-time (not in
|
|
412
|
+
initialize), then you should consider to backtrack the children array (of
|
|
413
|
+
course only if you want backtracking at all):
|
|
414
|
+
</p>
|
|
415
|
+
<pre>
|
|
416
|
+
def backtrack_state(snapshot)
|
|
417
|
+
super
|
|
418
|
+
snapshot.add(self.children)
|
|
419
|
+
end
|
|
420
|
+
</pre>
|
|
421
|
+
<p><a class="source-toggle" href="#"
|
|
422
|
+
onclick="toggleCode('M000169-source');return false;">[Source]</a></p>
|
|
423
|
+
<div class="method-source-code" id="M000169-source">
|
|
424
|
+
<pre>
|
|
425
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 115</span>
|
|
426
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_child</span>(<span class="ruby-identifier">child</span>)
|
|
427
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">children</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">child</span>
|
|
428
|
+
<span class="ruby-keyword kw">end</span>
|
|
429
|
+
</pre>
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<div id="method-M000168" class="method-detail">
|
|
435
|
+
<a name="M000168"></a>
|
|
436
|
+
|
|
437
|
+
<div class="method-heading">
|
|
438
|
+
<a href="#M000168" class="method-signature">
|
|
439
|
+
<span class="method-name">children</span><span class="method-args">()</span>
|
|
440
|
+
</a>
|
|
441
|
+
</div>
|
|
442
|
+
|
|
443
|
+
<div class="method-description">
|
|
444
|
+
<p>
|
|
445
|
+
Returns all direct child components collected in an array.
|
|
446
|
+
</p>
|
|
447
|
+
<p><a class="source-toggle" href="#"
|
|
448
|
+
onclick="toggleCode('M000168-source');return false;">[Source]</a></p>
|
|
449
|
+
<div class="method-source-code" id="M000168-source">
|
|
450
|
+
<pre>
|
|
451
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 92</span>
|
|
452
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">children</span>
|
|
453
|
+
<span class="ruby-ivar">@children</span>
|
|
454
|
+
<span class="ruby-keyword kw">end</span>
|
|
455
|
+
</pre>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
</div>
|
|
462
|
+
<div id="section">
|
|
463
|
+
<h2 class="section-title"><a name="SEC00067">Decoration</a></h2>
|
|
464
|
+
<div class="section-comment">
|
|
465
|
+
|
|
466
|
+
</div>
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
<!-- if method_list -->
|
|
476
|
+
<div id="methods">
|
|
477
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
478
|
+
|
|
479
|
+
<div id="method-M000173" class="method-detail">
|
|
480
|
+
<a name="M000173"></a>
|
|
481
|
+
|
|
482
|
+
<div class="method-heading">
|
|
483
|
+
<a href="#M000173" class="method-signature">
|
|
484
|
+
<span class="method-name">add_decoration</span><span class="method-args">(d)</span>
|
|
485
|
+
</a>
|
|
486
|
+
</div>
|
|
487
|
+
|
|
488
|
+
<div class="method-description">
|
|
489
|
+
<p>
|
|
490
|
+
Adds decoration <tt>d</tt> in front of the decoration chain.
|
|
491
|
+
</p>
|
|
492
|
+
<p><a class="source-toggle" href="#"
|
|
493
|
+
onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
|
|
494
|
+
<div class="method-source-code" id="M000173-source">
|
|
495
|
+
<pre>
|
|
496
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 151</span>
|
|
497
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_decoration</span>(<span class="ruby-identifier">d</span>)
|
|
498
|
+
<span class="ruby-identifier">d</span>.<span class="ruby-identifier">owner</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span>
|
|
499
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span> = <span class="ruby-identifier">d</span>
|
|
500
|
+
<span class="ruby-keyword kw">end</span>
|
|
501
|
+
</pre>
|
|
502
|
+
</div>
|
|
503
|
+
</div>
|
|
504
|
+
</div>
|
|
505
|
+
|
|
506
|
+
<div id="method-M000170" class="method-detail">
|
|
507
|
+
<a name="M000170"></a>
|
|
508
|
+
|
|
509
|
+
<div class="method-heading">
|
|
510
|
+
<a href="#M000170" class="method-signature">
|
|
511
|
+
<span class="method-name">decoration</span><span class="method-args">()</span>
|
|
512
|
+
</a>
|
|
513
|
+
</div>
|
|
514
|
+
|
|
515
|
+
<div class="method-description">
|
|
516
|
+
<p>
|
|
517
|
+
Returns the first decoration from the component’s decoration chain,
|
|
518
|
+
or <tt>self</tt> if no decorations were specified for the component.
|
|
519
|
+
</p>
|
|
520
|
+
<p><a class="source-toggle" href="#"
|
|
521
|
+
onclick="toggleCode('M000170-source');return false;">[Source]</a></p>
|
|
522
|
+
<div class="method-source-code" id="M000170-source">
|
|
523
|
+
<pre>
|
|
524
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 128</span>
|
|
525
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">decoration</span>
|
|
526
|
+
<span class="ruby-ivar">@decoration</span>.<span class="ruby-identifier">value</span>
|
|
527
|
+
<span class="ruby-keyword kw">end</span>
|
|
528
|
+
</pre>
|
|
529
|
+
</div>
|
|
530
|
+
</div>
|
|
531
|
+
</div>
|
|
532
|
+
|
|
533
|
+
<div id="method-M000171" class="method-detail">
|
|
534
|
+
<a name="M000171"></a>
|
|
535
|
+
|
|
536
|
+
<div class="method-heading">
|
|
537
|
+
<a href="#M000171" class="method-signature">
|
|
538
|
+
<span class="method-name">decoration=</span><span class="method-args">(d)</span>
|
|
539
|
+
</a>
|
|
540
|
+
</div>
|
|
541
|
+
|
|
542
|
+
<div class="method-description">
|
|
543
|
+
<p>
|
|
544
|
+
Set the pointer to the first decoration to <tt>d</tt>.
|
|
545
|
+
</p>
|
|
546
|
+
<p><a class="source-toggle" href="#"
|
|
547
|
+
onclick="toggleCode('M000171-source');return false;">[Source]</a></p>
|
|
548
|
+
<div class="method-source-code" id="M000171-source">
|
|
549
|
+
<pre>
|
|
550
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 134</span>
|
|
551
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">decoration=</span>(<span class="ruby-identifier">d</span>)
|
|
552
|
+
<span class="ruby-ivar">@decoration</span>.<span class="ruby-identifier">value</span> = <span class="ruby-identifier">d</span>
|
|
553
|
+
<span class="ruby-keyword kw">end</span>
|
|
554
|
+
</pre>
|
|
555
|
+
</div>
|
|
556
|
+
</div>
|
|
557
|
+
</div>
|
|
558
|
+
|
|
559
|
+
<div id="method-M000172" class="method-detail">
|
|
560
|
+
<a name="M000172"></a>
|
|
561
|
+
|
|
562
|
+
<div class="method-heading">
|
|
563
|
+
<a href="#M000172" class="method-signature">
|
|
564
|
+
<span class="method-name">each_decoration</span><span class="method-args">( {|decoration| ...}</span>
|
|
565
|
+
</a>
|
|
566
|
+
</div>
|
|
567
|
+
|
|
568
|
+
<div class="method-description">
|
|
569
|
+
<p>
|
|
570
|
+
Iterates over all decorations (note that the component itself is excluded).
|
|
571
|
+
</p>
|
|
572
|
+
<p><a class="source-toggle" href="#"
|
|
573
|
+
onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
|
|
574
|
+
<div class="method-source-code" id="M000172-source">
|
|
575
|
+
<pre>
|
|
576
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 140</span>
|
|
577
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each_decoration</span> <span class="ruby-comment cmt"># :yields: decoration</span>
|
|
578
|
+
<span class="ruby-identifier">d</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span>
|
|
579
|
+
<span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
|
|
580
|
+
<span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">self</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">d</span>.<span class="ruby-identifier">nil?</span>
|
|
581
|
+
<span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">d</span>
|
|
582
|
+
<span class="ruby-identifier">d</span> = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">owner</span>
|
|
583
|
+
<span class="ruby-keyword kw">end</span>
|
|
584
|
+
<span class="ruby-keyword kw">end</span>
|
|
585
|
+
</pre>
|
|
586
|
+
</div>
|
|
587
|
+
</div>
|
|
588
|
+
</div>
|
|
589
|
+
|
|
590
|
+
<div id="method-M000174" class="method-detail">
|
|
591
|
+
<a name="M000174"></a>
|
|
592
|
+
|
|
593
|
+
<div class="method-heading">
|
|
594
|
+
<a href="#M000174" class="method-signature">
|
|
595
|
+
<span class="method-name">remove_decoration</span><span class="method-args">(d)</span>
|
|
596
|
+
</a>
|
|
597
|
+
</div>
|
|
598
|
+
|
|
599
|
+
<div class="method-description">
|
|
600
|
+
<p>
|
|
601
|
+
Remove decoration <tt>d</tt> from the decoration chain.
|
|
602
|
+
</p>
|
|
603
|
+
<p>
|
|
604
|
+
Returns the removed decoration or <tt>nil</tt> if it did not exist in the
|
|
605
|
+
decoration chain.
|
|
606
|
+
</p>
|
|
607
|
+
<p><a class="source-toggle" href="#"
|
|
608
|
+
onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
|
|
609
|
+
<div class="method-source-code" id="M000174-source">
|
|
610
|
+
<pre>
|
|
611
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 161</span>
|
|
612
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">d</span>)
|
|
613
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span> <span class="ruby-comment cmt"># 'd' is in front</span>
|
|
614
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span> = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">owner</span>
|
|
615
|
+
<span class="ruby-keyword kw">else</span>
|
|
616
|
+
<span class="ruby-identifier">last_decoration</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">decoration</span>
|
|
617
|
+
<span class="ruby-identifier">next_decoration</span> = <span class="ruby-keyword kw">nil</span>
|
|
618
|
+
<span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
|
|
619
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">last_decoration</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">self</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">last_decoration</span>.<span class="ruby-identifier">nil?</span>
|
|
620
|
+
<span class="ruby-identifier">next_decoration</span> = <span class="ruby-identifier">last_decoration</span>.<span class="ruby-identifier">owner</span>
|
|
621
|
+
<span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">next_decoration</span>
|
|
622
|
+
<span class="ruby-identifier">last_decoration</span> = <span class="ruby-identifier">next_decoration</span>
|
|
623
|
+
<span class="ruby-keyword kw">end</span>
|
|
624
|
+
<span class="ruby-identifier">last_decoration</span>.<span class="ruby-identifier">owner</span> = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">owner</span>
|
|
625
|
+
<span class="ruby-keyword kw">end</span>
|
|
626
|
+
<span class="ruby-identifier">d</span>.<span class="ruby-identifier">owner</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-comment cmt"># decoration 'd' no longer is an owner of anything!</span>
|
|
627
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">d</span>
|
|
628
|
+
<span class="ruby-keyword kw">end</span>
|
|
629
|
+
</pre>
|
|
630
|
+
</div>
|
|
631
|
+
</div>
|
|
632
|
+
</div>
|
|
633
|
+
|
|
634
|
+
<div id="method-M000175" class="method-detail">
|
|
635
|
+
<a name="M000175"></a>
|
|
636
|
+
|
|
637
|
+
<div class="method-heading">
|
|
638
|
+
<a href="#M000175" class="method-signature">
|
|
639
|
+
<span class="method-name">remove_decoration_if</span><span class="method-args">( {|decoration| ...}</span>
|
|
640
|
+
</a>
|
|
641
|
+
</div>
|
|
642
|
+
|
|
643
|
+
<div class="method-description">
|
|
644
|
+
<p>
|
|
645
|
+
Remove all decorations that match the block condition.
|
|
646
|
+
</p>
|
|
647
|
+
<p>
|
|
648
|
+
Example (removes all decorations of class <tt>HaloDecoration</tt>):
|
|
649
|
+
</p>
|
|
650
|
+
<pre>
|
|
651
|
+
remove_decoration_if {|d| d.class == HaloDecoration}
|
|
652
|
+
</pre>
|
|
653
|
+
<p><a class="source-toggle" href="#"
|
|
654
|
+
onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
|
|
655
|
+
<div class="method-source-code" id="M000175-source">
|
|
656
|
+
<pre>
|
|
657
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 186</span>
|
|
658
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove_decoration_if</span> <span class="ruby-comment cmt"># :yields: decoration</span>
|
|
659
|
+
<span class="ruby-identifier">to_remove</span> = []
|
|
660
|
+
<span class="ruby-identifier">each_decoration</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">to_remove</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">d</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">d</span>}
|
|
661
|
+
<span class="ruby-identifier">to_remove</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">d</span>)}
|
|
662
|
+
<span class="ruby-keyword kw">end</span>
|
|
663
|
+
</pre>
|
|
664
|
+
</div>
|
|
665
|
+
</div>
|
|
666
|
+
</div>
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
</div>
|
|
670
|
+
<div id="section">
|
|
671
|
+
<h2 class="section-title"><a name="SEC00068">Backtrack</a></h2>
|
|
672
|
+
<div class="section-comment">
|
|
673
|
+
|
|
674
|
+
</div>
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
<!-- if method_list -->
|
|
684
|
+
<div id="methods">
|
|
685
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
686
|
+
|
|
687
|
+
<div id="method-M000177" class="method-detail">
|
|
688
|
+
<a name="M000177"></a>
|
|
689
|
+
|
|
690
|
+
<div class="method-heading">
|
|
691
|
+
<a href="#M000177" class="method-signature">
|
|
692
|
+
<span class="method-name">backtrack_state</span><span class="method-args">(snapshot)</span>
|
|
693
|
+
</a>
|
|
694
|
+
</div>
|
|
695
|
+
|
|
696
|
+
<div class="method-description">
|
|
697
|
+
<p>
|
|
698
|
+
Take snapshots of objects that should correctly be backtracked.
|
|
699
|
+
</p>
|
|
700
|
+
<p>
|
|
701
|
+
Backtracking means that you can go back in time of the components’
|
|
702
|
+
state. Therefore it is neccessary to take snapshots of those objects that
|
|
703
|
+
want to participate in backtracking. Taking snapshots of the whole
|
|
704
|
+
component tree would be too expensive and unflexible. Note that methods
|
|
705
|
+
<em>take_snapshot</em> and <em>restore_snapshot</em> are called for those
|
|
706
|
+
objects to take the snapshot (they behave like <em>marshal_dump</em> and
|
|
707
|
+
<em>marshal_load</em>). Overwrite them if you want to define special
|
|
708
|
+
behaviour.
|
|
709
|
+
</p>
|
|
710
|
+
<p>
|
|
711
|
+
By default only <tt>@decoration</tt> is backtracked (which actually is a <a
|
|
712
|
+
href="ValueHolder.html">ValueHolder</a>, as only the pointer changes not
|
|
713
|
+
the decoration-object itself!).
|
|
714
|
+
</p>
|
|
715
|
+
<p>
|
|
716
|
+
For example if you dynamically add children to your component, you might
|
|
717
|
+
want to backtrack the children array. Therefore you simply pass it to the
|
|
718
|
+
<a href="Snapshot.html#M000069">Snapshot#add</a> method:
|
|
719
|
+
</p>
|
|
720
|
+
<pre>
|
|
721
|
+
def backtrack_state(snapshot)
|
|
722
|
+
super
|
|
723
|
+
snapshot.add(self.children)
|
|
724
|
+
end
|
|
725
|
+
</pre>
|
|
726
|
+
<p>
|
|
727
|
+
This will call <a href="../Array.html#M000003">Array#take_snapshot</a> to
|
|
728
|
+
take the snapshot for the children array. If at a later point in time a
|
|
729
|
+
snapshot is restored, <a
|
|
730
|
+
href="../Array.html#M000004">Array#restore_snapshot</a> will be called with
|
|
731
|
+
the return value of <a href="../Array.html#M000003">Array#take_snapshot</a>
|
|
732
|
+
as argument.
|
|
733
|
+
</p>
|
|
734
|
+
<dl>
|
|
735
|
+
<dt><tt>snapshot</tt></dt><dd>An object of class <a href="Snapshot.html">Snapshot</a>
|
|
736
|
+
|
|
737
|
+
</dd>
|
|
738
|
+
</dl>
|
|
739
|
+
<p><a class="source-toggle" href="#"
|
|
740
|
+
onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
|
|
741
|
+
<div class="method-source-code" id="M000177-source">
|
|
742
|
+
<pre>
|
|
743
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 243</span>
|
|
744
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">backtrack_state</span>(<span class="ruby-identifier">snapshot</span>)
|
|
745
|
+
<span class="ruby-identifier">snapshot</span>.<span class="ruby-identifier">add</span>(<span class="ruby-ivar">@decoration</span>)
|
|
746
|
+
<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">backtrack_state_chain</span>(<span class="ruby-identifier">snapshot</span>) <span class="ruby-keyword kw">end</span>
|
|
747
|
+
<span class="ruby-keyword kw">end</span>
|
|
748
|
+
</pre>
|
|
749
|
+
</div>
|
|
750
|
+
</div>
|
|
751
|
+
</div>
|
|
752
|
+
|
|
753
|
+
<div id="method-M000176" class="method-detail">
|
|
754
|
+
<a name="M000176"></a>
|
|
755
|
+
|
|
756
|
+
<div class="method-heading">
|
|
757
|
+
<a href="#M000176" class="method-signature">
|
|
758
|
+
<span class="method-name">backtrack_state_chain</span><span class="method-args">(snapshot)</span>
|
|
759
|
+
</a>
|
|
760
|
+
</div>
|
|
761
|
+
|
|
762
|
+
<div class="method-description">
|
|
763
|
+
<p>
|
|
764
|
+
Starts the backtrack-state phase for the decoration chain, by invoking
|
|
765
|
+
method <a href="Component.html#M000177">backtrack_state</a> of the first
|
|
766
|
+
decoration or the component itself if no decorations were specified.
|
|
767
|
+
</p>
|
|
768
|
+
<p>
|
|
769
|
+
See <a href="Component.html#M000177">backtrack_state</a> for details.
|
|
770
|
+
</p>
|
|
771
|
+
<dl>
|
|
772
|
+
<dt><tt>snapshot</tt></dt><dd>An object of class <a href="Snapshot.html">Snapshot</a>
|
|
773
|
+
|
|
774
|
+
</dd>
|
|
775
|
+
</dl>
|
|
776
|
+
<p><a class="source-toggle" href="#"
|
|
777
|
+
onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
|
|
778
|
+
<div class="method-source-code" id="M000176-source">
|
|
779
|
+
<pre>
|
|
780
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 207</span>
|
|
781
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">backtrack_state_chain</span>(<span class="ruby-identifier">snapshot</span>)
|
|
782
|
+
<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">backtrack_state</span>(<span class="ruby-identifier">snapshot</span>)
|
|
783
|
+
<span class="ruby-keyword kw">end</span>
|
|
784
|
+
</pre>
|
|
785
|
+
</div>
|
|
786
|
+
</div>
|
|
787
|
+
</div>
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
</div>
|
|
791
|
+
<div id="section">
|
|
792
|
+
<h2 class="section-title"><a name="SEC00069">Call/Answer</a></h2>
|
|
793
|
+
<div class="section-comment">
|
|
794
|
+
|
|
795
|
+
</div>
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
<!-- if method_list -->
|
|
805
|
+
<div id="methods">
|
|
806
|
+
<h3 class="section-bar">Protected Instance methods</h3>
|
|
807
|
+
|
|
808
|
+
<div id="method-M000179" class="method-detail">
|
|
809
|
+
<a name="M000179"></a>
|
|
810
|
+
|
|
811
|
+
<div class="method-heading">
|
|
812
|
+
<a href="#M000179" class="method-signature">
|
|
813
|
+
<span class="method-name">answer</span><span class="method-args">(*args)</span>
|
|
814
|
+
</a>
|
|
815
|
+
</div>
|
|
816
|
+
|
|
817
|
+
<div class="method-description">
|
|
818
|
+
<p>
|
|
819
|
+
Return from a called component.
|
|
820
|
+
</p>
|
|
821
|
+
<p>
|
|
822
|
+
NOTE that <a href="Component.html#M000179">answer</a> never returns.
|
|
823
|
+
</p>
|
|
824
|
+
<p>
|
|
825
|
+
See <a href="Component.html#M000178">call</a> for a detailed description of
|
|
826
|
+
the call/answer mechanism.
|
|
827
|
+
</p>
|
|
828
|
+
<p><a class="source-toggle" href="#"
|
|
829
|
+
onclick="toggleCode('M000179-source');return false;">[Source]</a></p>
|
|
830
|
+
<div class="method-source-code" id="M000179-source">
|
|
831
|
+
<pre>
|
|
832
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 310</span>
|
|
833
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">answer</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
|
|
834
|
+
<span class="ruby-identifier">throw</span> <span class="ruby-identifier">:wee_answer</span>, <span class="ruby-identifier">args</span>
|
|
835
|
+
<span class="ruby-keyword kw">end</span>
|
|
836
|
+
</pre>
|
|
837
|
+
</div>
|
|
838
|
+
</div>
|
|
839
|
+
</div>
|
|
840
|
+
|
|
841
|
+
<div id="method-M000178" class="method-detail">
|
|
842
|
+
<a name="M000178"></a>
|
|
843
|
+
|
|
844
|
+
<div class="method-heading">
|
|
845
|
+
<a href="#M000178" class="method-signature">
|
|
846
|
+
<span class="method-name">call</span><span class="method-args">(component, return_callback=:use_continuation)</span>
|
|
847
|
+
</a>
|
|
848
|
+
</div>
|
|
849
|
+
|
|
850
|
+
<div class="method-description">
|
|
851
|
+
<p>
|
|
852
|
+
Call another component. The calling component is neither rendered nor are
|
|
853
|
+
it’s callbacks processed until the called component answers using
|
|
854
|
+
method <a href="Component.html#M000179">answer</a>.
|
|
855
|
+
</p>
|
|
856
|
+
<dl>
|
|
857
|
+
<dt><tt>component</tt></dt><dd>The component to be called.
|
|
858
|
+
|
|
859
|
+
</dd>
|
|
860
|
+
</dl>
|
|
861
|
+
<p>
|
|
862
|
+
<b>How it works</b>
|
|
863
|
+
</p>
|
|
864
|
+
<p>
|
|
865
|
+
At first a continuation is created. The component to be called is then
|
|
866
|
+
wrapped with an <a href="AnswerDecoration.html">AnswerDecoration</a> and
|
|
867
|
+
the continuation is assigned to it’s <tt>on_answer</tt> attribute.
|
|
868
|
+
Then a <a href="Delegate.html">Delegate</a> decoration is added to the
|
|
869
|
+
calling component (self), which delegates to the component to be called
|
|
870
|
+
(<tt>component</tt>). Then we unwind the calling stack back to the <a
|
|
871
|
+
href="Session.html">Session</a> by throwing <em>:wee_back_to_session</em>.
|
|
872
|
+
This means, that there is only ever one action callback invoked per
|
|
873
|
+
request. When at a later point in time the called component invokes <a
|
|
874
|
+
href="Component.html#M000179">answer</a>, this will throw a
|
|
875
|
+
<em>:wee_answer</em> exception which is catched in the <a
|
|
876
|
+
href="AnswerDecoration.html">AnswerDecoration</a>. The <a
|
|
877
|
+
href="AnswerDecoration.html">AnswerDecoration</a> then jumps back to the
|
|
878
|
+
continuation we created at the beginning, and finally method <a
|
|
879
|
+
href="Component.html#M000178">call</a> returns.
|
|
880
|
+
</p>
|
|
881
|
+
<p>
|
|
882
|
+
Note that <a href="Component.html#M000178">call</a> returns to an
|
|
883
|
+
"old" stack-frame from a previous request. That is why we throw
|
|
884
|
+
<em>:wee_back_to_session</em> after invoking an action callback, and
|
|
885
|
+
that’s why only ever one is invoked. We could remove this limitation
|
|
886
|
+
without problems, but then there would be a difference between those action
|
|
887
|
+
callbacks that call other components and those that do not.
|
|
888
|
+
</p>
|
|
889
|
+
<p><a class="source-toggle" href="#"
|
|
890
|
+
onclick="toggleCode('M000178-source');return false;">[Source]</a></p>
|
|
891
|
+
<div class="method-source-code" id="M000178-source">
|
|
892
|
+
<pre>
|
|
893
|
+
<span class="ruby-comment cmt"># File lib/wee/core/component.rb, line 281</span>
|
|
894
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">call</span>(<span class="ruby-identifier">component</span>, <span class="ruby-identifier">return_callback</span>=<span class="ruby-identifier">:use_continuation</span>)
|
|
895
|
+
<span class="ruby-identifier">add_decoration</span>(<span class="ruby-identifier">delegate</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Delegate</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">component</span>))
|
|
896
|
+
<span class="ruby-identifier">component</span>.<span class="ruby-identifier">add_decoration</span>(<span class="ruby-identifier">answer</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">AnswerDecoration</span>.<span class="ruby-identifier">new</span>)
|
|
897
|
+
|
|
898
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">return_callback</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:use_continuation</span>
|
|
899
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">callcc</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">cc</span><span class="ruby-operator">|</span>
|
|
900
|
+
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">on_answer</span> = <span class="ruby-identifier">cc</span>
|
|
901
|
+
<span class="ruby-identifier">throw</span> <span class="ruby-identifier">:wee_back_to_session</span>
|
|
902
|
+
}
|
|
903
|
+
<span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">delegate</span>)
|
|
904
|
+
<span class="ruby-identifier">component</span>.<span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">answer</span>)
|
|
905
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
|
|
906
|
+
<span class="ruby-keyword kw">else</span>
|
|
907
|
+
<span class="ruby-comment cmt"># TODO: make this marshallable! </span>
|
|
908
|
+
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">on_answer</span> = <span class="ruby-identifier">proc</span> {<span class="ruby-operator">|</span><span class="ruby-operator">*</span><span class="ruby-identifier">args</span><span class="ruby-operator">|</span>
|
|
909
|
+
<span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">delegate</span>)
|
|
910
|
+
<span class="ruby-identifier">component</span>.<span class="ruby-identifier">remove_decoration</span>(<span class="ruby-identifier">answer</span>)
|
|
911
|
+
<span class="ruby-identifier">return_callback</span>.<span class="ruby-identifier">call</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
|
|
912
|
+
}
|
|
913
|
+
<span class="ruby-identifier">throw</span> <span class="ruby-identifier">:wee_back_to_session</span>
|
|
914
|
+
<span class="ruby-keyword kw">end</span>
|
|
915
|
+
<span class="ruby-keyword kw">end</span>
|
|
916
|
+
</pre>
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
</div>
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
</div>
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
</div>
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
<div id="validator-badges">
|
|
929
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
|
930
|
+
</div>
|
|
931
|
+
|
|
932
|
+
</body>
|
|
933
|
+
</html>
|