nitro 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/ChangeLog +284 -0
  2. data/{LICENCE → LICENSE} +1 -1
  3. data/README +13 -17
  4. data/RELEASES +13 -1
  5. data/Rakefile +1 -9
  6. data/bin/cluster.rb +5 -5
  7. data/examples/blog/README +45 -0
  8. data/examples/blog/apache.conf +0 -0
  9. data/examples/blog/app.rb +21 -0
  10. data/examples/blog/config.rb +88 -0
  11. data/examples/blog/lib/blog.rb +104 -0
  12. data/examples/blog/log/app.log +117 -0
  13. data/examples/blog/root/comments.xhtml +38 -0
  14. data/examples/blog/root/entry_form.xhtml +18 -0
  15. data/examples/blog/root/index.xhtml +43 -0
  16. data/examples/blog/root/login.xhtml +24 -0
  17. data/examples/blog/root/m/bubbles.gif +0 -0
  18. data/examples/blog/root/m/comments_curve.gif +0 -0
  19. data/examples/blog/root/m/down.gif +0 -0
  20. data/examples/blog/root/m/footer_bg.gif +0 -0
  21. data/examples/blog/root/m/garrow.gif +0 -0
  22. data/examples/blog/root/m/gbull.gif +0 -0
  23. data/examples/blog/root/m/grbull.gif +0 -0
  24. data/examples/blog/root/m/h1_bg.gif +0 -0
  25. data/examples/blog/root/m/header_bg.gif +0 -0
  26. data/examples/blog/root/m/obull.gif +0 -0
  27. data/examples/blog/root/m/page_bg.gif +0 -0
  28. data/examples/blog/root/m/side_title_bg.gif +0 -0
  29. data/examples/blog/root/m/sidebar_bg.gif +0 -0
  30. data/examples/blog/root/recent_posts.xhtml +14 -0
  31. data/examples/blog/root/style.css +201 -0
  32. data/examples/blog/root/style.xsl +118 -0
  33. data/examples/blog/root/view_entry.xhtml +29 -0
  34. data/examples/og/run.rb +27 -29
  35. data/examples/tiny/README +3 -4
  36. data/examples/tiny/app.rb +6 -16
  37. data/examples/tiny/config.rb +30 -0
  38. data/examples/tiny/log/app.log +23 -0
  39. data/examples/tiny/root/{index.sx → index.xhtml} +3 -6
  40. data/lib/{n/std.rb → nitro.rb} +9 -4
  41. data/lib/{n → nitro}/application.rb +13 -7
  42. data/lib/{n → nitro}/config.rb +38 -8
  43. data/lib/{n → nitro}/events.rb +1 -1
  44. data/lib/{n → nitro}/l10n.rb +1 -1
  45. data/lib/{n → nitro}/logger.rb +8 -8
  46. data/lib/{n → nitro}/macros.rb +3 -3
  47. data/lib/{n → nitro}/mixins.rb +1 -1
  48. data/lib/nitro/properties.rb +301 -0
  49. data/lib/{n → nitro}/server.rb +2 -2
  50. data/lib/{n → nitro}/server/appserver.rb +14 -5
  51. data/lib/{n → nitro}/server/cluster.rb +5 -5
  52. data/lib/{n → nitro}/server/cookie.rb +1 -1
  53. data/lib/nitro/server/dispatcher.rb +66 -0
  54. data/lib/{n → nitro}/server/filters.rb +7 -7
  55. data/lib/{n → nitro}/server/filters/autologin.rb +3 -3
  56. data/lib/{n → nitro}/server/fragment.rb +3 -3
  57. data/lib/{n → nitro}/server/handlers.rb +3 -3
  58. data/lib/nitro/server/render.rb +200 -0
  59. data/lib/{n → nitro}/server/request.rb +6 -6
  60. data/lib/{n → nitro}/server/requestpart.rb +5 -5
  61. data/lib/{n → nitro}/server/script.rb +3 -3
  62. data/lib/{n → nitro}/server/server.rb +4 -4
  63. data/lib/{n → nitro}/server/session.rb +3 -3
  64. data/lib/nitro/server/shaders.rb +165 -0
  65. data/lib/{n → nitro}/server/user.rb +1 -1
  66. data/lib/nitro/server/webrick.rb +175 -0
  67. data/lib/nitro/service.rb +25 -0
  68. data/lib/{n → nitro}/sitemap.rb +2 -2
  69. data/lib/{n → nitro}/ui/date-select.rb +0 -0
  70. data/lib/{n → nitro}/ui/pager.rb +1 -1
  71. data/lib/{n → nitro}/ui/popup.rb +1 -1
  72. data/lib/{n → nitro}/ui/select.rb +1 -1
  73. data/lib/{n → nitro}/ui/tabs.rb +1 -1
  74. data/lib/{n → nitro}/utils/array.rb +1 -1
  75. data/lib/{n → nitro}/utils/cache.rb +1 -1
  76. data/lib/{n → nitro}/utils/gfx.rb +1 -1
  77. data/lib/{n → nitro}/utils/hash.rb +1 -1
  78. data/lib/{n → nitro}/utils/html.rb +1 -1
  79. data/lib/{n → nitro}/utils/http.rb +1 -1
  80. data/lib/{n → nitro}/utils/mail.rb +1 -1
  81. data/lib/{n → nitro}/utils/number.rb +1 -1
  82. data/lib/{n → nitro}/utils/pool.rb +1 -1
  83. data/lib/{n → nitro}/utils/string.rb +19 -95
  84. data/lib/{n → nitro}/utils/template.rb +0 -0
  85. data/lib/{n → nitro}/utils/time.rb +1 -1
  86. data/lib/{n → nitro}/utils/uri.rb +3 -3
  87. data/lib/nitro/version.rb +11 -0
  88. data/lib/{n/og.rb → og.rb} +61 -31
  89. data/lib/{n/og → og}/backend.rb +13 -7
  90. data/lib/{n/og → og}/backends/mysql.rb +43 -39
  91. data/lib/{n/og → og}/backends/psql.rb +42 -38
  92. data/lib/{n/og → og}/connection.rb +21 -9
  93. data/lib/{n/og → og}/meta.rb +18 -12
  94. data/lib/xsl/base.xsl +11 -88
  95. data/test/n/server/tc_cookie.rb +1 -1
  96. data/test/n/server/tc_filters.rb +1 -1
  97. data/test/n/server/tc_request.rb +3 -3
  98. data/test/n/server/tc_requestpart.rb +2 -2
  99. data/test/n/server/tc_session.rb +1 -1
  100. data/test/n/tc_events.rb +1 -1
  101. data/test/n/tc_og.rb +16 -18
  102. data/test/n/tc_properties.rb +22 -18
  103. data/test/n/tc_sitemap.rb +2 -2
  104. data/test/n/ui/tc_pager.rb +4 -4
  105. data/test/n/utils/tc_cache.rb +1 -1
  106. data/test/n/utils/tc_hash.rb +1 -1
  107. data/test/n/utils/tc_html.rb +1 -1
  108. data/test/n/utils/tc_http.rb +1 -1
  109. data/test/n/utils/tc_number.rb +1 -1
  110. data/test/n/utils/tc_strings.rb +1 -46
  111. data/test/n/utils/tc_uri.rb +1 -1
  112. metadata +101 -108
  113. data/examples/simple/README +0 -42
  114. data/examples/simple/app.rb +0 -31
  115. data/examples/simple/conf/apache.conf +0 -100
  116. data/examples/simple/conf/config.rb +0 -72
  117. data/examples/simple/conf/debug-config.rb +0 -26
  118. data/examples/simple/conf/live-config.rb +0 -26
  119. data/examples/simple/conf/requires.rb +0 -43
  120. data/examples/simple/ctl +0 -32
  121. data/examples/simple/env.rb +0 -32
  122. data/examples/simple/install.rb +0 -12
  123. data/examples/simple/lib/articles/entities.rb +0 -37
  124. data/examples/simple/lib/articles/lc-en.rb +0 -36
  125. data/examples/simple/lib/articles/methods.rb +0 -55
  126. data/examples/simple/lib/articles/part.rb +0 -57
  127. data/examples/simple/root/add-article.sx +0 -15
  128. data/examples/simple/root/article-form.ss +0 -20
  129. data/examples/simple/root/comments-form.ss +0 -16
  130. data/examples/simple/root/comments.si +0 -30
  131. data/examples/simple/root/index.sx +0 -44
  132. data/examples/simple/root/shader/shader.xsl +0 -100
  133. data/examples/simple/root/shader/style.css +0 -9
  134. data/examples/simple/root/view-article.sx +0 -29
  135. data/examples/tiny/conf/config.rb +0 -62
  136. data/examples/tiny/conf/requires.rb +0 -33
  137. data/examples/tiny/ctl +0 -16
  138. data/lib/n/parts.rb +0 -157
  139. data/lib/n/properties.rb +0 -199
  140. data/lib/n/server/dispatcher.rb +0 -55
  141. data/lib/n/server/handlers/code-handler.rb +0 -182
  142. data/lib/n/server/handlers/page-handler.rb +0 -612
  143. data/lib/n/server/webrick.rb +0 -283
  144. data/lib/n/shaders.rb +0 -166
  145. data/lib/n/sync/clc.rb +0 -110
  146. data/lib/n/sync/handler.rb +0 -229
  147. data/lib/n/sync/server.rb +0 -176
  148. data/lib/p/README +0 -1
