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
@@ -2,16 +2,16 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: request.rb 124 2004-11-01 12:34:17Z gmosx $
5
+ # $Id: request.rb 155 2004-11-13 20:32:12Z gmosx $
6
6
 
7
7
  require "cgi"
8
8
  require "ftools"
9
9
 
10
- require "n/utils/string"
11
- require "n/utils/uri"
12
- require "n/utils/http"
13
- require "n/server/cookie"
14
- require "n/server/requestpart"
10
+ require "nitro/utils/string"
11
+ require "nitro/utils/uri"
12
+ require "nitro/utils/http"
13
+ require "nitro/server/cookie"
14
+ require "nitro/server/requestpart"
15
15
 
16
16
  module N
17
17
 
@@ -2,15 +2,15 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: requestpart.rb 112 2004-10-27 10:59:55Z gmosx $
5
+ # $Id: requestpart.rb 155 2004-11-13 20:32:12Z gmosx $
6
6
 
7
7
  require "cgi"
8
8
  require "ftools"
9
9
 
10
- require "n/utils/string"
11
- require "n/utils/uri"
12
- require "n/utils/http"
13
- require "n/server/cookie"
10
+ require "nitro/utils/string"
11
+ require "nitro/utils/uri"
12
+ require "nitro/utils/http"
13
+ require "nitro/server/cookie"
14
14
 
15
15
  module N
16
16
 
@@ -2,12 +2,12 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: script.rb 112 2004-10-27 10:59:55Z gmosx $
5
+ # $Id: script.rb 155 2004-11-13 20:32:12Z gmosx $
6
6
 
7
7
  require "fileutils"
8
8
 
9
- require "n/utils/cache"
10
- require "n/server/fragment"
9
+ require "nitro/utils/cache"
10
+ require "nitro/server/fragment"
11
11
 
12
12
  module N
13
13
 
@@ -2,13 +2,13 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: server.rb 111 2004-10-27 09:30:19Z gmosx $
5
+ # $Id: server.rb 155 2004-11-13 20:32:12Z gmosx $
6
6
 
7
7
  require "drb"
8
8
 
9
- require "n/application"
10
- require "n/server"
11
- require "n/app/session"
9
+ require "nitro/application"
10
+ require "nitro/server"
11
+ require "nitro/app/session"
12
12
 
13
13
  module N; module App
14
14
 
@@ -2,12 +2,12 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2002-2003 Navel, all rights reserved.
5
- # $Id: session.rb 124 2004-11-01 12:34:17Z gmosx $
5
+ # $Id: session.rb 155 2004-11-13 20:32:12Z gmosx $
6
6
 
7
7
  require "md5"
8
8
 
9
- require "n/utils/hash"
10
- require "n/server/user"
9
+ require "nitro/utils/hash"
10
+ require "nitro/server/user"
11
11
 
12
12
  module N
13
13
 
