nitro 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +186 -0
- data/README +40 -11
- data/RELEASES +10 -1
- data/Rakefile +5 -4
- data/bin/cluster.rb +3 -3
- data/{etc/new-project.rb → bin/new_app.rb} +1 -1
- data/examples/og/README +4 -0
- data/examples/og/run.rb +254 -0
- data/examples/simple/app.rb +3 -3
- data/examples/simple/conf/config.rb +10 -22
- data/examples/simple/conf/debug-config.rb +6 -32
- data/examples/simple/conf/live-config.rb +3 -23
- data/examples/simple/conf/requires.rb +5 -5
- data/examples/simple/env.rb +3 -4
- data/examples/simple/lib/articles/entities.rb +17 -15
- data/examples/simple/lib/articles/methods.rb +15 -15
- data/examples/simple/lib/articles/part.rb +7 -8
- data/examples/simple/root/comments.si +1 -1
- data/examples/simple/root/index.sx +1 -1
- data/examples/simple/root/view-article.sx +1 -2
- data/examples/tiny/app.rb +3 -3
- data/examples/tiny/conf/config.rb +4 -4
- data/examples/tiny/conf/requires.rb +3 -4
- data/lib/n/config.rb +50 -3
- data/lib/n/logger.rb +14 -2
- data/lib/n/og.rb +381 -0
- data/lib/n/og/backend.rb +252 -0
- data/lib/n/og/backends/mysql.rb +352 -0
- data/lib/n/og/backends/psql.rb +351 -0
- data/lib/n/og/connection.rb +253 -0
- data/lib/n/og/meta.rb +127 -0
- data/lib/n/properties.rb +6 -6
- data/lib/n/server.rb +4 -7
- data/lib/n/server/appserver.rb +58 -0
- data/lib/n/{app → server}/cluster.rb +3 -3
- data/lib/n/{app → server}/cookie.rb +3 -3
- data/lib/n/server/dispatcher.rb +55 -0
- data/lib/n/server/{filter.rb → filters.rb} +1 -1
- data/lib/n/{app → server}/filters/autologin.rb +5 -5
- data/lib/n/{app → server}/fragment.rb +3 -3
- data/lib/n/{app → server}/handlers.rb +4 -4
- data/lib/n/{app → server}/handlers/code-handler.rb +6 -6
- data/lib/n/{app → server}/handlers/page-handler.rb +9 -7
- data/lib/n/{app → server}/request.rb +8 -8
- data/lib/n/{app/request-part.rb → server/requestpart.rb} +4 -4
- data/lib/n/{app → server}/script.rb +5 -5
- data/lib/n/{app → server}/server.rb +1 -1
- data/lib/n/{app → server}/session.rb +5 -5
- data/lib/n/{app → server}/user.rb +1 -1
- data/lib/n/{app/webrick-servlet.rb → server/webrick.rb} +77 -20
- data/lib/n/shaders.rb +3 -2
- data/lib/n/std.rb +5 -32
- data/test/n/{app → server}/tc_cookie.rb +2 -2
- data/test/n/server/tc_filters.rb +38 -0
- data/test/n/{app → server}/tc_request.rb +6 -6
- data/test/n/{app → server}/tc_requestpart.rb +3 -3
- data/test/n/{app → server}/tc_session.rb +2 -2
- data/test/n/tc_og.rb +178 -0
- data/test/n/ui/tc_pager.rb +3 -3
- metadata +41 -65
- data/examples/ndb/README +0 -5
- data/examples/ndb/run.rb +0 -271
- data/lib/n/app/webrick.rb +0 -73
- data/lib/n/db.rb +0 -233
- data/lib/n/db/README +0 -232
- data/lib/n/db/connection.rb +0 -365
- data/lib/n/db/managed.rb +0 -233
- data/lib/n/db/mixins.rb +0 -279
- data/lib/n/db/mysql.rb +0 -345
- data/lib/n/db/psql.rb +0 -383
- data/lib/n/db/tools.rb +0 -106
- data/lib/n/db/utils.rb +0 -102
- data/lib/n/server/PLAYBACK.txt +0 -8
- data/lib/n/server/RESEARCH.txt +0 -13
- data/test/n/tc_db.rb +0 -223
- data/test/n/tc_db_mysql.rb +0 -241
data/lib/n/og/meta.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
3
|
+
#
|
4
|
+
# (c) 2004 Navel, all rights reserved.
|
5
|
+
# $Id: meta.rb 124 2004-11-01 12:34:17Z gmosx $
|
6
|
+
|
7
|
+
module N
|
8
|
+
|
9
|
+
# = OgMetaUtils
|
10
|
+
#
|
11
|
+
# Some useful meta-language utilities.
|
12
|
+
#
|
13
|
+
module OgMetaUtils # :nodoc: all
|
14
|
+
|
15
|
+
# Conver the klass to a string representation
|
16
|
+
# The leading module if available is removed.
|
17
|
+
#
|
18
|
+
def self.expand(klass)
|
19
|
+
return klass.name.gsub(/^.*::/, "").gsub(/::/, "_").downcase
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# = OgMetaLanguage
|
25
|
+
#
|
26
|
+
# Implements a meta-language for manipulating og-managed objects
|
27
|
+
# and defining their relationships. The original idea comes
|
28
|
+
# from the excellent ActiveRecord library.
|
29
|
+
#
|
30
|
+
# Many more useful relations will be available soon.
|
31
|
+
#
|
32
|
+
module OgMetaLanguage
|
33
|
+
|
34
|
+
# Implements a 'belongs_to' relation.
|
35
|
+
# Automatically enchants the calling class with helper methods.
|
36
|
+
#
|
37
|
+
# Example:
|
38
|
+
#
|
39
|
+
# class MyObject
|
40
|
+
# belongs_to AnotherObject, :parent
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# creates the code:
|
44
|
+
#
|
45
|
+
# prop_accessor Fixnum, :parent_oid
|
46
|
+
# def parent; ... end
|
47
|
+
# def parent=(obj_or_oid); ... end
|
48
|
+
#
|
49
|
+
def belongs_to(klass, name, options = {})
|
50
|
+
module_eval %{
|
51
|
+
prop_accessor Fixnum, :#{name}_oid
|
52
|
+
|
53
|
+
def #{name}
|
54
|
+
$og.load_by_oid(@#{name}_oid, #{klass})
|
55
|
+
end
|
56
|
+
|
57
|
+
def #{name}=(obj_or_oid)
|
58
|
+
@#{name}_oid = obj_or_oid.to_i
|
59
|
+
end
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# Implements a 'has_many' relation.
|
64
|
+
# Automatically enchants the calling class with helper methods.
|
65
|
+
#
|
66
|
+
# NOT IMPLEMENTED.
|
67
|
+
#
|
68
|
+
# Example:
|
69
|
+
#
|
70
|
+
# class MyObject
|
71
|
+
# has_many AnotherObject, :children
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# creates the code:
|
75
|
+
#
|
76
|
+
# def children; ... end
|
77
|
+
#
|
78
|
+
def has_one(klass, name, options = {})
|
79
|
+
module_eval %{
|
80
|
+
def #{name}(extrasql = nil)
|
81
|
+
$og.select_one("article_oid=\#\@oid \#\{extrasql\}", #{klass})
|
82
|
+
end
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
# Implements a 'has_many' relation.
|
87
|
+
# Automatically enchants the calling class with helper methods.
|
88
|
+
#
|
89
|
+
# Example:
|
90
|
+
#
|
91
|
+
# class MyObject
|
92
|
+
# has_many AnotherObject, :children
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# creates the code:
|
96
|
+
#
|
97
|
+
# def children; ... end
|
98
|
+
#
|
99
|
+
def has_many(klass, name, options = {})
|
100
|
+
# linkback is the property of the child object that 'links back'
|
101
|
+
# to this object.
|
102
|
+
linkback = options[:linkback] || "#{N::OgMetaUtils.expand(self)}_oid"
|
103
|
+
|
104
|
+
module_eval %{
|
105
|
+
@@og_descendants ||= {}
|
106
|
+
@@og_descendants[#{klass}] = :#{linkback}
|
107
|
+
|
108
|
+
unless defined?(og_descendants)
|
109
|
+
def self.og_descendants
|
110
|
+
@@og_descendants
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def #{name}(extrasql = nil)
|
115
|
+
$og.select("#{linkback}=\#\@oid \#\{extrasql\}", #{klass})
|
116
|
+
end
|
117
|
+
}
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end # module
|
123
|
+
|
124
|
+
class Module # :nodoc: all
|
125
|
+
include N::OgMetaLanguage
|
126
|
+
end
|
127
|
+
|
data/lib/n/properties.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# = Properties support
|
2
2
|
#
|
3
3
|
# code:
|
4
|
-
# George Moschovitis <gm@navel.gr>
|
4
|
+
# * George Moschovitis <gm@navel.gr>
|
5
5
|
# design:
|
6
|
-
# Anastastios Koutoumanos <ak@navel.gr>
|
7
|
-
# Elias Karakoulakis <ekarak@ktismata.com>
|
6
|
+
# * Anastastios Koutoumanos <ak@navel.gr>
|
7
|
+
# * Elias Karakoulakis <ekarak@ktismata.com>
|
8
8
|
#
|
9
9
|
# (c) 2004 Navel, all rights reserved.
|
10
|
-
# $Id: properties.rb
|
10
|
+
# $Id: properties.rb 116 2004-10-29 16:26:32Z gmosx $
|
11
11
|
|
12
12
|
require "n/utils/array"
|
13
13
|
require "n/utils/hash"
|
@@ -89,9 +89,9 @@ class Module
|
|
89
89
|
|
90
90
|
@__props = N::SafeArray.new() unless @__props
|
91
91
|
|
92
|
-
params.each
|
92
|
+
params.each do |s|
|
93
93
|
add_prop(N::Property.new(s, klass, sql))
|
94
|
-
|
94
|
+
end
|
95
95
|
end
|
96
96
|
# to be compatible with ruby parlance
|
97
97
|
alias_method :prop, :prop_accessor
|
data/lib/n/server.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
-
# = Server
|
2
|
-
#
|
3
|
-
# Generic server infrastructure
|
4
|
-
#
|
5
1
|
# code:
|
6
|
-
# George Moschovitis <gm@navel.gr>
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
7
3
|
#
|
8
4
|
# (c) 2004 Navel, all rights reserved.
|
9
|
-
# $Id: server.rb
|
5
|
+
# $Id: server.rb 109 2004-10-27 09:12:45Z gmosx $
|
10
6
|
|
11
7
|
require "n/application"
|
12
8
|
|
@@ -14,7 +10,8 @@ module N
|
|
14
10
|
|
15
11
|
# = Server
|
16
12
|
#
|
17
|
-
# Base server class
|
13
|
+
# Base server class, provides generic server
|
14
|
+
# infrastructure.
|
18
15
|
#
|
19
16
|
class Server < N::Application
|
20
17
|
# the listening address/port for this server.
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
3
|
+
#
|
4
|
+
# (c) 2004 Navel, all rights reserved.
|
5
|
+
# $Id: appserver.rb 117 2004-10-29 16:27:22Z gmosx $
|
6
|
+
|
7
|
+
require "drb"
|
8
|
+
|
9
|
+
require "n/application"
|
10
|
+
require "n/server"
|
11
|
+
require "n/server/session"
|
12
|
+
|
13
|
+
module N
|
14
|
+
|
15
|
+
# = ServerMixin
|
16
|
+
#
|
17
|
+
# Usefull application server related methods.
|
18
|
+
#
|
19
|
+
module AppServerMixin
|
20
|
+
|
21
|
+
def initialize_app
|
22
|
+
if $drb_state
|
23
|
+
# Cluster mode: use distributed Ruby objects.
|
24
|
+
$lm = N::Cluster::Slm.new($drb_lm_server, "druby://:8000")
|
25
|
+
$sessions = DRbObject.new(nil, $drb_sessions_cluster)
|
26
|
+
else
|
27
|
+
# NoCluster mode: use standard Ruby onjects.
|
28
|
+
$lm = N::SafeHash.new
|
29
|
+
$sessions = N::SessionManager.new
|
30
|
+
end
|
31
|
+
|
32
|
+
# initialize app
|
33
|
+
initialize_sitemap()
|
34
|
+
initialize_shaders()
|
35
|
+
initialize_events()
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
# = AppServer
|
41
|
+
#
|
42
|
+
# The Application Server. Handles dynamic requests in a web application.
|
43
|
+
# Dont keepalive (or use a VERY SMALL keepalive). Typically this server
|
44
|
+
# is used along with a standars http server that handles other resources.
|
45
|
+
#
|
46
|
+
class AppServer < N::Server
|
47
|
+
include N::AppServerMixin
|
48
|
+
|
49
|
+
def initialize(name = "AppServer")
|
50
|
+
super
|
51
|
+
initialize_app()
|
52
|
+
|
53
|
+
$log.info "Web Server listening at #$srv_url"
|
54
|
+
$log.info "App Server listening at http://#$appsrv_address:#$appsrv_port"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end # module
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: cluster.rb
|
5
|
+
# $Id: cluster.rb 112 2004-10-27 10:59:55Z gmosx $
|
6
6
|
|
7
7
|
$:.unshift "lib"
|
8
8
|
|
@@ -12,7 +12,7 @@ require "monitor"
|
|
12
12
|
require "n/application"
|
13
13
|
require "n/server"
|
14
14
|
require "n/utils/cache"
|
15
|
-
require "n/
|
15
|
+
require "n/server/session"
|
16
16
|
|
17
17
|
module N
|
18
18
|
|
@@ -202,7 +202,7 @@ class Cluster < N::Application
|
|
202
202
|
|
203
203
|
def run
|
204
204
|
N::Cluster::Clm.new
|
205
|
-
DRb.start_service("druby://:8001", N::
|
205
|
+
DRb.start_service("druby://:8001", N::SessionManager.new)
|
206
206
|
|
207
207
|
while true
|
208
208
|
sleep(5000)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: cookie.rb
|
5
|
+
# $Id: cookie.rb 112 2004-10-27 10:59:55Z gmosx $
|
6
6
|
|
7
7
|
require "cgi"
|
8
8
|
|
@@ -31,7 +31,7 @@ end
|
|
31
31
|
|
32
32
|
end # class CGI
|
33
33
|
|
34
|
-
module N
|
34
|
+
module N
|
35
35
|
|
36
36
|
# = Cookie
|
37
37
|
#
|
@@ -84,4 +84,4 @@ class Cookie < CGI::Cookie
|
|
84
84
|
|
85
85
|
end
|
86
86
|
|
87
|
-
end
|
87
|
+
end # module
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module N
|
2
|
+
|
3
|
+
#
|
4
|
+
#
|
5
|
+
class Dispatcher
|
6
|
+
|
7
|
+
def process(request)
|
8
|
+
service = ...
|
9
|
+
method = ...
|
10
|
+
query_string = ...
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end # module
|
16
|
+
|
17
|
+
__END__
|
18
|
+
|
19
|
+
/login
|
20
|
+
/logout
|
21
|
+
|
22
|
+
/service/method?params
|
23
|
+
|
24
|
+
|
25
|
+
/fora/view_forum/1
|
26
|
+
|
27
|
+
/fora/view_forum?fid=1
|
28
|
+
|
29
|
+
|
30
|
+
/fora/view_forum.sx
|
31
|
+
|
32
|
+
if file exists evaluate in the controller a render method.
|
33
|
+
|
34
|
+
.xhtml
|
35
|
+
.xinc
|
36
|
+
|
37
|
+
class ForaController
|
38
|
+
|
39
|
+
def view_forum
|
40
|
+
@parent = Forum.db_get(request["pid"])
|
41
|
+
end
|
42
|
+
|
43
|
+
def render_view_forum
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
<?r for message in @parent.messages ?>
|
49
|
+
<li>#{message.title}</li>
|
50
|
+
<?r end ?>
|
51
|
+
|
52
|
+
|
53
|
+
one method, different views
|
54
|
+
html,
|
55
|
+
xml (for rpc)
|
@@ -2,14 +2,14 @@
|
|
2
2
|
# * George Moschovitis
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: autologin.rb
|
5
|
+
# $Id: autologin.rb 124 2004-11-01 12:34:17Z gmosx $
|
6
6
|
|
7
7
|
require "n/utils/string"
|
8
|
-
require "n/server/
|
8
|
+
require "n/server/filters"
|
9
9
|
|
10
10
|
require_part "users"
|
11
11
|
|
12
|
-
module N
|
12
|
+
module N
|
13
13
|
|
14
14
|
# = AutoLoginFilter
|
15
15
|
#
|
@@ -29,7 +29,7 @@ class AutoLoginFilter < N::ServerFilter
|
|
29
29
|
|
30
30
|
username, password_crypted = cookie.split(",")
|
31
31
|
|
32
|
-
if user = $
|
32
|
+
if user = $og.load_by_name(username, N::User) and
|
33
33
|
password_crypted == user.password
|
34
34
|
if request.session.login(request, user)
|
35
35
|
# user logged in
|
@@ -48,4 +48,4 @@ class AutoLoginFilter < N::ServerFilter
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
-
end
|
51
|
+
end # module
|
@@ -2,12 +2,12 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: fragment.rb
|
5
|
+
# $Id: fragment.rb 112 2004-10-27 10:59:55Z gmosx $
|
6
6
|
|
7
7
|
require "n/utils/cache"
|
8
8
|
require "n/mixins"
|
9
9
|
|
10
|
-
module N
|
10
|
+
module N
|
11
11
|
|
12
12
|
# = Fragment
|
13
13
|
#
|
@@ -67,4 +67,4 @@ class Fragment
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
end
|
70
|
+
end # module
|
@@ -2,12 +2,12 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: handlers.rb
|
5
|
+
# $Id: handlers.rb 112 2004-10-27 10:59:55Z gmosx $
|
6
6
|
|
7
7
|
require "n/utils/cache"
|
8
|
-
require "n/server/
|
8
|
+
require "n/server/filters"
|
9
9
|
|
10
|
-
module N
|
10
|
+
module N
|
11
11
|
|
12
12
|
# = Handler
|
13
13
|
#
|
@@ -124,4 +124,4 @@ class ScriptHandlerError < HandlerError
|
|
124
124
|
|
125
125
|
end
|
126
126
|
|
127
|
-
end
|
127
|
+
end # module
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: code-handler.rb
|
5
|
+
# $Id: code-handler.rb 112 2004-10-27 10:59:55Z gmosx $
|
6
6
|
|
7
7
|
require "cgi"
|
8
8
|
require "singleton"
|
@@ -10,11 +10,11 @@ require "sync"
|
|
10
10
|
|
11
11
|
require "n/utils/cache"
|
12
12
|
require "n/utils/uri"
|
13
|
-
require "n/
|
14
|
-
require "n/
|
15
|
-
require "n/
|
13
|
+
require "n/server/script"
|
14
|
+
require "n/server/fragment"
|
15
|
+
require "n/server/handlers"
|
16
16
|
|
17
|
-
module N
|
17
|
+
module N
|
18
18
|
|
19
19
|
# = CodeHandler
|
20
20
|
#
|
@@ -179,4 +179,4 @@ class CodeScript < Script
|
|
179
179
|
|
180
180
|
end # CodeScript
|
181
181
|
|
182
|
-
end
|
182
|
+
end # module
|