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.
@@ -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&#8217;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&#8217;t support all the edge decorations that I&#8217;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 &#8216;model_graph.rb
115
+ DEBUG=on&#8217; 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&#8217;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&#8217;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 &#169; 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
+ &quot;Software&quot;), 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 &quot;AS IS&quot;, 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&nbsp;&nbsp;
191
+ optparse&nbsp;&nbsp;
192
+ ostruct&nbsp;&nbsp;
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>
@@ -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; }
@@ -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,6 @@
1
+ class Hello < ActiveRecord::Base # :nodoc:
2
+ belongs_to :world
3
+ end
4
+ class World < ActiveRecord::Base # :nodoc:
5
+ has_many :hellos
6
+ end
@@ -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