model_graph 0.1.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/CHANGELOG +0 -0
- data/README +78 -0
- data/Rakefile +101 -0
- data/bin/model_graph +483 -0
- data/doc/classes/ModelGraph/Graph.html +313 -0
- data/doc/classes/ModelGraph/Graph.src/M000003.html +20 -0
- data/doc/classes/ModelGraph/Graph.src/M000004.html +18 -0
- data/doc/classes/ModelGraph/Graph.src/M000005.html +20 -0
- data/doc/classes/ModelGraph/Graph.src/M000006.html +35 -0
- data/doc/classes/ModelGraph/Graph.src/M000007.html +31 -0
- data/doc/classes/ModelGraph.html +341 -0
- data/doc/classes/ModelGraph.src/M000001.html +18 -0
- data/doc/classes/ModelGraph.src/M000002.html +120 -0
- data/doc/created.rid +1 -0
- data/doc/dot/f_0.dot +39 -0
- data/doc/dot/f_0.png +0 -0
- data/doc/dot/m_0_0.dot +39 -0
- data/doc/dot/m_0_0.png +0 -0
- data/doc/files/model_graph_rb.html +224 -0
- data/doc/fr_class_index.html +28 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +33 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/examples/badblog.rb +17 -0
- data/examples/blog.rb +35 -0
- data/examples/goodblog.rb +17 -0
- data/examples/hello.rb +6 -0
- data/examples/magazine.rb +36 -0
- data/examples/radiant.rb +41 -0
- data/lib/model_graph/version.rb +9 -0
- data/lib/model_graph.rb +1 -0
- data/test/model_graph_test.rb +13 -0
- data/test/test_helper.rb +5 -0
- metadata +97 -0
@@ -0,0 +1,313 @@
|
|
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: ModelGraph::Graph</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">ModelGraph::Graph</td>
|
54
|
+
</tr>
|
55
|
+
<tr class="top-aligned-row">
|
56
|
+
<td><strong>In:</strong></td>
|
57
|
+
<td>
|
58
|
+
<a href="../../files/model_graph_rb.html">
|
59
|
+
model_graph.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
|
+
Object
|
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
|
+
<div id="description">
|
82
|
+
<p>
|
83
|
+
An internal class to collect abstract nodes and edges and deliver them back
|
84
|
+
when needed.
|
85
|
+
</p>
|
86
|
+
|
87
|
+
</div>
|
88
|
+
|
89
|
+
|
90
|
+
</div>
|
91
|
+
|
92
|
+
<div id="method-list">
|
93
|
+
<h3 class="section-bar">Methods</h3>
|
94
|
+
|
95
|
+
<div class="name-list">
|
96
|
+
<a href="#M000006">add_edge</a>
|
97
|
+
<a href="#M000004">add_node</a>
|
98
|
+
<a href="#M000007">edges</a>
|
99
|
+
<a href="#M000003">new</a>
|
100
|
+
<a href="#M000005">nodes</a>
|
101
|
+
</div>
|
102
|
+
</div>
|
103
|
+
|
104
|
+
</div>
|
105
|
+
|
106
|
+
|
107
|
+
<!-- if includes -->
|
108
|
+
|
109
|
+
<div id="section">
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
<div id="attribute-list">
|
116
|
+
<h3 class="section-bar">Attributes</h3>
|
117
|
+
|
118
|
+
<div class="name-list">
|
119
|
+
<table>
|
120
|
+
<tr class="top-aligned-row context-row">
|
121
|
+
<td class="context-item-name">name</td>
|
122
|
+
<td class="context-item-value"> [R] </td>
|
123
|
+
<td class="context-item-desc"></td>
|
124
|
+
</tr>
|
125
|
+
</table>
|
126
|
+
</div>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
<!-- if method_list -->
|
132
|
+
<div id="methods">
|
133
|
+
<h3 class="section-bar">Public Class methods</h3>
|
134
|
+
|
135
|
+
<div id="method-M000003" class="method-detail">
|
136
|
+
<a name="M000003"></a>
|
137
|
+
|
138
|
+
<div class="method-heading">
|
139
|
+
<a href="#M000003" class="method-signature">
|
140
|
+
<span class="method-name">new</span><span class="method-args">(name="model_graph")</span>
|
141
|
+
</a>
|
142
|
+
</div>
|
143
|
+
|
144
|
+
<div class="method-description">
|
145
|
+
<p>
|
146
|
+
Holds information about nodes and edges that should be depicted on the
|
147
|
+
UML-ish graph of the ActiveRecord model classes. The <tt>name</tt> is
|
148
|
+
optional and only serves to give the graph an internal name. If you had an
|
149
|
+
application to combine model graphs from multiple applications, this might
|
150
|
+
be useful.
|
151
|
+
</p>
|
152
|
+
<p><a class="source-toggle" href="#"
|
153
|
+
onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
|
154
|
+
<div class="method-source-code" id="M000003-source">
|
155
|
+
<pre>
|
156
|
+
<span class="ruby-comment cmt"># File model_graph.rb, line 123</span>
|
157
|
+
123: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>=<span class="ruby-value str">"model_graph"</span>)
|
158
|
+
124: <span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
|
159
|
+
125: <span class="ruby-ivar">@nodes</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> <span class="ruby-comment cmt"># holds simple strings</span>
|
160
|
+
126: <span class="ruby-ivar">@edges</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h2</span>,<span class="ruby-identifier">k2</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h2</span>[<span class="ruby-identifier">k2</span>] = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> } }
|
161
|
+
127: <span class="ruby-keyword kw">end</span>
|
162
|
+
</pre>
|
163
|
+
</div>
|
164
|
+
</div>
|
165
|
+
</div>
|
166
|
+
|
167
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
168
|
+
|
169
|
+
<div id="method-M000006" class="method-detail">
|
170
|
+
<a name="M000006"></a>
|
171
|
+
|
172
|
+
<div class="method-heading">
|
173
|
+
<a href="#M000006" class="method-signature">
|
174
|
+
<span class="method-name">add_edge</span><span class="method-args">(fromnode, tonode, options={})</span>
|
175
|
+
</a>
|
176
|
+
</div>
|
177
|
+
|
178
|
+
<div class="method-description">
|
179
|
+
<p>
|
180
|
+
Create a directed edge from one node to another. If an edge between nodes
|
181
|
+
already exists in the opposite direction, the arrow will be attached to the
|
182
|
+
other end of the existing edge.
|
183
|
+
</p>
|
184
|
+
<p><a class="source-toggle" href="#"
|
185
|
+
onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
|
186
|
+
<div class="method-source-code" id="M000006-source">
|
187
|
+
<pre>
|
188
|
+
<span class="ruby-comment cmt"># File model_graph.rb, line 144</span>
|
189
|
+
144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_edge</span>(<span class="ruby-identifier">fromnode</span>, <span class="ruby-identifier">tonode</span>, <span class="ruby-identifier">options</span>={})
|
190
|
+
145: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">tonode</span>].<span class="ruby-identifier">has_key?</span> <span class="ruby-identifier">fromnode</span>
|
191
|
+
146: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
|
192
|
+
147: <span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">fromnode</span>][<span class="ruby-identifier">tonode</span>][<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
|
193
|
+
148: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'label'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'taillabel'</span>
|
194
|
+
149: <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/^arrow(?:head|tail)?$/</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'arrowhead'</span>
|
195
|
+
150: <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">k</span>
|
196
|
+
151: <span class="ruby-keyword kw">end</span>] = <span class="ruby-identifier">v</span>
|
197
|
+
152: <span class="ruby-keyword kw">end</span>
|
198
|
+
153: <span class="ruby-keyword kw">else</span>
|
199
|
+
154: <span class="ruby-comment cmt"># reverse sense and overload existing edge</span>
|
200
|
+
155: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
|
201
|
+
156: <span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">tonode</span>][<span class="ruby-identifier">fromnode</span>][<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
|
202
|
+
157: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'label'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'headlabel'</span>
|
203
|
+
158: <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/^arrow(?:head|tail)?$/</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'arrowtail'</span>
|
204
|
+
159: <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">k</span>
|
205
|
+
160: <span class="ruby-keyword kw">end</span>] = <span class="ruby-identifier">v</span>
|
206
|
+
161: <span class="ruby-keyword kw">end</span>
|
207
|
+
162: <span class="ruby-keyword kw">end</span>
|
208
|
+
163: <span class="ruby-keyword kw">end</span>
|
209
|
+
</pre>
|
210
|
+
</div>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
|
214
|
+
<div id="method-M000004" class="method-detail">
|
215
|
+
<a name="M000004"></a>
|
216
|
+
|
217
|
+
<div class="method-heading">
|
218
|
+
<a href="#M000004" class="method-signature">
|
219
|
+
<span class="method-name">add_node</span><span class="method-args">(nodename, options="")</span>
|
220
|
+
</a>
|
221
|
+
</div>
|
222
|
+
|
223
|
+
<div class="method-description">
|
224
|
+
<p>
|
225
|
+
Create an unattached node in this graph.
|
226
|
+
</p>
|
227
|
+
<p><a class="source-toggle" href="#"
|
228
|
+
onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
|
229
|
+
<div class="method-source-code" id="M000004-source">
|
230
|
+
<pre>
|
231
|
+
<span class="ruby-comment cmt"># File model_graph.rb, line 130</span>
|
232
|
+
130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_node</span>(<span class="ruby-identifier">nodename</span>, <span class="ruby-identifier">options</span>=<span class="ruby-value str">""</span>)
|
233
|
+
131: <span class="ruby-ivar">@nodes</span>[<span class="ruby-identifier">nodename</span>] = <span class="ruby-identifier">options</span>
|
234
|
+
132: <span class="ruby-keyword kw">end</span>
|
235
|
+
</pre>
|
236
|
+
</div>
|
237
|
+
</div>
|
238
|
+
</div>
|
239
|
+
|
240
|
+
<div id="method-M000007" class="method-detail">
|
241
|
+
<a name="M000007"></a>
|
242
|
+
|
243
|
+
<div class="method-heading">
|
244
|
+
<a href="#M000007" class="method-signature">
|
245
|
+
<span class="method-name">edges</span><span class="method-args">(options={}) {|edgestring| ...}</span>
|
246
|
+
</a>
|
247
|
+
</div>
|
248
|
+
|
249
|
+
<div class="method-description">
|
250
|
+
<p>
|
251
|
+
Iterates over all the DOT formatted edges with nodes having the most edges
|
252
|
+
first and the edges without a constraint attribute before those that do.
|
253
|
+
</p>
|
254
|
+
<p><a class="source-toggle" href="#"
|
255
|
+
onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
|
256
|
+
<div class="method-source-code" id="M000007-source">
|
257
|
+
<pre>
|
258
|
+
<span class="ruby-comment cmt"># File model_graph.rb, line 168</span>
|
259
|
+
168: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">edges</span>(<span class="ruby-identifier">options</span>={}) <span class="ruby-comment cmt"># :yields: edgestring</span>
|
260
|
+
169: <span class="ruby-ivar">@edges</span>.<span class="ruby-identifier">sort</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">b</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator"><=></span> <span class="ruby-identifier">a</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">length</span> }.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span>(<span class="ruby-identifier">fromnode</span>,<span class="ruby-identifier">nh</span>)<span class="ruby-operator">|</span>
|
261
|
+
170: <span class="ruby-identifier">nh</span>.<span class="ruby-identifier">sort_by</span> { <span class="ruby-operator">|</span>(<span class="ruby-identifier">t</span>,<span class="ruby-identifier">a</span>)<span class="ruby-operator">|</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value str">'constraint'</span>) <span class="ruby-operator">^</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:constraints_first</span>]) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> }.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tonode</span>,<span class="ruby-identifier">eh</span><span class="ruby-operator">|</span>
|
262
|
+
171: <span class="ruby-identifier">e</span> = <span class="ruby-node">"#{fromnode} -> #{tonode} "</span>
|
263
|
+
172: <span class="ruby-identifier">e</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">eh</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-identifier">options</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">eh</span>.<span class="ruby-identifier">nil?</span>
|
264
|
+
173: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">e</span>
|
265
|
+
174: <span class="ruby-keyword kw">end</span>
|
266
|
+
175: <span class="ruby-keyword kw">end</span>
|
267
|
+
176: <span class="ruby-keyword kw">end</span>
|
268
|
+
</pre>
|
269
|
+
</div>
|
270
|
+
</div>
|
271
|
+
</div>
|
272
|
+
|
273
|
+
<div id="method-M000005" class="method-detail">
|
274
|
+
<a name="M000005"></a>
|
275
|
+
|
276
|
+
<div class="method-heading">
|
277
|
+
<a href="#M000005" class="method-signature">
|
278
|
+
<span class="method-name">nodes</span><span class="method-args">( {|nodestring| ...}</span>
|
279
|
+
</a>
|
280
|
+
</div>
|
281
|
+
|
282
|
+
<div class="method-description">
|
283
|
+
<p>
|
284
|
+
Iterates over all the nodes previously added to this graph.
|
285
|
+
</p>
|
286
|
+
<p><a class="source-toggle" href="#"
|
287
|
+
onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
|
288
|
+
<div class="method-source-code" id="M000005-source">
|
289
|
+
<pre>
|
290
|
+
<span class="ruby-comment cmt"># File model_graph.rb, line 135</span>
|
291
|
+
135: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nodes</span> <span class="ruby-comment cmt"># :yields: nodestring</span>
|
292
|
+
136: <span class="ruby-ivar">@nodes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">options</span><span class="ruby-operator">|</span>
|
293
|
+
137: <span class="ruby-keyword kw">yield</span> <span class="ruby-node">"#{name} #{options}"</span>
|
294
|
+
138: <span class="ruby-keyword kw">end</span>
|
295
|
+
139: <span class="ruby-keyword kw">end</span>
|
296
|
+
</pre>
|
297
|
+
</div>
|
298
|
+
</div>
|
299
|
+
</div>
|
300
|
+
|
301
|
+
|
302
|
+
</div>
|
303
|
+
|
304
|
+
|
305
|
+
</div>
|
306
|
+
|
307
|
+
|
308
|
+
<div id="validator-badges">
|
309
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
310
|
+
</div>
|
311
|
+
|
312
|
+
</body>
|
313
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
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>
|
7
|
+
<head>
|
8
|
+
<title>new (ModelGraph::Graph)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/model_graph.rb, line 127</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>=<span class="ruby-value str">"model_graph"</span>)
|
15
|
+
<span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
|
16
|
+
<span class="ruby-ivar">@nodes</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> <span class="ruby-comment cmt"># holds simple strings</span>
|
17
|
+
<span class="ruby-ivar">@edges</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h2</span>,<span class="ruby-identifier">k2</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h2</span>[<span class="ruby-identifier">k2</span>] = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> } }
|
18
|
+
<span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
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>
|
7
|
+
<head>
|
8
|
+
<title>add_node (ModelGraph::Graph)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/model_graph.rb, line 133</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_node</span>(<span class="ruby-identifier">nodename</span>, <span class="ruby-identifier">options</span>=<span class="ruby-value str">""</span>)
|
15
|
+
<span class="ruby-ivar">@nodes</span>[<span class="ruby-identifier">nodename</span>] = <span class="ruby-identifier">options</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
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>
|
7
|
+
<head>
|
8
|
+
<title>nodes (ModelGraph::Graph)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/model_graph.rb, line 137</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nodes</span>
|
15
|
+
<span class="ruby-ivar">@nodes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">options</span><span class="ruby-operator">|</span>
|
16
|
+
<span class="ruby-keyword kw">yield</span> <span class="ruby-node">"#{name} #{options}"</span>
|
17
|
+
<span class="ruby-keyword kw">end</span>
|
18
|
+
<span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,35 @@
|
|
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>
|
7
|
+
<head>
|
8
|
+
<title>add_edge (ModelGraph::Graph)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/model_graph.rb, line 143</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_edge</span>(<span class="ruby-identifier">fromnode</span>, <span class="ruby-identifier">tonode</span>, <span class="ruby-identifier">options</span>={})
|
15
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">tonode</span>].<span class="ruby-identifier">has_key?</span> <span class="ruby-identifier">fromnode</span>
|
16
|
+
<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
|
17
|
+
<span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">fromnode</span>][<span class="ruby-identifier">tonode</span>][<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
|
18
|
+
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'label'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'taillabel'</span>
|
19
|
+
<span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/^arrow(?:head|tail)?$/</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'arrowhead'</span>
|
20
|
+
<span class="ruby-keyword kw">else</span> <span class="ruby-identifier">k</span>
|
21
|
+
<span class="ruby-keyword kw">end</span>] = <span class="ruby-identifier">v</span>
|
22
|
+
<span class="ruby-keyword kw">end</span>
|
23
|
+
<span class="ruby-keyword kw">else</span>
|
24
|
+
<span class="ruby-comment cmt"># reverse sense and overload existing edge</span>
|
25
|
+
<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
|
26
|
+
<span class="ruby-ivar">@edges</span>[<span class="ruby-identifier">tonode</span>][<span class="ruby-identifier">fromnode</span>][<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
|
27
|
+
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'label'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'headlabel'</span>
|
28
|
+
<span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/^arrow(?:head|tail)?$/</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'arrowtail'</span>
|
29
|
+
<span class="ruby-keyword kw">else</span> <span class="ruby-identifier">k</span>
|
30
|
+
<span class="ruby-keyword kw">end</span>] = <span class="ruby-identifier">v</span>
|
31
|
+
<span class="ruby-keyword kw">end</span>
|
32
|
+
<span class="ruby-keyword kw">end</span>
|
33
|
+
<span class="ruby-keyword kw">end</span></pre>
|
34
|
+
</body>
|
35
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
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>
|
7
|
+
<head>
|
8
|
+
<title>edges (ModelGraph::Graph)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/model_graph.rb, line 166</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">edges</span>(<span class="ruby-identifier">constraints_first</span>=<span class="ruby-keyword kw">false</span>)
|
15
|
+
<span class="ruby-ivar">@edges</span>.<span class="ruby-identifier">sort</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">b</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator"><=></span> <span class="ruby-identifier">a</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">length</span> }.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span>(<span class="ruby-identifier">fromnode</span>,<span class="ruby-identifier">nh</span>)<span class="ruby-operator">|</span>
|
16
|
+
<span class="ruby-identifier">nh</span>.<span class="ruby-identifier">sort_by</span> { <span class="ruby-operator">|</span>(<span class="ruby-identifier">t</span>,<span class="ruby-identifier">a</span>)<span class="ruby-operator">|</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value str">'constraint'</span>) <span class="ruby-operator">^</span> <span class="ruby-identifier">constraints_first</span>) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> }.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tonode</span>,<span class="ruby-identifier">eh</span><span class="ruby-operator">|</span>
|
17
|
+
<span class="ruby-identifier">e</span> = <span class="ruby-node">"#{fromnode} -> #{tonode} "</span>
|
18
|
+
<span class="ruby-identifier">sep</span> = <span class="ruby-value str">'['</span>
|
19
|
+
<span class="ruby-identifier">eh</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attr</span>,<span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
|
20
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-regexp re">/label/</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">attr</span>
|
21
|
+
<span class="ruby-identifier">e</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">sep</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{attr}=#{value}"</span>
|
22
|
+
<span class="ruby-identifier">sep</span> = <span class="ruby-value str">', '</span>
|
23
|
+
<span class="ruby-keyword kw">end</span>
|
24
|
+
<span class="ruby-keyword kw">end</span>
|
25
|
+
<span class="ruby-identifier">e</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">']'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">sep</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'['</span>
|
26
|
+
<span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">e</span>
|
27
|
+
<span class="ruby-keyword kw">end</span>
|
28
|
+
<span class="ruby-keyword kw">end</span>
|
29
|
+
<span class="ruby-keyword kw">end</span></pre>
|
30
|
+
</body>
|
31
|
+
</html>
|