nitro 0.3.0 → 0.4.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 +284 -0
- data/{LICENCE → LICENSE} +1 -1
- data/README +13 -17
- data/RELEASES +13 -1
- data/Rakefile +1 -9
- data/bin/cluster.rb +5 -5
- data/examples/blog/README +45 -0
- data/examples/blog/apache.conf +0 -0
- data/examples/blog/app.rb +21 -0
- data/examples/blog/config.rb +88 -0
- data/examples/blog/lib/blog.rb +104 -0
- data/examples/blog/log/app.log +117 -0
- data/examples/blog/root/comments.xhtml +38 -0
- data/examples/blog/root/entry_form.xhtml +18 -0
- data/examples/blog/root/index.xhtml +43 -0
- data/examples/blog/root/login.xhtml +24 -0
- data/examples/blog/root/m/bubbles.gif +0 -0
- data/examples/blog/root/m/comments_curve.gif +0 -0
- data/examples/blog/root/m/down.gif +0 -0
- data/examples/blog/root/m/footer_bg.gif +0 -0
- data/examples/blog/root/m/garrow.gif +0 -0
- data/examples/blog/root/m/gbull.gif +0 -0
- data/examples/blog/root/m/grbull.gif +0 -0
- data/examples/blog/root/m/h1_bg.gif +0 -0
- data/examples/blog/root/m/header_bg.gif +0 -0
- data/examples/blog/root/m/obull.gif +0 -0
- data/examples/blog/root/m/page_bg.gif +0 -0
- data/examples/blog/root/m/side_title_bg.gif +0 -0
- data/examples/blog/root/m/sidebar_bg.gif +0 -0
- data/examples/blog/root/recent_posts.xhtml +14 -0
- data/examples/blog/root/style.css +201 -0
- data/examples/blog/root/style.xsl +118 -0
- data/examples/blog/root/view_entry.xhtml +29 -0
- data/examples/og/run.rb +27 -29
- data/examples/tiny/README +3 -4
- data/examples/tiny/app.rb +6 -16
- data/examples/tiny/config.rb +30 -0
- data/examples/tiny/log/app.log +23 -0
- data/examples/tiny/root/{index.sx → index.xhtml} +3 -6
- data/lib/{n/std.rb → nitro.rb} +9 -4
- data/lib/{n → nitro}/application.rb +13 -7
- data/lib/{n → nitro}/config.rb +38 -8
- data/lib/{n → nitro}/events.rb +1 -1
- data/lib/{n → nitro}/l10n.rb +1 -1
- data/lib/{n → nitro}/logger.rb +8 -8
- data/lib/{n → nitro}/macros.rb +3 -3
- data/lib/{n → nitro}/mixins.rb +1 -1
- data/lib/nitro/properties.rb +301 -0
- data/lib/{n → nitro}/server.rb +2 -2
- data/lib/{n → nitro}/server/appserver.rb +14 -5
- data/lib/{n → nitro}/server/cluster.rb +5 -5
- data/lib/{n → nitro}/server/cookie.rb +1 -1
- data/lib/nitro/server/dispatcher.rb +66 -0
- data/lib/{n → nitro}/server/filters.rb +7 -7
- data/lib/{n → nitro}/server/filters/autologin.rb +3 -3
- data/lib/{n → nitro}/server/fragment.rb +3 -3
- data/lib/{n → nitro}/server/handlers.rb +3 -3
- data/lib/nitro/server/render.rb +200 -0
- data/lib/{n → nitro}/server/request.rb +6 -6
- data/lib/{n → nitro}/server/requestpart.rb +5 -5
- data/lib/{n → nitro}/server/script.rb +3 -3
- data/lib/{n → nitro}/server/server.rb +4 -4
- data/lib/{n → nitro}/server/session.rb +3 -3
- data/lib/nitro/server/shaders.rb +165 -0
- data/lib/{n → nitro}/server/user.rb +1 -1
- data/lib/nitro/server/webrick.rb +175 -0
- data/lib/nitro/service.rb +25 -0
- data/lib/{n → nitro}/sitemap.rb +2 -2
- data/lib/{n → nitro}/ui/date-select.rb +0 -0
- data/lib/{n → nitro}/ui/pager.rb +1 -1
- data/lib/{n → nitro}/ui/popup.rb +1 -1
- data/lib/{n → nitro}/ui/select.rb +1 -1
- data/lib/{n → nitro}/ui/tabs.rb +1 -1
- data/lib/{n → nitro}/utils/array.rb +1 -1
- data/lib/{n → nitro}/utils/cache.rb +1 -1
- data/lib/{n → nitro}/utils/gfx.rb +1 -1
- data/lib/{n → nitro}/utils/hash.rb +1 -1
- data/lib/{n → nitro}/utils/html.rb +1 -1
- data/lib/{n → nitro}/utils/http.rb +1 -1
- data/lib/{n → nitro}/utils/mail.rb +1 -1
- data/lib/{n → nitro}/utils/number.rb +1 -1
- data/lib/{n → nitro}/utils/pool.rb +1 -1
- data/lib/{n → nitro}/utils/string.rb +19 -95
- data/lib/{n → nitro}/utils/template.rb +0 -0
- data/lib/{n → nitro}/utils/time.rb +1 -1
- data/lib/{n → nitro}/utils/uri.rb +3 -3
- data/lib/nitro/version.rb +11 -0
- data/lib/{n/og.rb → og.rb} +61 -31
- data/lib/{n/og → og}/backend.rb +13 -7
- data/lib/{n/og → og}/backends/mysql.rb +43 -39
- data/lib/{n/og → og}/backends/psql.rb +42 -38
- data/lib/{n/og → og}/connection.rb +21 -9
- data/lib/{n/og → og}/meta.rb +18 -12
- data/lib/xsl/base.xsl +11 -88
- data/test/n/server/tc_cookie.rb +1 -1
- data/test/n/server/tc_filters.rb +1 -1
- data/test/n/server/tc_request.rb +3 -3
- data/test/n/server/tc_requestpart.rb +2 -2
- data/test/n/server/tc_session.rb +1 -1
- data/test/n/tc_events.rb +1 -1
- data/test/n/tc_og.rb +16 -18
- data/test/n/tc_properties.rb +22 -18
- data/test/n/tc_sitemap.rb +2 -2
- data/test/n/ui/tc_pager.rb +4 -4
- data/test/n/utils/tc_cache.rb +1 -1
- data/test/n/utils/tc_hash.rb +1 -1
- data/test/n/utils/tc_html.rb +1 -1
- data/test/n/utils/tc_http.rb +1 -1
- data/test/n/utils/tc_number.rb +1 -1
- data/test/n/utils/tc_strings.rb +1 -46
- data/test/n/utils/tc_uri.rb +1 -1
- metadata +101 -108
- data/examples/simple/README +0 -42
- data/examples/simple/app.rb +0 -31
- data/examples/simple/conf/apache.conf +0 -100
- data/examples/simple/conf/config.rb +0 -72
- data/examples/simple/conf/debug-config.rb +0 -26
- data/examples/simple/conf/live-config.rb +0 -26
- data/examples/simple/conf/requires.rb +0 -43
- data/examples/simple/ctl +0 -32
- data/examples/simple/env.rb +0 -32
- data/examples/simple/install.rb +0 -12
- data/examples/simple/lib/articles/entities.rb +0 -37
- data/examples/simple/lib/articles/lc-en.rb +0 -36
- data/examples/simple/lib/articles/methods.rb +0 -55
- data/examples/simple/lib/articles/part.rb +0 -57
- data/examples/simple/root/add-article.sx +0 -15
- data/examples/simple/root/article-form.ss +0 -20
- data/examples/simple/root/comments-form.ss +0 -16
- data/examples/simple/root/comments.si +0 -30
- data/examples/simple/root/index.sx +0 -44
- data/examples/simple/root/shader/shader.xsl +0 -100
- data/examples/simple/root/shader/style.css +0 -9
- data/examples/simple/root/view-article.sx +0 -29
- data/examples/tiny/conf/config.rb +0 -62
- data/examples/tiny/conf/requires.rb +0 -33
- data/examples/tiny/ctl +0 -16
- data/lib/n/parts.rb +0 -157
- data/lib/n/properties.rb +0 -199
- data/lib/n/server/dispatcher.rb +0 -55
- data/lib/n/server/handlers/code-handler.rb +0 -182
- data/lib/n/server/handlers/page-handler.rb +0 -612
- data/lib/n/server/webrick.rb +0 -283
- data/lib/n/shaders.rb +0 -166
- data/lib/n/sync/clc.rb +0 -110
- data/lib/n/sync/handler.rb +0 -229
- data/lib/n/sync/server.rb +0 -176
- data/lib/p/README +0 -1
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<span>
|
4
|
+
<h2>Recent posts</h2>
|
5
|
+
<?r if @entries ?>
|
6
|
+
<ul>
|
7
|
+
<?r for entry in @entries ?>
|
8
|
+
<li><a href="view_entry?oid=#{entry.oid}">#{entry.title}</a></li>
|
9
|
+
<?r end ?>
|
10
|
+
</ul>
|
11
|
+
<?r else ?>
|
12
|
+
no entries
|
13
|
+
<?r end ?>
|
14
|
+
</span>
|
@@ -0,0 +1,201 @@
|
|
1
|
+
body {
|
2
|
+
margin: 0;
|
3
|
+
padding: 0;
|
4
|
+
font-family: Verdana, sans-serif;
|
5
|
+
font-size: small;
|
6
|
+
color: #333;
|
7
|
+
background: #e0e0e0;
|
8
|
+
}
|
9
|
+
|
10
|
+
a:link {
|
11
|
+
color: #69c;
|
12
|
+
}
|
13
|
+
|
14
|
+
a:visited {
|
15
|
+
color: #666699;
|
16
|
+
}
|
17
|
+
|
18
|
+
a:hover {
|
19
|
+
color: #693;
|
20
|
+
}
|
21
|
+
|
22
|
+
a:active {
|
23
|
+
color: #cc3333;
|
24
|
+
text-decoration: none;
|
25
|
+
}
|
26
|
+
|
27
|
+
input, textarea {
|
28
|
+
font-family: Verdana, sans-serif;
|
29
|
+
font-size: small;
|
30
|
+
}
|
31
|
+
|
32
|
+
#page {
|
33
|
+
position: relative; top: 50%; left: 50%;
|
34
|
+
margin: 0px; margin-left: -400px;
|
35
|
+
width: 847px;
|
36
|
+
background: url(m/page_bg.gif) repeat-y;
|
37
|
+
}
|
38
|
+
|
39
|
+
#header {
|
40
|
+
margin: 0px;
|
41
|
+
color: #fff;
|
42
|
+
font-family: "Lucida Grande", "Trebuchet MS";
|
43
|
+
background: url(m/header_bg.gif) no-repeat top left;
|
44
|
+
}
|
45
|
+
|
46
|
+
#header h1 {
|
47
|
+
margin: 0px;
|
48
|
+
padding: 45px 60px 50px 160px;
|
49
|
+
background: url(m/h1_bg.gif) no-repeat bottom left;
|
50
|
+
}
|
51
|
+
|
52
|
+
#footer {
|
53
|
+
height: 40px;
|
54
|
+
color: #fff;
|
55
|
+
font-size: 80%;
|
56
|
+
background: url(m/footer_bg.gif) repeat-y;
|
57
|
+
padding-top: 15px; padding-left: 90px;
|
58
|
+
}
|
59
|
+
|
60
|
+
#footer a {
|
61
|
+
color: #fff;
|
62
|
+
}
|
63
|
+
|
64
|
+
#footer a:hover {
|
65
|
+
color: #fc0;
|
66
|
+
}
|
67
|
+
|
68
|
+
.main {
|
69
|
+
float: left;
|
70
|
+
margin: 10px; margin-left: 60px;
|
71
|
+
padding-left: 2px;
|
72
|
+
margin-bottom: 20px;
|
73
|
+
width: 460px;
|
74
|
+
}
|
75
|
+
|
76
|
+
.main li {
|
77
|
+
list-style: none;
|
78
|
+
padding-left: 14px;
|
79
|
+
margin-bottom: 3px;
|
80
|
+
background: url(m/obull.gif) no-repeat 0 6px;
|
81
|
+
}
|
82
|
+
|
83
|
+
.side {
|
84
|
+
color: #999;
|
85
|
+
margin: 0 41px 0px 547px;
|
86
|
+
padding-top: 25px; padding-left: 20px; padding-right: 20px;
|
87
|
+
font-size: 85%;
|
88
|
+
line-height: 1.4em;
|
89
|
+
background: url(m/sidebar_bg.gif) no-repeat 0 0;
|
90
|
+
}
|
91
|
+
|
92
|
+
.side h2 {
|
93
|
+
margin: 0 0 0 0;
|
94
|
+
padding: 25px 0 0 30px;
|
95
|
+
color: #666;
|
96
|
+
height: 32px !important;
|
97
|
+
height /**/:57px; /* for IE5/Win */
|
98
|
+
font-family: "Lucida Grande", "Trebuchet MS";
|
99
|
+
font-size: 130%;
|
100
|
+
background: url(m/side_title_bg.gif) no-repeat 0px 15px;
|
101
|
+
}
|
102
|
+
|
103
|
+
.side ul {
|
104
|
+
margin-top: 0px;
|
105
|
+
padding: 0px;
|
106
|
+
}
|
107
|
+
|
108
|
+
.side li {
|
109
|
+
list-style: none;
|
110
|
+
margin-left: 0px; margin-bottom: 3px;
|
111
|
+
padding-left: 14px;
|
112
|
+
background: url(m/gbull.gif) no-repeat 0 6px;
|
113
|
+
}
|
114
|
+
|
115
|
+
.entry {
|
116
|
+
border-bottom: 1px solid #eee;
|
117
|
+
margin-top: 15px; margin-bottom: 15px;
|
118
|
+
}
|
119
|
+
|
120
|
+
.full-entry {
|
121
|
+
margin-top: 15px; margin-bottom: 15px;
|
122
|
+
}
|
123
|
+
|
124
|
+
h2.date {
|
125
|
+
margin-top: 0;
|
126
|
+
padding-left: 14px;
|
127
|
+
font-size: 90%;
|
128
|
+
color: #f93;
|
129
|
+
background: url(m/down.gif) no-repeat 0 50%;
|
130
|
+
}
|
131
|
+
|
132
|
+
.post {
|
133
|
+
padding-left: 15px;
|
134
|
+
padding-bottom: 15px;
|
135
|
+
}
|
136
|
+
|
137
|
+
.post h3.title {
|
138
|
+
margin-top: 0;
|
139
|
+
font-family: "Lucida Grande", "Trebuchet MS";
|
140
|
+
font-size: 130%;
|
141
|
+
letter-spacing: -1px;
|
142
|
+
color: #f63;
|
143
|
+
}
|
144
|
+
|
145
|
+
.post .footer {
|
146
|
+
margin: 0; margin-top: 10px;
|
147
|
+
padding: 0 0 0 14px;
|
148
|
+
font-size: 88%;
|
149
|
+
color: #999;
|
150
|
+
background: url(m/grbull.gif) no-repeat 0 6px;
|
151
|
+
}
|
152
|
+
|
153
|
+
#comments {
|
154
|
+
margin-top: 30px;
|
155
|
+
padding-top: 10px;
|
156
|
+
font-size: 85%;
|
157
|
+
line-height: 1.5em;
|
158
|
+
color: #666;
|
159
|
+
background: #eee url(m/comments_curve.gif) no-repeat top left;
|
160
|
+
}
|
161
|
+
|
162
|
+
#comments h2 {
|
163
|
+
margin: 20px 0 15px 0;
|
164
|
+
padding: 8px 0 0 40px;
|
165
|
+
font-family: "Lucida Grande", "Trebuchet MS";
|
166
|
+
font-size: 130%;
|
167
|
+
color: #666;
|
168
|
+
background: url(m/bubbles.gif) no-repeat 10px 0;
|
169
|
+
height: 29px !important; /* for most browsers */
|
170
|
+
height /**/:37px; /* for IE5/Win */
|
171
|
+
}
|
172
|
+
|
173
|
+
#comments form {
|
174
|
+
margin: 10px;
|
175
|
+
padding-bottom: 10px;
|
176
|
+
}
|
177
|
+
|
178
|
+
.comment {
|
179
|
+
padding: 10px;
|
180
|
+
border-bottom: 1px solid #ddd;
|
181
|
+
}
|
182
|
+
|
183
|
+
.comment .footer {
|
184
|
+
margin: 4px 0 0 0;
|
185
|
+
padding: 0 0 0 60px;
|
186
|
+
color: #999;
|
187
|
+
background: url(m/garrow.gif) no-repeat 44px 2px;
|
188
|
+
}
|
189
|
+
|
190
|
+
.error {
|
191
|
+
color: #f00;
|
192
|
+
}
|
193
|
+
|
194
|
+
.clear {
|
195
|
+
clear: both;
|
196
|
+
height: 0px;
|
197
|
+
line-height: 0px;
|
198
|
+
font-size: 0px;
|
199
|
+
overflow: hidden;
|
200
|
+
background-color: #f00;
|
201
|
+
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<!--
|
4
|
+
A Simple Shader
|
5
|
+
|
6
|
+
code:
|
7
|
+
* George Moschovitis <gm@navel.gr>
|
8
|
+
|
9
|
+
(c) 2004 Navel, all rights reserved.
|
10
|
+
$Id: style.xsl 149 2004-11-13 19:52:32Z gmosx $
|
11
|
+
-->
|
12
|
+
|
13
|
+
<!DOCTYPE shader
|
14
|
+
[
|
15
|
+
<!ENTITY nbsp "<![CDATA[ ]]>">
|
16
|
+
<!ENTITY copy "<![CDATA[©]]>">
|
17
|
+
<!ENTITY euro "<![CDATA[€]]>">
|
18
|
+
<!ENTITY laquo "<![CDATA[«]]>">
|
19
|
+
<!ENTITY raquo "<![CDATA[»]]>">
|
20
|
+
]>
|
21
|
+
|
22
|
+
<xsl:stylesheet
|
23
|
+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
24
|
+
xmlns:xl="http://www.w3.org/1999/xlink"
|
25
|
+
xmlns:x="http://www.navel.gr/xml/shader.xsd" version="1.0"
|
26
|
+
exclude-result-prefixes="x xl">
|
27
|
+
|
28
|
+
<xsl:include href="../../lib/xsl/base.xsl" />
|
29
|
+
|
30
|
+
<xsl:output method="xml" indent="yes" encoding="iso-8859-1" />
|
31
|
+
|
32
|
+
<xsl:template name="x:head">
|
33
|
+
<head>
|
34
|
+
<title>#$name</title>
|
35
|
+
<meta name="title" content="Blog" />
|
36
|
+
<meta name="description" content="Example" />
|
37
|
+
<meta name="keywords" content="nitro, example, blog" />
|
38
|
+
<meta name="category" content="example" />
|
39
|
+
<meta name="robots" content="index, follow" />
|
40
|
+
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
41
|
+
|
42
|
+
<xsl:apply-templates select="x:block[@id='meta']"/>
|
43
|
+
|
44
|
+
<base href="#$srv_url/" />
|
45
|
+
<link href="/style.css" rel="stylesheet" type="text/css" media="screen" />
|
46
|
+
|
47
|
+
<xsl:apply-templates select="x:cell[@id='head']"/>
|
48
|
+
</head>
|
49
|
+
</xsl:template>
|
50
|
+
|
51
|
+
<xsl:template name="x:header">
|
52
|
+
<div id="header">
|
53
|
+
<h1>#$name</h1>
|
54
|
+
</div>
|
55
|
+
</xsl:template>
|
56
|
+
|
57
|
+
<xsl:template name="x:footer">
|
58
|
+
<div id="footer">
|
59
|
+
</div>
|
60
|
+
</xsl:template>
|
61
|
+
|
62
|
+
<!--
|
63
|
+
can only include x:blocks, all other templates are ignored
|
64
|
+
-->
|
65
|
+
<xsl:template match="x:page">
|
66
|
+
<html>
|
67
|
+
<xsl:call-template name="x:head" />
|
68
|
+
<body>
|
69
|
+
<div id="page">
|
70
|
+
|
71
|
+
<xsl:call-template name="x:header" />
|
72
|
+
|
73
|
+
<xsl:apply-templates select="x:cell[@id='top']" />
|
74
|
+
|
75
|
+
<div class="block main">
|
76
|
+
<xsl:apply-templates select="x:cell[@id='main']" />
|
77
|
+
</div>
|
78
|
+
|
79
|
+
<div class="block side">
|
80
|
+
<h2>About</h2>
|
81
|
+
This is a simple blog powered by <a href="http://www.navel.gr/nitro">
|
82
|
+
Nitro</a> Web Engine. Have a look at the source code and enjoy
|
83
|
+
the power of Ruby.
|
84
|
+
<ruby>unless session['owner']</ruby>
|
85
|
+
<p><a href="login">Login</a> as owner.</p>
|
86
|
+
<ruby>else</ruby>
|
87
|
+
<p><a href="logout">Logout</a>.</p>
|
88
|
+
<ruby>end</ruby>
|
89
|
+
|
90
|
+
<xsl:apply-templates select="x:cell[@id='side']" />
|
91
|
+
|
92
|
+
<h2>Linkage</h2>
|
93
|
+
<ul>
|
94
|
+
<li><a target="_new" href="http://www.navel.gr">Navel Ltd</a></li>
|
95
|
+
<li><a target="_new" href="http://www.navel.gr/nitro">Nitro Web Engine</a></li>
|
96
|
+
<li><a target="_new" href="http://www.ruby-lang.org">Ruby</a></li>
|
97
|
+
<li><a target="_new" href="http://www.blogger.com">Blogger</a></li>
|
98
|
+
<li><a target="_new" href="http://www.w3c.org">W3 Consortium</a></li>
|
99
|
+
</ul>
|
100
|
+
|
101
|
+
<br />
|
102
|
+
<p>
|
103
|
+
powered by <b><a href="http://www.navel.gr/nitro">Nitro</a></b>,
|
104
|
+
Skin from <a href="http://www.blogger.com">Blogger.com</a>.
|
105
|
+
</p>
|
106
|
+
</div>
|
107
|
+
|
108
|
+
<div class="clear">.</div>
|
109
|
+
|
110
|
+
<xsl:apply-templates select="x:cell[@id='bottom']" />
|
111
|
+
|
112
|
+
<xsl:call-template name="x:footer" />
|
113
|
+
</div>
|
114
|
+
</body>
|
115
|
+
</html>
|
116
|
+
</xsl:template>
|
117
|
+
|
118
|
+
</xsl:stylesheet>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<x:page xmlns:x="http://www.navel.gr/xml/shader.xsd">
|
4
|
+
|
5
|
+
<x:cell id="main">
|
6
|
+
|
7
|
+
<div class="full-@entry">
|
8
|
+
<h2 class="date">#{@entry.create_time.strftime('%B %e, %G')}</h2>
|
9
|
+
<div class="post">
|
10
|
+
<h3 class="title">#{@entry.title}</h3>
|
11
|
+
#{@entry.body}
|
12
|
+
<div class="footer">
|
13
|
+
posted by gmosx at #{@entry.create_time.strftime('%R %p')}
|
14
|
+
<?r if session['owner'] ?>
|
15
|
+
[<a href="del_entry?oid=#{@entry.oid}">del</a>]
|
16
|
+
<?r end ?>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div id="comments">
|
22
|
+
<include href="comments" />
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<p><a href="/">Home</a></p>
|
26
|
+
</x:cell>
|
27
|
+
|
28
|
+
</x:page>
|
29
|
+
|
data/examples/og/run.rb
CHANGED
@@ -6,13 +6,13 @@
|
|
6
6
|
# * George Moschovitis <gm@navel.gr>
|
7
7
|
#
|
8
8
|
# (c) 2004 Navel, all rights reserved.
|
9
|
-
# $Id: run.rb
|
9
|
+
# $Id: run.rb 155 2004-11-13 20:32:12Z gmosx $
|
10
10
|
|
11
11
|
$:.unshift "../../lib"
|
12
12
|
|
13
|
-
require "
|
14
|
-
require "
|
15
|
-
require "
|
13
|
+
require "nitro"
|
14
|
+
require "nitro/logger"
|
15
|
+
require "og"
|
16
16
|
|
17
17
|
# Full debug information.
|
18
18
|
$DBG = true
|
@@ -20,7 +20,7 @@ $DBG = true
|
|
20
20
|
# = A child class
|
21
21
|
#
|
22
22
|
class Comment
|
23
|
-
prop_accessor
|
23
|
+
prop_accessor :body, String
|
24
24
|
|
25
25
|
def initialize(body = nil)
|
26
26
|
@body = body
|
@@ -43,9 +43,9 @@ class Part; end
|
|
43
43
|
# = A Parent class
|
44
44
|
#
|
45
45
|
class User
|
46
|
-
prop_accessor
|
46
|
+
prop_accessor :name, String
|
47
47
|
|
48
|
-
has_many
|
48
|
+
has_many :comments, UserComment
|
49
49
|
|
50
50
|
def initialize(name = nil)
|
51
51
|
@name = name
|
@@ -59,22 +59,24 @@ end
|
|
59
59
|
# = A parent class
|
60
60
|
#
|
61
61
|
class Article
|
62
|
-
prop_accessor
|
63
|
-
prop_accessor
|
62
|
+
prop_accessor :title, String
|
63
|
+
prop_accessor :body, String
|
64
64
|
# override the default O->R mapping
|
65
|
-
prop_accessor Fixnum, "smallint DEFAULT 1"
|
66
|
-
# store a Ruby Hash in the Database.
|
65
|
+
prop_accessor :level, Fixnum, :sql => "smallint DEFAULT 1"
|
66
|
+
# store a Ruby Hash in the Database. YAML
|
67
67
|
# is used for serializing the attribute.
|
68
|
-
|
69
|
-
prop_accessor
|
68
|
+
# no need to define the class, but you can if you want.
|
69
|
+
prop_accessor :options
|
70
|
+
# exactly like the standard Ruby attr creates only the reader.
|
71
|
+
prop :create_time, Time
|
70
72
|
|
71
73
|
# define comment relation:
|
72
|
-
has_many
|
74
|
+
has_many :comments, ArticleComment
|
73
75
|
|
74
|
-
has_many
|
76
|
+
has_many :parts, Part
|
75
77
|
|
76
78
|
# define author relation:
|
77
|
-
belongs_to
|
79
|
+
belongs_to :author, User
|
78
80
|
|
79
81
|
# this attribute is NOT stored in the db.
|
80
82
|
attr_accessor :other_options
|
@@ -97,20 +99,20 @@ end
|
|
97
99
|
# = Article comment
|
98
100
|
#
|
99
101
|
class ArticleComment < Comment
|
100
|
-
belongs_to
|
102
|
+
belongs_to :article, Article
|
101
103
|
end
|
102
104
|
|
103
105
|
# = User comment
|
104
106
|
#
|
105
107
|
class UserComment < Comment
|
106
|
-
belongs_to
|
108
|
+
belongs_to :author, User
|
107
109
|
end
|
108
110
|
|
109
111
|
# = Another child class
|
110
112
|
#
|
111
113
|
class Part
|
112
|
-
prop_accessor
|
113
|
-
belongs_to
|
114
|
+
prop_accessor :name, String
|
115
|
+
belongs_to :article, Article
|
114
116
|
|
115
117
|
def initialize(name = nil)
|
116
118
|
@name = name
|
@@ -126,7 +128,7 @@ end
|
|
126
128
|
$log = Logger.new(STDERR);
|
127
129
|
|
128
130
|
# Og configuration.
|
129
|
-
|
131
|
+
|
130
132
|
config = {
|
131
133
|
:address => "localhost",
|
132
134
|
:database => "test",
|
@@ -135,7 +137,7 @@ config = {
|
|
135
137
|
:password => "navelrulez",
|
136
138
|
:connection_count => 1
|
137
139
|
}
|
138
|
-
=
|
140
|
+
=begin
|
139
141
|
config = {
|
140
142
|
:address => "localhost",
|
141
143
|
:database => "test",
|
@@ -144,18 +146,14 @@ config = {
|
|
144
146
|
:password => "navelrulez",
|
145
147
|
:connection_count => 1
|
146
148
|
}
|
147
|
-
|
149
|
+
=end
|
148
150
|
# Cleanup the database for earlier executions
|
149
151
|
|
150
|
-
|
152
|
+
Og::Database.drop_db!(config)
|
151
153
|
|
152
154
|
# Initialize Og
|
153
155
|
|
154
|
-
$og =
|
155
|
-
|
156
|
-
# Define the managed objects
|
157
|
-
|
158
|
-
$og.manage_classes(Article, User, ArticleComment, UserComment, Part)
|
156
|
+
$og = Og::Database.new(config)
|
159
157
|
|
160
158
|
# Get an Og connection for this thread.
|
161
159
|
|