nitro 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +3 -0
- data/ChangeLog +83 -0
- data/LICENCE +8 -8
- data/README +5 -1
- data/RELEASES +9 -0
- data/Rakefile +43 -23
- data/bin/cluster.rb +15 -12
- data/examples/ndb/README +5 -0
- data/examples/ndb/run.rb +271 -0
- data/examples/simple/README +27 -0
- data/examples/simple/app.rb +2 -2
- data/examples/simple/conf/config.rb +3 -8
- data/examples/simple/conf/debug-config.rb +6 -7
- data/examples/simple/conf/live-config.rb +2 -4
- data/examples/simple/conf/requires.rb +2 -10
- data/examples/simple/ctl +1 -1
- data/examples/simple/env.rb +2 -2
- data/examples/simple/root/article-form.ss +1 -1
- data/examples/simple/root/comments-form.ss +1 -1
- data/examples/tiny/README +15 -0
- data/examples/tiny/app.rb +2 -2
- data/examples/tiny/conf/config.rb +8 -13
- data/examples/tiny/conf/requires.rb +2 -8
- data/examples/tiny/ctl +2 -17
- data/examples/tiny/root/index.sx +1 -1
- data/lib/n/app/cluster.rb +15 -12
- data/lib/n/app/cookie.rb +10 -9
- data/lib/n/app/filters/autologin.rb +5 -4
- data/lib/n/app/fragment.rb +13 -10
- data/lib/n/app/handlers.rb +29 -22
- data/lib/n/app/handlers/code-handler.rb +2 -4
- data/lib/n/app/handlers/page-handler.rb +3 -5
- data/lib/n/app/request-part.rb +2 -7
- data/lib/n/app/request.rb +27 -22
- data/lib/n/app/script.rb +4 -15
- data/lib/n/app/server.rb +11 -7
- data/lib/n/app/session.rb +7 -11
- data/lib/n/app/user.rb +10 -11
- data/lib/n/app/webrick-servlet.rb +23 -10
- data/lib/n/app/webrick.rb +13 -10
- data/lib/n/application.rb +13 -6
- data/lib/n/config.rb +18 -7
- data/lib/n/db.rb +56 -40
- data/lib/n/db/connection.rb +18 -22
- data/lib/n/db/managed.rb +6 -8
- data/lib/n/db/mixins.rb +4 -7
- data/lib/n/db/mysql.rb +6 -3
- data/lib/n/db/psql.rb +15 -10
- data/lib/n/db/tools.rb +5 -9
- data/lib/n/db/utils.rb +11 -8
- data/lib/n/events.rb +14 -10
- data/lib/n/logger.rb +8 -2
- data/lib/n/macros.rb +5 -2
- data/lib/n/parts.rb +13 -10
- data/lib/n/properties.rb +17 -12
- data/lib/n/server.rb +3 -2
- data/lib/n/server/filter.rb +2 -4
- data/lib/n/shaders.rb +11 -13
- data/lib/n/sitemap.rb +23 -20
- data/lib/n/std.rb +15 -4
- data/lib/n/sync/clc.rb +4 -2
- data/lib/n/sync/handler.rb +20 -12
- data/lib/n/sync/server.rb +24 -18
- data/lib/n/ui/date-select.rb +2 -4
- data/lib/n/ui/pager.rb +10 -8
- data/lib/n/ui/popup.rb +5 -4
- data/lib/n/ui/select.rb +3 -4
- data/lib/n/ui/tabs.rb +3 -4
- data/lib/n/utils/array.rb +6 -14
- data/lib/n/utils/cache.rb +3 -7
- data/lib/n/utils/gfx.rb +5 -6
- data/lib/n/utils/hash.rb +7 -12
- data/lib/n/utils/html.rb +8 -4
- data/lib/n/utils/http.rb +10 -6
- data/lib/n/utils/mail.rb +6 -6
- data/lib/n/utils/number.rb +3 -4
- data/lib/n/utils/pool.rb +5 -8
- data/lib/n/utils/string.rb +12 -10
- data/lib/n/utils/template.rb +3 -5
- data/lib/n/utils/time.rb +7 -5
- data/lib/n/utils/uri.rb +5 -4
- data/lib/p/README +1 -0
- data/lib/xsl/xforms.xsl +2 -0
- data/test/n/app/tc_cookie.rb +34 -0
- data/test/n/app/tc_request.rb +70 -0
- data/test/n/app/tc_requestpart.rb +28 -0
- data/test/n/app/tc_session.rb +34 -0
- data/test/n/tc_db.rb +223 -0
- data/test/n/tc_db_mysql.rb +241 -0
- data/test/n/tc_events.rb +44 -0
- data/test/n/tc_properties.rb +68 -0
- data/test/n/tc_sitemap.rb +37 -0
- data/test/n/ui/tc_pager.rb +52 -0
- data/test/n/utils/tc_cache.rb +47 -0
- data/test/n/utils/tc_hash.rb +39 -0
- data/test/n/utils/tc_html.rb +79 -0
- data/test/n/utils/tc_http.rb +18 -0
- data/test/n/utils/tc_number.rb +21 -0
- data/test/n/utils/tc_strings.rb +149 -0
- data/test/n/utils/tc_uri.rb +100 -0
- metadata +49 -22
- data/doc/css.txt +0 -20
- data/doc/ideas.txt +0 -120
- data/doc/pg.txt +0 -47
- data/doc/svn.txt +0 -82
- data/doc/todo.txt +0 -30
- data/examples/simple/conf/overrides.rb +0 -9
- data/examples/simple/logs/access_log +0 -2
- data/examples/simple/logs/apache.log +0 -3
- data/examples/simple/logs/app.log +0 -1
- data/examples/simple/logs/events.log +0 -1
- data/examples/tiny/conf/apache.conf +0 -100
- data/examples/tiny/logs/access_log +0 -9
- data/examples/tiny/logs/apache.log +0 -9
- data/lib/n/db/make-release.sh +0 -26
- data/lib/n/tools/README +0 -11
- data/lib/xsl/ce.xsl +0 -30
- data/lib/xsl/localization.xsl +0 -23
- data/test/run.rb +0 -95
data/examples/simple/README
CHANGED
@@ -1,5 +1,32 @@
|
|
1
1
|
= A Simple Web Application
|
2
2
|
|
3
|
+
This simple application demonstrates various Nitro features.
|
4
|
+
|
5
|
+
|
6
|
+
== Description of contents
|
7
|
+
|
8
|
+
conf/apache.conf
|
9
|
+
apache configuration
|
10
|
+
|
11
|
+
conf/config.rb
|
12
|
+
application configuration
|
13
|
+
|
14
|
+
root/
|
15
|
+
the public web directory
|
16
|
+
|
17
|
+
logs/
|
18
|
+
logfiles come here
|
19
|
+
|
20
|
+
lib/n/
|
21
|
+
application specific ruby code
|
22
|
+
|
23
|
+
lib/p/
|
24
|
+
application specific Nitro parts
|
25
|
+
|
26
|
+
test/
|
27
|
+
unit tests
|
28
|
+
|
29
|
+
|
3
30
|
== Setup
|
4
31
|
|
5
32
|
To setup this example web application run the follwing script:
|
data/examples/simple/app.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
# A simple Web Application to demonstrate the Engine.
|
6
6
|
#
|
7
7
|
# code:
|
8
|
-
# George Moschovitis <gm@navel.gr>
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
9
9
|
#
|
10
10
|
# (c) 2004 Navel, all rights reserved.
|
11
|
-
# $Id: app.rb
|
11
|
+
# $Id: app.rb 101 2004-10-22 12:35:39Z gmosx $
|
12
12
|
|
13
13
|
$:.unshift "simple/lib"
|
14
14
|
$:.unshift "../lib"
|
@@ -1,17 +1,14 @@
|
|
1
1
|
# = Configuration
|
2
2
|
#
|
3
|
-
# === Design:
|
4
|
-
#
|
5
3
|
# Use a separate file for configuration, makes the
|
6
4
|
# main file more readable, and allows for reconfiguring
|
7
5
|
# (reload) the webapp without restarting the server.
|
8
6
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# code: gmosx
|
7
|
+
# code:
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
12
9
|
#
|
13
10
|
# (c) 2004 Navel, all rights reserved.
|
14
|
-
# $Id: config.rb
|
11
|
+
# $Id: config.rb 106 2004-10-25 11:31:11Z gmosx $
|
15
12
|
|
16
13
|
require "n/std"
|
17
14
|
require "n/properties"
|
@@ -31,10 +28,8 @@ $elog = Logger.new("simple/logs/events.log", "weekly");
|
|
31
28
|
|
32
29
|
require "n/db"
|
33
30
|
require "n/app/cluster"
|
34
|
-
require "n/config"
|
35
31
|
|
36
32
|
require "simple/conf/requires"
|
37
|
-
require "simple/conf/overrides"
|
38
33
|
|
39
34
|
$srv_extension_map = {
|
40
35
|
"sx" => ["text/html",
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# = Debug Configuration
|
2
2
|
#
|
3
3
|
# Configuration to use while debugging, this is slow.
|
4
|
-
|
4
|
+
#
|
5
5
|
# code:
|
6
|
-
# George Moschovitis <gm@navel.gr>
|
6
|
+
# * George Moschovitis <gm@navel.gr>
|
7
7
|
#
|
8
8
|
# (c) 2004 Navel, all rights reserved.
|
9
|
-
# $Id: debug-config.rb
|
10
|
-
#++
|
9
|
+
# $Id: debug-config.rb 106 2004-10-25 11:31:11Z gmosx $
|
11
10
|
|
12
11
|
require "simple/conf/config"
|
13
12
|
|
@@ -43,10 +42,10 @@ $db = N::Db.new(
|
|
43
42
|
:connection_count => 5
|
44
43
|
)
|
45
44
|
|
46
|
-
$appsrv_address = "127.0.0.1"
|
45
|
+
$srv_address = $appsrv_address = "127.0.0.1"
|
46
|
+
$srv_port = 8080
|
47
47
|
$appsrv_port = 9090
|
48
|
-
$srv_url = "http
|
49
|
-
#$srv_url = "http://192.168.0.3:8080"
|
48
|
+
$srv_url = "http://#$srv_address:#$srv_port"
|
50
49
|
|
51
50
|
# gmosx: no error page in debug mode to avoid loops when there
|
52
51
|
# is a bug in the handler code or the shader.
|
@@ -2,13 +2,11 @@
|
|
2
2
|
#
|
3
3
|
# Configuration to use in the live server, optimized for speed.
|
4
4
|
#
|
5
|
-
#--
|
6
5
|
# code:
|
7
|
-
# George Moschovitis <gm@navel.gr>
|
6
|
+
# * George Moschovitis <gm@navel.gr>
|
8
7
|
#
|
9
8
|
# (c) 2004 Navel, all rights reserved.
|
10
|
-
# $Id: live-config.rb
|
11
|
-
#++
|
9
|
+
# $Id: live-config.rb 101 2004-10-22 12:35:39Z gmosx $
|
12
10
|
|
13
11
|
require "simple/conf/config"
|
14
12
|
|
@@ -1,22 +1,14 @@
|
|
1
1
|
# = Requires all needed files
|
2
2
|
#
|
3
|
-
# === Design:
|
4
|
-
#
|
5
3
|
# Collect all requires in one file includable
|
6
4
|
# in multiple executable scripts. Moreover, it
|
7
5
|
# makes the main script file more readable.
|
8
6
|
#
|
9
|
-
# === Ideas:
|
10
|
-
#
|
11
|
-
# - use load instead of require to make reloadable?
|
12
|
-
#
|
13
|
-
#--
|
14
7
|
# code:
|
15
|
-
# George Moschovitis <gm@navel.gr>
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
16
9
|
#
|
17
10
|
# (c) 2004 Navel, all rights reserved.
|
18
|
-
# $Id: requires.rb
|
19
|
-
#++
|
11
|
+
# $Id: requires.rb 101 2004-10-22 12:35:39Z gmosx $
|
20
12
|
|
21
13
|
require "n/std"
|
22
14
|
require "n/properties"
|
data/examples/simple/ctl
CHANGED
data/examples/simple/env.rb
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
# AppServer environment.
|
5
5
|
#
|
6
6
|
# code:
|
7
|
-
# George Moschovitis <gm@navel.gr>
|
7
|
+
# * George Moschovitis <gm@navel.gr>
|
8
8
|
#
|
9
9
|
# (c) 2004 Navel, all rights reserved.
|
10
|
-
# $Id: env.rb
|
10
|
+
# $Id: env.rb 101 2004-10-22 12:35:39Z gmosx $
|
11
11
|
|
12
12
|
$:.unshift ".."
|
13
13
|
$:.unshift "simple/lib"
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<!-- the <?xml declaration is optional, but lets be strict. -->
|
4
4
|
|
5
|
-
<form id="comments_form" method="post"
|
5
|
+
<form id="comments_form" method="post">
|
6
6
|
<input type="hidden" name="add_comment_pid" value="#{request[:comments_parent].oid}" />
|
7
7
|
<input type="hidden" name="oid" value="#{request[:comments_parent].oid}" />
|
8
8
|
|
data/examples/tiny/app.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
# A simple Web Application to demonstrate the Engine.
|
6
6
|
#
|
7
7
|
# code:
|
8
|
-
# George Moschovitis <gm@navel.gr>
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
9
9
|
#
|
10
10
|
# (c) 2004 Navel, all rights reserved.
|
11
|
-
# $Id: app.rb
|
11
|
+
# $Id: app.rb 101 2004-10-22 12:35:39Z gmosx $
|
12
12
|
|
13
13
|
$:.unshift "../lib"
|
14
14
|
|
@@ -1,20 +1,15 @@
|
|
1
1
|
# = Configuration
|
2
2
|
#
|
3
|
-
# === Design:
|
4
|
-
#
|
5
3
|
# Use a separate file for configuration, makes the
|
6
4
|
# main file more readable, and allows for reconfiguring
|
7
5
|
# (reload) the webapp without restarting the server.
|
8
6
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# code: gmosx
|
7
|
+
# code:
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
12
9
|
#
|
13
10
|
# (c) 2004 Navel, all rights reserved.
|
14
|
-
# $Id: config.rb
|
11
|
+
# $Id: config.rb 106 2004-10-25 11:31:11Z gmosx $
|
15
12
|
|
16
|
-
require "n/std"
|
17
|
-
require "n/properties"
|
18
13
|
require "n/logger"
|
19
14
|
require "n/config"
|
20
15
|
|
@@ -26,8 +21,8 @@ $log = Logger.new(STDERR, 10);
|
|
26
21
|
|
27
22
|
$reload_scripts = $DBG
|
28
23
|
|
29
|
-
require "n/
|
30
|
-
|
24
|
+
require "n/std"
|
25
|
+
require "n/properties"
|
31
26
|
require "tiny/conf/requires"
|
32
27
|
|
33
28
|
$srv_extension_map = {
|
@@ -42,9 +37,9 @@ $srv_extension_map = {
|
|
42
37
|
]
|
43
38
|
}
|
44
39
|
|
45
|
-
$appsrv_address = "127.0.0.1"
|
46
|
-
$appsrv_port =
|
47
|
-
$srv_url = "http
|
40
|
+
$srv_address = $appsrv_address = "127.0.0.1"
|
41
|
+
$srv_port = $appsrv_port = 8080
|
42
|
+
$srv_url = "http://#$srv_address:#$srv_port"
|
48
43
|
|
49
44
|
module App
|
50
45
|
|
@@ -1,20 +1,14 @@
|
|
1
1
|
# = Requires all needed files
|
2
2
|
#
|
3
|
-
# === Design:
|
4
|
-
#
|
5
3
|
# Collect all requires in one file includable
|
6
4
|
# in multiple executable scripts. Moreover, it
|
7
5
|
# makes the main script file more readable.
|
8
6
|
#
|
9
|
-
# === Ideas:
|
10
|
-
#
|
11
|
-
# - use load instead of require to make reloadable?
|
12
|
-
#
|
13
7
|
# code:
|
14
|
-
# George Moschovitis <gm@navel.gr>
|
8
|
+
# * George Moschovitis <gm@navel.gr>
|
15
9
|
#
|
16
10
|
# (c) 2004 Navel, all rights reserved.
|
17
|
-
# $Id: requires.rb
|
11
|
+
# $Id: requires.rb 101 2004-10-22 12:35:39Z gmosx $
|
18
12
|
|
19
13
|
require "n/std"
|
20
14
|
require "n/properties"
|
data/examples/tiny/ctl
CHANGED
@@ -3,27 +3,12 @@
|
|
3
3
|
ARGV="$@"
|
4
4
|
|
5
5
|
case $ARGV in
|
6
|
-
start)
|
7
|
-
/usr/sbin/httpd -d `pwd` -f conf/apache.conf
|
8
|
-
ruby -C.. tiny/app.rb --start # --daemon
|
9
|
-
ERROR=$?
|
10
|
-
;;
|
11
|
-
restart)
|
12
|
-
# restart appserver only!
|
13
|
-
export ASPID= `ps ax | grep app.rb | grep ruby | cut -d" " -f1`
|
14
|
-
if [ -n "$ASPID" ]; then
|
15
|
-
echo $ASPID
|
16
|
-
kill -9 $ASPID
|
17
|
-
fi
|
18
|
-
ruby -C.. tiny/app.rb --restart # --daemon
|
19
|
-
ERROR=$?
|
20
|
-
;;
|
21
6
|
stop)
|
22
|
-
killall -9 ruby
|
7
|
+
killall -9 ruby
|
23
8
|
ERROR=$?
|
24
9
|
;;
|
25
10
|
*)
|
26
|
-
|
11
|
+
ruby -C.. tiny/app.rb --start # --daemon
|
27
12
|
ERROR=$?
|
28
13
|
esac
|
29
14
|
|
data/examples/tiny/root/index.sx
CHANGED
data/lib/n/app/cluster.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# TODO: use Sync instead of Monitor
|
4
|
-
#
|
5
|
-
# code:: gmosx
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
6
3
|
#
|
7
4
|
# (c) 2004 Navel, all rights reserved.
|
8
|
-
# $Id: cluster.rb
|
5
|
+
# $Id: cluster.rb 104 2004-10-22 13:35:03Z gmosx $
|
9
6
|
|
10
|
-
$:.unshift "
|
7
|
+
$:.unshift "lib"
|
11
8
|
|
12
9
|
require "drb"
|
13
10
|
require "monitor"
|
@@ -21,16 +18,20 @@ module N
|
|
21
18
|
|
22
19
|
# = Cluster
|
23
20
|
#
|
24
|
-
# A Cluster
|
25
|
-
# servers and distributes the state. An older version
|
26
|
-
# system, ie: the servers polled the cluster to
|
27
|
-
# version uses a push system, ie when the
|
28
|
-
# is pushed to the clients.
|
21
|
+
# A Cluster manages the state of a collection of servers. The cluster
|
22
|
+
# synchronizes the servers and distributes the state. An older version
|
23
|
+
# used a polling system, ie: the servers polled the cluster to
|
24
|
+
# obtain the state. This version uses a push system, ie when the
|
25
|
+
# state is changed a delta is pushed to the clients.
|
26
|
+
#
|
27
|
+
# TODO: use Sync instead of Monitor
|
29
28
|
#
|
30
29
|
class Cluster < N::Application
|
31
30
|
|
32
31
|
# = CHash ClusterHash
|
33
32
|
#
|
33
|
+
# The CHash 'endpoint' resides in the Cluster server
|
34
|
+
#
|
34
35
|
class CHash < Hash
|
35
36
|
attr :mon
|
36
37
|
|
@@ -111,6 +112,8 @@ class Cluster < N::Application
|
|
111
112
|
|
112
113
|
# = SHash ServerHash
|
113
114
|
#
|
115
|
+
# The SHash 'endpoint' resides in the App server
|
116
|
+
#
|
114
117
|
class SHash < Hash
|
115
118
|
attr :mon
|
116
119
|
|
data/lib/n/app/cookie.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# code:: gmosx
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
4
3
|
#
|
5
4
|
# (c) 2004 Navel, all rights reserved.
|
6
|
-
# $Id: cookie.rb
|
5
|
+
# $Id: cookie.rb 99 2004-10-22 09:50:28Z gmosx $
|
7
6
|
|
8
7
|
require "cgi"
|
9
8
|
|
@@ -34,9 +33,11 @@ end # class CGI
|
|
34
33
|
|
35
34
|
module N; module App
|
36
35
|
|
37
|
-
# Cookie
|
36
|
+
# = Cookie
|
37
|
+
#
|
38
|
+
# An encapsulation of the standard HTTP Cookie.
|
38
39
|
#
|
39
|
-
# === Design
|
40
|
+
# === Design
|
40
41
|
#
|
41
42
|
# Ruby's default cgi library implements the functionality,
|
42
43
|
# so we reuse it here!
|
@@ -44,14 +45,14 @@ module N; module App
|
|
44
45
|
# The http request contains only key/values pairs so we
|
45
46
|
# dont keep a full object.
|
46
47
|
#
|
47
|
-
# ===
|
48
|
+
# === Future
|
48
49
|
#
|
49
50
|
# - switch to libapreq!
|
50
51
|
#
|
51
52
|
class Cookie < CGI::Cookie
|
52
53
|
|
53
54
|
# Override default implementation
|
54
|
-
|
55
|
+
#
|
55
56
|
def initialize(name, *value)
|
56
57
|
super
|
57
58
|
|
@@ -83,4 +84,4 @@ class Cookie < CGI::Cookie
|
|
83
84
|
|
84
85
|
end
|
85
86
|
|
86
|
-
end; end # module
|
87
|
+
end; end # module
|
@@ -1,9 +1,8 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# code:: gmosx
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis
|
4
3
|
#
|
5
4
|
# (c) 2004 Navel, all rights reserved.
|
6
|
-
# $Id: autologin.rb
|
5
|
+
# $Id: autologin.rb 99 2004-10-22 09:50:28Z gmosx $
|
7
6
|
|
8
7
|
require "n/utils/string"
|
9
8
|
require "n/server/filter"
|
@@ -19,6 +18,8 @@ module N; module App
|
|
19
18
|
#
|
20
19
|
class AutoLoginFilter < N::ServerFilter
|
21
20
|
|
21
|
+
# Perform the actual work of auto logging in the user
|
22
|
+
#
|
22
23
|
def process(request)
|
23
24
|
if request.is_top?
|
24
25
|
# only try to autologin for top level requests
|