nitro 0.2.0 → 0.3.0
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 +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
|