@@ -0,0 +1,165 @@
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
3
+ #
4
+ # (c) 2004 Navel, all rights reserved.
5
+ # $Id: shaders.rb 152 2004-11-13 20:02:35Z gmosx $
6
+
7
+ module N
8
+
9
+ # = Shader
10
+ #
11
+ # The equivalent of a 3d engine shader. In essence it defines a
12
+ # transformation-pipeline that tansforms the .xhtml files to actual
13
+ # ruby code ready for evaluation (compilation) by the engine.
14
+ #
15
+ # Shaders are equivalend to the render-pipeline filters, ie they
16
+ # share their folded-filter design.
17
+ #--
18
+ # TODO: pipeline stage mixin to be reused in filters too.
19
+ #++
20
+ #
21
+ class Shader
22
+ # the next stage in the Shader pipeline.
23
+ attr :next_stage
24
+
25
+ def initialize(next_stage = nil)
26
+ @next_stage = next_stage
27
+ end
28
+
29
+ # Process the text and optionally update the hash.
30
+ # The hash is a short, unique representation of the input text,
31
+ # typically used as a caching key.
32
+ #
33
+ def process(hash, text)
34
+ process_next(hash, text)
35
+ end
36
+
37
+ # Set the next stage of the pipeline.
38
+ #
39
+ def << (next_stage = nil)
40
+ @next_stage = next_stage
41
+ return self
42
+ end
43
+
44
+ # Process the next stage of the pipeline.
45
+ #
46
+ def process_next(hash, text)
47
+ if @next_stage
48
+ return @next_stage.process(hash, text)
49
+ else
50
+ return hash, text
51
+ end
52
+ end
53
+ end
54
+
55
+ # = RubyShader
56
+ #
57
+ # Convert the xhtml script to actual Ruby code, ready to be
58
+ # evaluated.
59
+ #
60
+ class RubyShader < N::Shader
61
+
62
+ # Convert the xhtml script to actual Ruby code, ready to be
63
+ # evaluated.
64
+ #
65
+ def process(hash, text)
66
+ # strip the xml header! (interracts with the following gsub!)
67
+ text.gsub!(/<\?xml.*\?>/, "")
68
+
69
+ # xform include instructions <include href="xxx" />
70
+ # must be transformed before the processinc instructions.
71
+ text.gsub!(/<include href="(.*?)"(.*)(.?)\/>/) { |match|
72
+ "<?r render '/#$1' ?>"
73
+ }
74
+
75
+ # remove <root> elements. typically removed by xslt but lets
76
+ # play it safe.
77
+ text.gsub!(/<(\/)?root>/, '')
78
+
79
+ # xform the processing instructions, use <?r as
80
+ # a marker.
81
+ text.gsub!(/\?>/, "\n@out << %^")
82
+ text.gsub!(/<\?r /, "^\n")
83
+
84
+ # xform alternative code tags (used in xsl stylesheets)
85
+ #
86
+ text.gsub!(/<\/ruby>/, "\n@out << %^")
87
+ text.gsub!(/<ruby>/, "^\n")
88
+
89
+ text = "@out << %^" + text + "^"
90
+
91
+ process_next(hash, text)
92
+ end
93
+
94
+ end
95
+
96
+ # = XSLTShader
97
+ #
98
+ # Apply an XSL transformation to the script code.
99
+ # There is no need to keep post xsl. I can reuse the same xsl
100
+ # by calling transform again.
101
+ #
102
+ class XSLTShader < N::Shader
103
+ # The name
104
+ attr :name
105
+ # The xslt filename.
106
+ attr :xsl_filename
107
+ # The xslt transformer.
108
+ attr :xslt
109
+ # Last modified time of the xslt.
110
+ attr :mtime
111
+
112
+ def initialize(xsl_filename, next_stage = nil)
113
+ # leave this require here. only inlcude the xslt
114
+ # library if the project needs it.
115
+ require "xml/xslt"
116
+
117
+ @name = File.basename(xsl_filename, '.*')
118
+ @xsl_filename = xsl_filename
119
+ @xslt = XML::XSLT.new
120
+ @next_stage = next_stage
121
+ end
122
+
123
+ # Transform the given text
124
+ #
125
+ def process(hash, text)
126
+ parse_xsl()
127
+ @xslt.xml = text
128
+ hash += @name
129
+
130
+ process_next(hash, xslt.serve)
131
+ end
132
+
133
+ private
134
+
135
+ # Parse the xsl.
136
+ #
137
+ def parse_xsl
138
+ $log.debug "Parsing xsl '#{@xsl_filename}'" if $DBG
139
+ @mtime = File.mtime(@xsl_filename)
140
+ @xslt.xsl = File.read(@xsl_filename)
141
+ end
142
+
143
+ end
144
+
145
+ # = CompressShader
146
+ #
147
+ # Compress the inline xhtml. Does not touch the ruby code.
148
+ #
149
+ class CompressShader < N::Shader
150
+
151
+ # Compress the inline xhtml. Does not touch the ruby code.
152
+ #
153
+ def process(hash, text)
154
+ text.gsub!(/\@out \<\< \%\^(.*?)\^/m) do |match|
155
+ c = $1.gsub(/^(\s*)/m, '').squeeze(" \t").tr("\n", '').tr("\t", ' ')
156
+ "@out << %{#{c}}"
157
+ end
158
+
159
+ process_next(hash, text)
160
+ end
161
+
162
+ end
163
+
164
+ end # module
165
+
@@ -2,7 +2,7 @@
2
2
  # * George Moschovitis <gm@navel.gr>
3
3
  #
4
4
  # (c) 2004 Navel, all rights reserved.
5
- # $Id: user.rb 111 2004-10-27 09:30:19Z gmosx $
5
+ # $Id: user.rb 152 2004-11-13 20:02:35Z gmosx $
6
6
 
7
7
  require "singleton"
8
8
 
