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.
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