@@ -1,229 +0,0 @@
1
- # code:
2
- # * George Moschovitis <gm@navel.gr>
3
- # * Anastasios Koutoumanos <ak@navel.gr>
4
- #
5
- # (c) 2004 Navel, all rights reserved.
6
- # $Id: handler.rb 101 2004-10-22 12:35:39Z gmosx $
7
-
8
- require "timeout"
9
- require "n/server"
10
-
11
- module N; module Sync
12
-
13
- class HandlerExitException < Exception; end
14
-
15
- # = Handler
16
- #
17
- # Sync Server Handler
18
- #
19
- # === Design:
20
- #
21
- # Override this to create your handler. A handler can
22
- # act as a multiplexer to implement multiple services per server.
23
- #
24
- class Handler
25
- SEPARATOR = "\000"
26
-
27
- # socket timeout in seconds
28
- @@socket_timeout = 30
29
-
30
- # handler timeout in seconds
31
- @@handler_timeout = 60 * 60
32
-
33
- attr :server, :socket
34
-
35
- attr :thread, :touch_time
36
-
37
- # status
38
- attr_accessor :status
39
-
40
- STATUS_IDLE = 0
41
- STATUS_RUNNING = 10
42
- STATUS_STOPPED = 20
43
-
44
- def initialize(server, socket)
45
- @server, @socket = server, socket
46
- end
47
-
48
- # Called when the handler starts.
49
- #
50
- def start
51
- touch!
52
- @thread = Thread.new(&method("run").to_proc)
53
- end
54
-
55
- # Called when the handler stops.
56
- #
57
- def stop
58
- unless STATUS_STOPPED == @status
59
- @status = STATUS_STOPPED
60
- $log.debug "Stoping handler" if $DBG
61
-
62
- begin
63
- @socket.close()
64
- rescue Exception, StandardError => e
65
- # gmosx: this is needed to be FAULT TOLERANT
66
- # DRINK IT!
67
- $log.error "Cannot close exception when stoping handler."
68
- end
69
-
70
- # gmosx: why not? more FAULT TOLERANT.
71
- @server.handlers.delete_if {|h| STATUS_STOPPED == h.status}
72
-
73
- end
74
- end
75
-
76
- # called by the garbage collector.
77
- #
78
- def gc!
79
- @thread.raise HandlerExitException.new()
80
- end
81
-
82
- # Perform the handler's action.
83
- #
84
- def run
85
- @status = STATUS_RUNNING
86
-
87
- while (STATUS_RUNNING == @status) and (not @socket.closed?)
88
- begin
89
- unless cmd = read()
90
- $log.error "Client closed connection"
91
- @status = STATUS_IDLE
92
- else
93
- touch!
94
- handle(cmd.chop())
95
- end
96
- rescue HandlerExitException => ex
97
- @status = STATUS_IDLE
98
- $log.debug "Handler exit" if $DBG
99
- rescue Exception, StandardError => ex
100
- @status = STATUS_IDLE
101
- $log.debug ex if $DBG
102
- end
103
- end
104
-
105
- begin
106
- stop()
107
- rescue Exception, StandardError => e
108
- # gmosx: this rescue block needed to get debug info!
109
- #
110
- $log.error pp_exception(e)
111
- end
112
- end
113
-
114
- def touch!
115
- @touch_time = Time.now()
116
- end
117
-
118
- def live?
119
- return Time.now < @touch_time + @@handler_timeout
120
- end
121
-
122
- # Read xml from the socket
123
- #
124
- def read
125
- return unless @status == STATUS_RUNNING
126
-
127
- cmd = nil
128
-
129
- # gmosx: no timeout here!
130
- cmd = @socket.gets(SEPARATOR)
131
- $log.debug "in: #{cmd}" if $DBG
132
-
133
- return cmd
134
- end
135
-
136
- # Write xml to the socket
137
- #
138
- def write(cmd)
139
- return unless @status == STATUS_RUNNING
140
-
141
- $log.debug "out: #{cmd}" if $DBG
142
-
143
- begin
144
- timeout(@@socket_timeout) { @socket << "#{cmd}#{SEPARATOR}" }
145
- rescue Exception, StandardError => e
146
- # gmosx: the socket is invalid close the handler.
147
- $log.error pp_exception(e)
148
- stop()
149
- end
150
- end
151
-
152
- # parse the xml commnad to create a ruby method call.
153
- #
154
- def parse(cmd)
155
- return unless @status == STATUS_RUNNING
156
-
157
- cmd = REXML::Document.new(cmd).root()
158
-
159
- method = cmd.name().gsub(/-/, "_")
160
- unless cmd.attributes.empty?
161
- args = "(#{cmd.attributes.collect { |k, v| ":#{k.gsub(/-/, "_")} => '#{v}'" }.join(", ")})"
162
- else
163
- args = nil
164
- end
165
-
166
- return "cmd_#{method}#{args}"
167
- end
168
-
169
- # Generic handler.
170
- #
171
- def handle(cmd)
172
- if cmd = parse(cmd)
173
- $log.debug "exec: #{cmd}" if $DBG
174
- begin
175
- eval(cmd)
176
- rescue => ex
177
- $log.error ex
178
- end
179
- end
180
- end
181
-
182
- # Send to another handler
183
- #
184
- def send(cmd, handler)
185
- handler.write(cmd)
186
- end
187
-
188
- # Broadcast to all handlers (clients)
189
- #
190
- def broadcast(cmd)
191
- @server.broadcast(cmd)
192
- end
193
-
194
- # Broadcast to all other handlers (clients)
195
- #
196
- def broadcast_to_others(cmd)
197
- for handler in @server.handlers
198
- unless self == handler
199
- handler.write(cmd)
200
- end
201
- end
202
- end
203
-
204
- # ------------------------------------------------------------------
205
-
206
- def info(txt)
207
- write(%|<info text="#{txt}" />|)
208
- end
209
-
210
- def error(txt)
211
- write(%|<error text="#{txt}" />|)
212
- end
213
-
214
- # ------------------------------------------------------------------
215
- # Commands
216
-
217
- # A sample command
218
- #
219
- def cmd_ping(args)
220
- cmd = %{<pong time="#{Time.now}"}
221
- cmd += %{ challenge="#{args[:challenge]}"} if args
222
- cmd += " />"
223
-
224
- write(cmd)
225
- end
226
-
227
- end
228
-
229
- end; end #modules
@@ -1,176 +0,0 @@
1
- # code:
2
- # * George Moschovitis <gm@navel.gr>
3
- # * Anastasios Koutoumanos <ak@navel.gr>
4
- #
5
- # (c) 2004 Navel, all rights reserved.
6
- # $Id: server.rb 101 2004-10-22 12:35:39Z gmosx $
7
-
8
- require "thread"
9
- require "socket"
10
- require "rexml/document"
11
-
12
- require "n/std"
13
- require "n/application"
14
- require "n/utils/array"
15
- require "n/sync/handler"
16
-
17
- module N; module Sync
18
-
19
- # = Server
20
- #
21
- # A Synchronous server tha communicates with clients using
22
- # application specific xml protocols. Typically communicates with
23
- # Flash clients utilising the XmlSocket functionality to enable 'push'
24
- # flash applications.
25
- #
26
- # The Macromedia XML Socket protocol is used, \000 is used as a eof
27
- # marker. NO: the XML protocol is not really appropriate, better use
28
- # a space optimized delimited ASCII protocol.
29
- #
30
- # === Design:
31
- #
32
- # Should support clustered operation: A cluster of servers is spawned.
33
- # The client connects to one of the servers at random. The client sticks
34
- # to the server. Each server considers the others as clients and
35
- # rebroadcasts all the events.
36
- #
37
- # We keep one service per server for simplicity, if we need multiple
38
- # services we can implement a multiplexer service (handler).
39
- #
40
- # === TODO:
41
- #
42
- # - Investigate if this server can be done with select.
43
- #
44
- class Server < N::Application
45
- MONITOR_INTERVAL = 2 * 60
46
-
47
- # a single tcp server accepts all tcp requests
48
- attr :tcp_server
49
-
50
- # the listening address/port for this server.
51
- attr_reader :address, :port
52
-
53
- # the handler class, used to instantiate handlers
54
- attr :handler_class
55
-
56
- # maximum number of clients to connect.
57
- attr_accessor :max_handlers
58
-
59
- # the handler list, all handler attached to the server.
60
- attr_accessor :handlers
61
-
62
- # status
63
- attr_accessor :status
64
-
65
- STATUS_IDLE = 0
66
- STATUS_RUNNING = 10
67
- STATUS_STOPPED = 20
68
-
69
- def initialize(address = "localhost", port = 2121, handler_class = N::Sync::Handler, max_handlers = nil)
70
- @address, @port = address, port
71
- @max_handlers = max_handlers
72
- @name, @title = "nsync", "Navel Sync"
73
- @status = STATUS_IDLE
74
-
75
- @handlers = N::SafeArray.new()
76
- @handler_class = handler_class
77
-
78
- super()
79
- end
80
-
81
- # Start the server.
82
- #
83
- def start()
84
- # a single tcp server accepts all tcp requests
85
- @tcp_server = TCPServer.new(address, port)
86
-
87
- start_monitor()
88
- run()
89
- end
90
-
91
- # Stop the server.
92
- #
93
- def stop()
94
- @status = STATUS_STOPED
95
- end
96
-
97
- # Run the main loop of the server.
98
- #
99
- def run()
100
- @status = STATUS_RUNNING
101
- $log.info "Server is running."
102
-
103
- begin
104
- while (STATUS_RUNNING == @status)
105
- socket = @tcp_server.accept()
106
- $log.debug "Socket accepted" if $DBG
107
- handler = @handler_class.new(self, socket)
108
- handlers << handler
109
- handler.start()
110
- end
111
- rescue Exception, StandardError => e
112
- $log.error pp_exception(e)
113
- # tml, FIXME:
114
- # this is dangerous! make more FAULT TOLERANT!
115
- end
116
-
117
- @status = STATUS_IDLE
118
- end
119
-
120
- def shutdown()
121
- end_monitor()
122
- for handler in handlers
123
- handler.stop()
124
- end
125
- Thread.exit()
126
- end
127
-
128
- # ------------------------------------------------------------------
129
-
130
- def start_monitor
131
- @monitor = Thread.new {
132
- begin
133
- while true
134
- sleep(MONITOR_INTERVAL)
135
- $log.debug "monitor beat -- #{@handlers.size()} handlers" if $DBG
136
-
137
- for handler in @handlers
138
- unless handler.live?
139
- $log.info "Idle handler detected!"
140
- handler.gc!()
141
- end
142
- end
143
- end
144
- rescue Exception, StandardError => e
145
- $log.error pp_exception(e)
146
- end
147
- }
148
- end
149
-
150
- def end_monitor
151
- Thread.kill(@monitor)
152
- end
153
-
154
- # ------------------------------------------------------------------
155
-
156
- def send(cmd, handler)
157
- handler.write(cmd)
158
- end
159
-
160
- def broadcast(cmd)
161
- for handler in @handlers
162
- handler.write(cmd)
163
- end
164
- end
165
-
166
- end
167
-
168
- if $0 == __FILE__
169
- require "n/logger"
170
-
171
- $log = Logger.new(STDERR)
172
- Server.new().exec()
173
- end
174
-
175
- end; end #modules
176
-
@@ -1 +0,0 @@
1
- Add Web Application Framework parts in this directory