@@ -0,0 +1,175 @@
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
3
+ #
4
+ # (c) 2004 Navel, all rights reserved.
5
+ # $Id: webrick.rb 155 2004-11-13 20:32:12Z gmosx $
6
+
7
+ require "webrick"
8
+
9
+ require "nitro/server/appserver"
10
+ require "nitro/server/dispatcher"
11
+ require "nitro/server/render"
12
+
13
+ # Override WEBrick to suit our needs.
14
+ # Did I mention that WEBrick SUCKS ?
15
+ #
16
+ module WEBrick
17
+
18
+ class HTTPRequest
19
+
20
+ # Allow external setting of cookies.
21
+ #
22
+ def cookies=(val)
23
+ @cookies = val
24
+ end
25
+
26
+ # Allow external setting of query.
27
+ #
28
+ def set_query(query_string)
29
+ @query_string = query_string
30
+ @query = WEBrick::HTTPUtils::parse_query(query_string)
31
+ end
32
+
33
+ # Return the referer to this resource. For the initial page in the
34
+ # clickstream there is no referer, set "/" by default.
35
+ #
36
+ def referer
37
+ return @header["referer"].shift || "/"
38
+ end
39
+ alias_method :referrer, :referer
40
+
41
+ # Populate an object from request parameters.
42
+ # This is a truly dangerous method.
43
+ #
44
+ EXCLUDED_PARAMETERS = %w{ oid name }
45
+ def fill(obj, name = nil)
46
+ # if an object is passed create an instance.
47
+ obj = obj.new if obj.is_a?(Class)
48
+
49
+ @query.each do |param, val|
50
+ begin
51
+ # gmosx: DO NOT escape by default !!!
52
+ if not EXCLUDED_PARAMETERS.include?(param)
53
+ obj.send("__force_#{param}", val)
54
+ end
55
+ rescue NameError
56
+ next
57
+ end
58
+ end
59
+
60
+ return obj
61
+ end
62
+ alias_method :populate, :fill
63
+
64
+ end
65
+
66
+ end # module
67
+
68
+ module N
69
+
70
+ # = WebrickServer
71
+ #
72
+ # The Application Server. Handles dynamic requests in a web application.
73
+ # Dont keepalive (or use a VERY SMALL keepalive). Typically this server
74
+ # is used along with a standard http server that handles static
75
+ # resources like images, css.
76
+ #
77
+ # Used temporarily unitl we build our own app server.
78
+ #
79
+ class WebrickServer < N::AppServer
80
+ include WEBrick
81
+
82
+ # the integrated webrick server.
83
+ attr_accessor :webrick
84
+
85
+ def initialize(name = "WebrickServer")
86
+ super
87
+ end
88
+
89
+ # Start the application server.
90
+ #
91
+ def start
92
+ Socket.do_not_reverse_lookup = true # patch for OS X
93
+
94
+ accesslog = WEBrick::BasicLog::new("/dev/null")
95
+ referer = WEBrick::BasicLog::new("/dev/null")
96
+
97
+ @webrick = WEBrick::HTTPServer.new(
98
+ :BindAddress => $appsrv_address,
99
+ :Port => $appsrv_port,
100
+ :DocumentRoot => $root_dir,
101
+ :AccessLog => [
102
+ [accesslog, AccessLog::COMMON_LOG_FORMAT],
103
+ [referer, AccessLog::REFERER_LOG_FORMAT]
104
+ ]
105
+ )
106
+
107
+ @webrick.mount('/', N::WebrickDispatcher)
108
+
109
+ trap("INT") { @webrick.shutdown }
110
+ @webrick.start
111
+ end
112
+
113
+ # Stop the application server.
114
+ #
115
+ def stop
116
+ @webrick.stop
117
+ end
118
+
119
+ end
120
+
121
+ # = WebrickDispatcher
122
+ #
123
+ class WebrickDispatcher < WEBrick::HTTPServlet::AbstractServlet
124
+ include N::Dispatcher
125
+
126
+ def initialize(server)
127
+ # Handles static resources. Useful when running a standalone
128
+ # webrick server.
129
+ @file_handler = WEBrick::HTTPServlet::FileHandler.new(server, $root_dir, {:FancyIndexing => true })
130
+ end
131
+
132
+ def do_GET(request, response)
133
+ path = request.request_uri.path
134
+
135
+ # rationalize cookies, WEBrick just SUCKS!!
136
+ tmp = {}
137
+ request.cookies.each { |c|
138
+ tmp[c.name] = c
139
+ }
140
+ request.cookies = tmp
141
+
142
+ if path =~ /\./
143
+ @file_handler.do_GET(request, response)
144
+ else
145
+ process(request, response)
146
+ end
147
+ end
148
+
149
+ alias :do_POST :do_GET
150
+
151
+
152
+ # Create session
153
+ #
154
+ def create_session(request, response)
155
+ session = nil
156
+
157
+ if cookie = request.cookies[N::Session::COOKIE_NAME]
158
+ session = $sessions[cookie.value]
159
+ end
160
+
161
+ unless session
162
+ $log.debug 'Creating new session.' if $DBG
163
+ # no session cookie or stale session (garbage collected).
164
+ session_id = N::Session.calculate_id()
165
+ cookie = WEBrick::Cookie.new(N::Session::COOKIE_NAME, session_id)
166
+ response.cookies << cookie
167
+ session = $sessions[session_id] = N::Session.new(session_id)
168
+ end
169
+
170
+ return session
171
+ end
172
+
173
+ end
174
+
175
+ end # module
@@ -0,0 +1,25 @@
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
3
+ #
4
+ # (c) 2004 Navel, all rights reserved.
5
+ # $Id: service.rb 155 2004-11-13 20:32:12Z gmosx $
6
+
7
+ require 'nitro/server/render'
8
+
9
+ module N
10
+
11
+ # = Service
12
+ #
13
+ # An Application Server service.
14
+ #
15
+ class Service
16
+ include N::Render
17
+
18
+ # The base path of the service, essentially the mount point.
19
+ attr :base_path
20
+ end
21
+
22
+ class Methods
23
+ end
24
+
25
+ end # module