nitro 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/ChangeLog +186 -0
  2. data/README +40 -11
  3. data/RELEASES +10 -1
  4. data/Rakefile +5 -4
  5. data/bin/cluster.rb +3 -3
  6. data/{etc/new-project.rb → bin/new_app.rb} +1 -1
  7. data/examples/og/README +4 -0
  8. data/examples/og/run.rb +254 -0
  9. data/examples/simple/app.rb +3 -3
  10. data/examples/simple/conf/config.rb +10 -22
  11. data/examples/simple/conf/debug-config.rb +6 -32
  12. data/examples/simple/conf/live-config.rb +3 -23
  13. data/examples/simple/conf/requires.rb +5 -5
  14. data/examples/simple/env.rb +3 -4
  15. data/examples/simple/lib/articles/entities.rb +17 -15
  16. data/examples/simple/lib/articles/methods.rb +15 -15
  17. data/examples/simple/lib/articles/part.rb +7 -8
  18. data/examples/simple/root/comments.si +1 -1
  19. data/examples/simple/root/index.sx +1 -1
  20. data/examples/simple/root/view-article.sx +1 -2
  21. data/examples/tiny/app.rb +3 -3
  22. data/examples/tiny/conf/config.rb +4 -4
  23. data/examples/tiny/conf/requires.rb +3 -4
  24. data/lib/n/config.rb +50 -3
  25. data/lib/n/logger.rb +14 -2
  26. data/lib/n/og.rb +381 -0
  27. data/lib/n/og/backend.rb +252 -0
  28. data/lib/n/og/backends/mysql.rb +352 -0
  29. data/lib/n/og/backends/psql.rb +351 -0
  30. data/lib/n/og/connection.rb +253 -0
  31. data/lib/n/og/meta.rb +127 -0
  32. data/lib/n/properties.rb +6 -6
  33. data/lib/n/server.rb +4 -7
  34. data/lib/n/server/appserver.rb +58 -0
  35. data/lib/n/{app → server}/cluster.rb +3 -3
  36. data/lib/n/{app → server}/cookie.rb +3 -3
  37. data/lib/n/server/dispatcher.rb +55 -0
  38. data/lib/n/server/{filter.rb → filters.rb} +1 -1
  39. data/lib/n/{app → server}/filters/autologin.rb +5 -5
  40. data/lib/n/{app → server}/fragment.rb +3 -3
  41. data/lib/n/{app → server}/handlers.rb +4 -4
  42. data/lib/n/{app → server}/handlers/code-handler.rb +6 -6
  43. data/lib/n/{app → server}/handlers/page-handler.rb +9 -7
  44. data/lib/n/{app → server}/request.rb +8 -8
  45. data/lib/n/{app/request-part.rb → server/requestpart.rb} +4 -4
  46. data/lib/n/{app → server}/script.rb +5 -5
  47. data/lib/n/{app → server}/server.rb +1 -1
  48. data/lib/n/{app → server}/session.rb +5 -5
  49. data/lib/n/{app → server}/user.rb +1 -1
  50. data/lib/n/{app/webrick-servlet.rb → server/webrick.rb} +77 -20
  51. data/lib/n/shaders.rb +3 -2
  52. data/lib/n/std.rb +5 -32
  53. data/test/n/{app → server}/tc_cookie.rb +2 -2
  54. data/test/n/server/tc_filters.rb +38 -0
  55. data/test/n/{app → server}/tc_request.rb +6 -6
  56. data/test/n/{app → server}/tc_requestpart.rb +3 -3
  57. data/test/n/{app → server}/tc_session.rb +2 -2
  58. data/test/n/tc_og.rb +178 -0
  59. data/test/n/ui/tc_pager.rb +3 -3
  60. metadata +41 -65
  61. data/examples/ndb/README +0 -5
  62. data/examples/ndb/run.rb +0 -271
  63. data/lib/n/app/webrick.rb +0 -73
  64. data/lib/n/db.rb +0 -233
  65. data/lib/n/db/README +0 -232
  66. data/lib/n/db/connection.rb +0 -365
  67. data/lib/n/db/managed.rb +0 -233
  68. data/lib/n/db/mixins.rb +0 -279
  69. data/lib/n/db/mysql.rb +0 -345
  70. data/lib/n/db/psql.rb +0 -383
  71. data/lib/n/db/tools.rb +0 -106
  72. data/lib/n/db/utils.rb +0 -102
  73. data/lib/n/server/PLAYBACK.txt +0 -8
  74. data/lib/n/server/RESEARCH.txt +0 -13
  75. data/test/n/tc_db.rb +0 -223
  76. 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 98 2004-10-22 07:36:20Z gmosx $
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 { |s|
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 98 2004-10-22 07:36:20Z gmosx $
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 104 2004-10-22 13:35:03Z gmosx $
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/app/session"
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::App::SessionManager.new)
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 99 2004-10-22 09:50:28Z gmosx $
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; module App
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; end # module
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,7 +2,7 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 20024 Navel, all rights reserved.
5
- # $Id: filter.rb 99 2004-10-22 09:50:28Z gmosx $
5
+ # $Id: filters.rb 111 2004-10-27 09:30:19Z gmosx $
6
6
 
7
7
  require "socket"
8
8
  require "thread"
@@ -2,14 +2,14 @@
2
2
  # * George Moschovitis
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: autologin.rb 99 2004-10-22 09:50:28Z gmosx $
5
+ # $Id: autologin.rb 124 2004-11-01 12:34:17Z gmosx $
6
6
 
7
7
  require "n/utils/string"
8
- require "n/server/filter"
8
+ require "n/server/filters"
9
9
 
10
10
  require_part "users"
11
11
 
12
- module N; module App
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 = $db.get_by_name(username, N::User) and
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; end # module
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 99 2004-10-22 09:50:28Z gmosx $
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; module App
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; end # module
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 99 2004-10-22 09:50:28Z gmosx $
5
+ # $Id: handlers.rb 112 2004-10-27 10:59:55Z gmosx $
6
6
 
7
7
  require "n/utils/cache"
8
- require "n/server/filter"
8
+ require "n/server/filters"
9
9
 
10
- module N; module App
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; end # module
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 99 2004-10-22 09:50:28Z gmosx $
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/app/script"
14
- require "n/app/fragment"
15
- require "n/app/handlers"
13
+ require "n/server/script"
14
+ require "n/server/fragment"
15
+ require "n/server/handlers"
16
16
 
17
- module N; module App
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; end # module
182
+ end # module