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,224 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
+
<head>
|
8
|
+
<title>File: model_graph.rb</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
|
12
|
+
<script type="text/javascript">
|
13
|
+
// <![CDATA[
|
14
|
+
|
15
|
+
function popupCode( url ) {
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
+
}
|
18
|
+
|
19
|
+
function toggleCode( id ) {
|
20
|
+
if ( document.getElementById )
|
21
|
+
elem = document.getElementById( id );
|
22
|
+
else if ( document.all )
|
23
|
+
elem = eval( "document.all." + id );
|
24
|
+
else
|
25
|
+
return false;
|
26
|
+
|
27
|
+
elemStyle = elem.style;
|
28
|
+
|
29
|
+
if ( elemStyle.display != "block" ) {
|
30
|
+
elemStyle.display = "block"
|
31
|
+
} else {
|
32
|
+
elemStyle.display = "none"
|
33
|
+
}
|
34
|
+
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Make codeblocks hidden by default
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
+
|
41
|
+
// ]]>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<div id="fileHeader">
|
50
|
+
<h1>model_graph.rb</h1>
|
51
|
+
<table class="header-table">
|
52
|
+
<tr class="top-aligned-row">
|
53
|
+
<td><strong>Path:</strong></td>
|
54
|
+
<td>model_graph.rb
|
55
|
+
</td>
|
56
|
+
</tr>
|
57
|
+
<tr class="top-aligned-row">
|
58
|
+
<td><strong>Last Update:</strong></td>
|
59
|
+
<td>Mon Sep 18 00:44:21 EDT 2006</td>
|
60
|
+
</tr>
|
61
|
+
</table>
|
62
|
+
</div>
|
63
|
+
<!-- banner header -->
|
64
|
+
|
65
|
+
<div id="bodyContent">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<div id="contextContent">
|
70
|
+
|
71
|
+
<div id="description">
|
72
|
+
<p>
|
73
|
+
When run from the trunk of a Rails project, produces <a
|
74
|
+
href="http://www.graphviz.org/doc/info/lang.html">DOT</a> output which can
|
75
|
+
be rendered into a graph by programs such as dot and neato and viewed with
|
76
|
+
Graphviz (an <a href="http://www.graphviz.org/License.php">Open Source</a>
|
77
|
+
viewer). I use the <a href="http://www.pixelglow.com/graphviz/">Mac OS X
|
78
|
+
version</a>, but there’s a <a
|
79
|
+
href="http://darwinports.opendarwin.org/darwinports/dports/graphics/graphviz/Portfile">Darwinports</a>
|
80
|
+
(aka, Macports) version, too. Or get the <a
|
81
|
+
href="http://www.graphviz.org/Download.php">source</a> and build it
|
82
|
+
yourself. You can also import a DOT file with OmniGraffle, but it
|
83
|
+
doesn’t support all the edge decorations that I’m using.
|
84
|
+
</p>
|
85
|
+
<table>
|
86
|
+
<tr><td valign="top">DOT format:</td><td><a
|
87
|
+
href="http://www.graphviz.org/doc/info/lang.html">www.graphviz.org/doc/info/lang.html</a>
|
88
|
+
|
89
|
+
</td></tr>
|
90
|
+
<tr><td valign="top">Graphviz license:</td><td><a
|
91
|
+
href="http://www.graphviz.org/License.php">www.graphviz.org/License.php</a>
|
92
|
+
|
93
|
+
</td></tr>
|
94
|
+
<tr><td valign="top">Mac OS X Graphviz:</td><td><a href="http://www.pixelglow.com/graphviz">www.pixelglow.com/graphviz</a>/
|
95
|
+
|
96
|
+
</td></tr>
|
97
|
+
<tr><td valign="top">Darwinports Graphviz:</td><td><a
|
98
|
+
href="http://darwinports.opendarwin.org/darwinports/dports/graphics/graphviz/Portfile">darwinports.opendarwin.org/darwinports/dports/graphics/graphviz/Portfile</a>
|
99
|
+
|
100
|
+
</td></tr>
|
101
|
+
<tr><td valign="top">Graphviz source code:</td><td><a
|
102
|
+
href="http://www.graphviz.org/Download.php">www.graphviz.org/Download.php</a>
|
103
|
+
|
104
|
+
</td></tr>
|
105
|
+
</table>
|
106
|
+
<p>
|
107
|
+
This is <b>certainly</b> a work-in-progress.
|
108
|
+
</p>
|
109
|
+
<h3>Usage:</h3>
|
110
|
+
<pre>
|
111
|
+
rake model_graph
|
112
|
+
</pre>
|
113
|
+
<p>
|
114
|
+
then open tmp/model_graph.dot with a viewer. Using ‘model_graph.rb
|
115
|
+
DEBUG=on’ will write a bunch of the raw information obtained from
|
116
|
+
reflecting on the ActiveRecord model classes into the output as comments
|
117
|
+
(including some things that don’t actually affect the final graph).
|
118
|
+
</p>
|
119
|
+
<p>
|
120
|
+
See the documentation for <a
|
121
|
+
href="../classes/ModelGraph.html#M000002">ModelGraph#do_graph</a> for some
|
122
|
+
additional options.
|
123
|
+
</p>
|
124
|
+
<h3>Bugs:</h3>
|
125
|
+
<p>
|
126
|
+
The ordering within DOT is based on the tail-to-head relationship of edges,
|
127
|
+
but these are somewhat arbitrarily determined by the current reflection on
|
128
|
+
ActiveRecord associations. The use of the EDGES= and NODES= options is only
|
129
|
+
a partial fix.
|
130
|
+
</p>
|
131
|
+
<h3>TODO:</h3>
|
132
|
+
<ul>
|
133
|
+
<li>deal with :as in a better way (now made dashed)
|
134
|
+
|
135
|
+
</li>
|
136
|
+
<li>deal with :polymorphic better (now make bold and blue)
|
137
|
+
|
138
|
+
</li>
|
139
|
+
<li>handle indirect descendants of ActiveRecord::Base? (at least make it
|
140
|
+
clearer how they’re filtered out of the graph)
|
141
|
+
|
142
|
+
</li>
|
143
|
+
<li>models that have no (outbound) associations are depicted in red, but
|
144
|
+
sometimes these are just confused by an overridden class (even with :as)
|
145
|
+
|
146
|
+
</li>
|
147
|
+
</ul>
|
148
|
+
<h4>Credits:</h4>
|
149
|
+
<p>
|
150
|
+
Inspired by: Matt Biddulph at August 2, 2006 02:57 PM URL: <a
|
151
|
+
href="http://www.hackdiary.com/archives/000093.html">www.hackdiary.com/archives/000093.html</a>
|
152
|
+
</p>
|
153
|
+
<hr size="2"></hr><p>
|
154
|
+
This is released under the MIT License. Please send comments or
|
155
|
+
enhanncement ideas to Rob[at]AgileConsultingLLC[dot]com or
|
156
|
+
Rob_Biedenharn[at]alum[dot]mit[dot]edu
|
157
|
+
</p>
|
158
|
+
<p>
|
159
|
+
Copyright © 2006 Rob Biedenharn
|
160
|
+
</p>
|
161
|
+
<p>
|
162
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
163
|
+
copy of this software and associated documentation files (the
|
164
|
+
"Software"), to deal in the Software without restriction,
|
165
|
+
including without limitation the rights to use, copy, modify, merge,
|
166
|
+
publish, distribute, sublicense, and/or sell copies of the Software, and to
|
167
|
+
permit persons to whom the Software is furnished to do so, subject to the
|
168
|
+
following conditions:
|
169
|
+
</p>
|
170
|
+
<p>
|
171
|
+
The above copyright notice and this permission notice shall be included in
|
172
|
+
all copies or substantial portions of the Software.
|
173
|
+
</p>
|
174
|
+
<p>
|
175
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
176
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
177
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
178
|
+
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
179
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
180
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
181
|
+
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
182
|
+
</p>
|
183
|
+
|
184
|
+
</div>
|
185
|
+
|
186
|
+
<div id="requires-list">
|
187
|
+
<h3 class="section-bar">Required files</h3>
|
188
|
+
|
189
|
+
<div class="name-list">
|
190
|
+
config/environment
|
191
|
+
optparse
|
192
|
+
ostruct
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
|
196
|
+
</div>
|
197
|
+
|
198
|
+
|
199
|
+
</div>
|
200
|
+
|
201
|
+
|
202
|
+
<!-- if includes -->
|
203
|
+
|
204
|
+
<div id="section">
|
205
|
+
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
<!-- if method_list -->
|
214
|
+
|
215
|
+
|
216
|
+
</div>
|
217
|
+
|
218
|
+
|
219
|
+
<div id="validator-badges">
|
220
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
221
|
+
</div>
|
222
|
+
|
223
|
+
</body>
|
224
|
+
</html>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Classes
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Classes</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Classes</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/ModelGraph.html">ModelGraph</a><br />
|
24
|
+
<a href="classes/ModelGraph/Graph.html">ModelGraph::Graph</a><br />
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</body>
|
28
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Files
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Files</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Files</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="files/model_graph_rb.html">model_graph.rb</a><br />
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</body>
|
27
|
+
</html>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Methods
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Methods</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Methods</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/ModelGraph/Graph.html#M000006">add_edge (ModelGraph::Graph)</a><br />
|
24
|
+
<a href="classes/ModelGraph/Graph.html#M000004">add_node (ModelGraph::Graph)</a><br />
|
25
|
+
<a href="classes/ModelGraph.html#M000002">do_graph (ModelGraph)</a><br />
|
26
|
+
<a href="classes/ModelGraph/Graph.html#M000007">edges (ModelGraph::Graph)</a><br />
|
27
|
+
<a href="classes/ModelGraph/Graph.html#M000003">new (ModelGraph::Graph)</a><br />
|
28
|
+
<a href="classes/ModelGraph/Graph.html#M000005">nodes (ModelGraph::Graph)</a><br />
|
29
|
+
<a href="classes/ModelGraph.html#M000001">posers (ModelGraph)</a><br />
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</body>
|
33
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
|
8
|
+
RDoc Documentation
|
9
|
+
|
10
|
+
-->
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
12
|
+
<head>
|
13
|
+
<title>RDoc Documentation</title>
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
15
|
+
</head>
|
16
|
+
<frameset rows="20%, 80%">
|
17
|
+
<frameset cols="25%,35%,45%">
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
21
|
+
</frameset>
|
22
|
+
<frame src="files/model_graph_rb.html" name="docwin" />
|
23
|
+
</frameset>
|
24
|
+
</html>
|
data/doc/rdoc-style.css
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
|
2
|
+
body {
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
4
|
+
font-size: 90%;
|
5
|
+
margin: 0;
|
6
|
+
margin-left: 40px;
|
7
|
+
padding: 0;
|
8
|
+
background: white;
|
9
|
+
}
|
10
|
+
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
12
|
+
h1 { font-size: 150%; }
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
14
|
+
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
16
|
+
a:hover { background: #039; color: #eef; }
|
17
|
+
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
19
|
+
td > a {
|
20
|
+
background: transparent;
|
21
|
+
color: #039;
|
22
|
+
text-decoration: none;
|
23
|
+
}
|
24
|
+
|
25
|
+
/* and inside a section title */
|
26
|
+
.section-title > a {
|
27
|
+
background: transparent;
|
28
|
+
color: #eee;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
/* === Structural elements =================================== */
|
33
|
+
|
34
|
+
div#index {
|
35
|
+
margin: 0;
|
36
|
+
margin-left: -40px;
|
37
|
+
padding: 0;
|
38
|
+
font-size: 90%;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
div#index a {
|
43
|
+
margin-left: 0.7em;
|
44
|
+
}
|
45
|
+
|
46
|
+
div#index .section-bar {
|
47
|
+
margin-left: 0px;
|
48
|
+
padding-left: 0.7em;
|
49
|
+
background: #ccc;
|
50
|
+
font-size: small;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
div#classHeader, div#fileHeader {
|
55
|
+
width: auto;
|
56
|
+
color: white;
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
58
|
+
margin: 0;
|
59
|
+
margin-left: -40px;
|
60
|
+
border-bottom: 3px solid #006;
|
61
|
+
}
|
62
|
+
|
63
|
+
div#classHeader a, div#fileHeader a {
|
64
|
+
background: inherit;
|
65
|
+
color: white;
|
66
|
+
}
|
67
|
+
|
68
|
+
div#classHeader td, div#fileHeader td {
|
69
|
+
background: inherit;
|
70
|
+
color: white;
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
div#fileHeader {
|
75
|
+
background: #057;
|
76
|
+
}
|
77
|
+
|
78
|
+
div#classHeader {
|
79
|
+
background: #048;
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
.class-name-in-header {
|
84
|
+
font-size: 180%;
|
85
|
+
font-weight: bold;
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
div#bodyContent {
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
91
|
+
}
|
92
|
+
|
93
|
+
div#description {
|
94
|
+
padding: 0.5em 1.5em;
|
95
|
+
background: #efefef;
|
96
|
+
border: 1px dotted #999;
|
97
|
+
}
|
98
|
+
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
100
|
+
color: #125;;
|
101
|
+
background: transparent;
|
102
|
+
}
|
103
|
+
|
104
|
+
div#validator-badges {
|
105
|
+
text-align: center;
|
106
|
+
}
|
107
|
+
div#validator-badges img { border: 0; }
|
108
|
+
|
109
|
+
div#copyright {
|
110
|
+
color: #333;
|
111
|
+
background: #efefef;
|
112
|
+
font: 0.75em sans-serif;
|
113
|
+
margin-top: 5em;
|
114
|
+
margin-bottom: 0;
|
115
|
+
padding: 0.5em 2em;
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
/* === Classes =================================== */
|
120
|
+
|
121
|
+
table.header-table {
|
122
|
+
color: white;
|
123
|
+
font-size: small;
|
124
|
+
}
|
125
|
+
|
126
|
+
.type-note {
|
127
|
+
font-size: small;
|
128
|
+
color: #DEDEDE;
|
129
|
+
}
|
130
|
+
|
131
|
+
.xxsection-bar {
|
132
|
+
background: #eee;
|
133
|
+
color: #333;
|
134
|
+
padding: 3px;
|
135
|
+
}
|
136
|
+
|
137
|
+
.section-bar {
|
138
|
+
color: #333;
|
139
|
+
border-bottom: 1px solid #999;
|
140
|
+
margin-left: -20px;
|
141
|
+
}
|
142
|
+
|
143
|
+
|
144
|
+
.section-title {
|
145
|
+
background: #79a;
|
146
|
+
color: #eee;
|
147
|
+
padding: 3px;
|
148
|
+
margin-top: 2em;
|
149
|
+
margin-left: -30px;
|
150
|
+
border: 1px solid #999;
|
151
|
+
}
|
152
|
+
|
153
|
+
.top-aligned-row { vertical-align: top }
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
155
|
+
|
156
|
+
/* --- Context section classes ----------------------- */
|
157
|
+
|
158
|
+
.context-row { }
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
162
|
+
|
163
|
+
/* --- Method classes -------------------------- */
|
164
|
+
.method-detail {
|
165
|
+
background: #efefef;
|
166
|
+
padding: 0;
|
167
|
+
margin-top: 0.5em;
|
168
|
+
margin-bottom: 1em;
|
169
|
+
border: 1px dotted #ccc;
|
170
|
+
}
|
171
|
+
.method-heading {
|
172
|
+
color: black;
|
173
|
+
background: #ccc;
|
174
|
+
border-bottom: 1px solid #666;
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
176
|
+
}
|
177
|
+
.method-signature { color: black; background: inherit; }
|
178
|
+
.method-name { font-weight: bold; }
|
179
|
+
.method-args { font-style: italic; }
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
181
|
+
|
182
|
+
/* --- Source code sections -------------------- */
|
183
|
+
|
184
|
+
a.source-toggle { font-size: 90%; }
|
185
|
+
div.method-source-code {
|
186
|
+
background: #262626;
|
187
|
+
color: #ffdead;
|
188
|
+
margin: 1em;
|
189
|
+
padding: 0.5em;
|
190
|
+
border: 1px dashed #999;
|
191
|
+
overflow: hidden;
|
192
|
+
}
|
193
|
+
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
195
|
+
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
197
|
+
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
199
|
+
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
data/examples/badblog.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class Post < ActiveRecord::Base
|
2
|
+
has_many :comments
|
3
|
+
has_one :author
|
4
|
+
has_and_belongs_to_many :categories
|
5
|
+
end
|
6
|
+
|
7
|
+
class Author < ActiveRecord::Base
|
8
|
+
# has_many :posts
|
9
|
+
end
|
10
|
+
|
11
|
+
class Comment < ActiveRecord::Base
|
12
|
+
belongs_to :post
|
13
|
+
end
|
14
|
+
|
15
|
+
class Category < ActiveRecord::Base
|
16
|
+
has_and_belongs_to_many :posts
|
17
|
+
end
|
data/examples/blog.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
class Author < ActiveRecord::Base
|
2
|
+
has_many :posts
|
3
|
+
# has_many :favorite_authors
|
4
|
+
# has_many :users, :through => :favorite_authors, :class_name => 'User'
|
5
|
+
end
|
6
|
+
|
7
|
+
class Category < ActiveRecord::Base
|
8
|
+
has_and_belongs_to_many :posts
|
9
|
+
end
|
10
|
+
|
11
|
+
class Comment < ActiveRecord::Base
|
12
|
+
belongs_to :post
|
13
|
+
belongs_to :user
|
14
|
+
end
|
15
|
+
|
16
|
+
class FavoriteAuthor < ActiveRecord::Base
|
17
|
+
belongs_to :user
|
18
|
+
belongs_to :author
|
19
|
+
end
|
20
|
+
|
21
|
+
class Post < ActiveRecord::Base
|
22
|
+
has_many :comments
|
23
|
+
has_one :author
|
24
|
+
has_and_belongs_to_many :categories
|
25
|
+
end
|
26
|
+
|
27
|
+
class Theme < ActiveRecord::Base
|
28
|
+
belongs_to :user
|
29
|
+
end
|
30
|
+
|
31
|
+
class User < ActiveRecord::Base
|
32
|
+
has_many :comments
|
33
|
+
has_one :theme
|
34
|
+
has_many :favorite_authors
|
35
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Post < ActiveRecord::Base
|
2
|
+
has_many :comments
|
3
|
+
has_one :author
|
4
|
+
has_and_belongs_to_many :categories
|
5
|
+
end
|
6
|
+
|
7
|
+
class Author < ActiveRecord::Base
|
8
|
+
has_many :posts
|
9
|
+
end
|
10
|
+
|
11
|
+
class Comment < ActiveRecord::Base
|
12
|
+
belongs_to :post
|
13
|
+
end
|
14
|
+
|
15
|
+
class Category < ActiveRecord::Base
|
16
|
+
has_and_belongs_to_many :posts
|
17
|
+
end
|
data/examples/hello.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
class Advertisement < ActiveRecord::Base # :nodoc:
|
2
|
+
belongs_to :issue
|
3
|
+
belongs_to :vendor
|
4
|
+
end
|
5
|
+
class Article < ActiveRecord::Base # :nodoc:
|
6
|
+
has_one :author
|
7
|
+
belongs_to :issue
|
8
|
+
end
|
9
|
+
class Author < ActiveRecord::Base # :nodoc:
|
10
|
+
has_many :articles
|
11
|
+
end
|
12
|
+
class Issue < ActiveRecord::Base # :nodoc:
|
13
|
+
has_one :theme
|
14
|
+
has_many :articles
|
15
|
+
has_many :advertisements
|
16
|
+
end
|
17
|
+
class Magazine < ActiveRecord::Base # :nodoc:
|
18
|
+
has_many :issues
|
19
|
+
has_many :articles, :through => :issues
|
20
|
+
has_many :subscriptions
|
21
|
+
has_many :subscribers, :through => :subscriptions
|
22
|
+
end
|
23
|
+
class Theme < ActiveRecord::Base # :nodoc:
|
24
|
+
belongs_to :issue
|
25
|
+
end
|
26
|
+
class Subscriber < ActiveRecord::Base # :nodoc:
|
27
|
+
has_many :subscriptions
|
28
|
+
has_many :magazines, :through => :subscriptions
|
29
|
+
end
|
30
|
+
class Subscription < ActiveRecord::Base # :nodoc:
|
31
|
+
belongs_to :subscriber
|
32
|
+
belongs_to :magazine
|
33
|
+
end
|
34
|
+
class Vendor < ActiveRecord::Base # :nodoc:
|
35
|
+
has_many :advertisements
|
36
|
+
end
|