nitro 0.6.0 → 0.7.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 +175 -0
- data/README +41 -7
- data/RELEASES +24 -0
- data/Rakefile +5 -7
- data/bin/new_app.rb +26 -4
- data/bin/new_form.rb +54 -0
- data/bin/proto/config.rb +3 -3
- data/bin/proto/root/index.xhtml +2 -34
- data/bin/proto/root/style.css +4 -70
- data/bin/proto/root/style.xsl +8 -39
- data/doc/tutorial.txt +5 -0
- data/examples/blog/app.rb +2 -1
- data/examples/blog/config.rb +7 -2
- data/examples/blog/root/style.xsl +1 -2
- data/examples/flash/README +34 -0
- data/examples/flash/app.rb +20 -0
- data/examples/flash/config.rb +38 -0
- data/examples/flash/lib/flash.rb +40 -0
- data/examples/flash/root/index.xhtml +25 -0
- data/examples/flash/root/show_inline_text.xhtml +12 -0
- data/examples/flash/tmp.swf +0 -0
- data/examples/og/README +7 -0
- data/examples/og/mock_example.rb +58 -0
- data/examples/og/run.rb +9 -5
- data/examples/tiny/root/include.xhtml +3 -0
- data/examples/tiny/root/index.xhtml +2 -1
- data/lib/glue/property.rb +166 -107
- data/lib/glue/property.rb.old +307 -0
- data/lib/nitro/builders/form.rb +26 -17
- data/lib/nitro/events.rb +1 -1
- data/lib/nitro/markup.rb +120 -0
- data/lib/nitro/server/cookie.rb +1 -1
- data/lib/nitro/server/dispatcher.rb +5 -6
- data/lib/nitro/server/filters.rb +1 -1
- data/lib/nitro/server/render.rb +33 -29
- data/lib/nitro/server/shaders.rb +32 -3
- data/lib/nitro/server/user.rb +1 -1
- data/lib/nitro/server/webrick.rb +9 -4
- data/lib/nitro/ui/popup.rb +1 -1
- data/lib/nitro/ui/select.rb +1 -1
- data/lib/nitro/ui/tabs.rb +1 -1
- data/lib/nitro/version.rb +2 -2
- data/lib/og.rb +17 -6
- data/lib/og/backend.rb +34 -4
- data/lib/og/backends/mysql.rb +3 -17
- data/lib/og/backends/psql.rb +5 -17
- data/lib/og/meta.rb +41 -26
- data/lib/og/mock.rb +223 -0
- data/lib/og/version.rb +2 -2
- data/lib/parts/content.rb +61 -0
- data/test/glue/{tc_properties.rb → tc_property.rb} +0 -1
- data/test/glue/tc_property_mixins.rb +62 -0
- data/test/og/tc_lifecycle.rb +107 -0
- data/test/tc_og.rb +31 -4
- data/vendor/README +6 -0
- data/vendor/binding_of_caller.rb +81 -0
- data/vendor/breakpoint.rb +526 -0
- data/vendor/breakpoint_client.rb +157 -0
- metadata +135 -95
data/lib/nitro/server/cookie.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: dispatcher.rb
|
5
|
+
# $Id: dispatcher.rb 200 2004-12-27 11:24:41Z gmosx $
|
6
6
|
|
7
7
|
require 'nitro/server/render'
|
8
8
|
|
@@ -15,6 +15,7 @@ module Dispatcher
|
|
15
15
|
|
16
16
|
def process(request, response)
|
17
17
|
begin
|
18
|
+
# gmosx, INVESTIGATE: this is not really needed.
|
18
19
|
$og.get_connection if $og
|
19
20
|
|
20
21
|
session = create_session(request, response)
|
@@ -38,14 +39,12 @@ module Dispatcher
|
|
38
39
|
<p>Click <a href="#{request.referer}">here</a> to return
|
39
40
|
to the previous page.</p>
|
40
41
|
}
|
41
|
-
|
42
|
-
if request.error_log
|
42
|
+
if @rendering_errors
|
43
43
|
body << %{
|
44
|
-
<h3>
|
45
|
-
<pre>#{
|
44
|
+
<h3>Rendering errors</h3>
|
45
|
+
<pre>#{@rendering_errors.join("\n")}</pre>
|
46
46
|
}
|
47
47
|
end
|
48
|
-
=end
|
49
48
|
body << %{
|
50
49
|
<h3>Exception</h3>
|
51
50
|
<pre>#{pp_exception(e)}</pre>
|
data/lib/nitro/server/filters.rb
CHANGED
data/lib/nitro/server/render.rb
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: render.rb
|
5
|
+
# $Id: render.rb 200 2004-12-27 11:24:41Z gmosx $
|
6
|
+
|
7
|
+
require 'cgi'
|
6
8
|
|
7
9
|
module N
|
8
10
|
|
@@ -53,7 +55,7 @@ module RenderUtils
|
|
53
55
|
meth = parts[2]
|
54
56
|
end
|
55
57
|
|
56
|
-
# p '--', api, base, render_class, meth, '--'
|
58
|
+
# p '--', api, base, render_class, meth, '--'
|
57
59
|
|
58
60
|
return api, base, render_class, meth
|
59
61
|
end
|
@@ -125,7 +127,7 @@ module RenderUtils
|
|
125
127
|
if klass.instance_methods.include?("#{meth}__xhtml")
|
126
128
|
valid = true
|
127
129
|
code << %{
|
128
|
-
#{meth}__xhtml();
|
130
|
+
return unless #{meth}__xhtml();
|
129
131
|
}
|
130
132
|
end
|
131
133
|
|
@@ -133,7 +135,7 @@ module RenderUtils
|
|
133
135
|
if template = template_for_method(base, meth)
|
134
136
|
valid = true
|
135
137
|
code << %{
|
136
|
-
__#{meth}_xhtml();
|
138
|
+
return unless __#{meth}_xhtml();
|
137
139
|
}
|
138
140
|
end
|
139
141
|
|
@@ -158,9 +160,11 @@ module RenderUtils
|
|
158
160
|
end
|
159
161
|
}
|
160
162
|
end
|
161
|
-
|
162
|
-
|
163
|
-
|
163
|
+
=begin
|
164
|
+
puts '--'
|
165
|
+
puts dump(code)
|
166
|
+
puts '--'
|
167
|
+
=end
|
164
168
|
klass.class_eval(code)
|
165
169
|
|
166
170
|
return "__#{meth}"
|
@@ -198,7 +202,7 @@ module RenderUtils
|
|
198
202
|
if klass.instance_methods.include?("#{meth}__xml")
|
199
203
|
valid = true
|
200
204
|
code << %{
|
201
|
-
#{meth}__xml();
|
205
|
+
return unless #{meth}__xml();
|
202
206
|
}
|
203
207
|
end
|
204
208
|
|
@@ -206,7 +210,7 @@ module RenderUtils
|
|
206
210
|
if template = template_for_method(base, meth, 'xml')
|
207
211
|
valid = true
|
208
212
|
code << %{
|
209
|
-
__#{meth}_xml();
|
213
|
+
return unless __#{meth}_xml();
|
210
214
|
}
|
211
215
|
end
|
212
216
|
|
@@ -236,20 +240,20 @@ module RenderUtils
|
|
236
240
|
return "__rest_#{meth}"
|
237
241
|
end
|
238
242
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
text = File.read(filename)
|
245
|
-
text.gsub!(/<\?xml.*\?>/, '')
|
246
|
-
text.gsub!(/<\/?root(.*?)>/m, ' ');
|
247
|
-
|
248
|
-
return text
|
243
|
+
def self.dump(str)
|
244
|
+
str.split("\n").each_with_index do |line, idx|
|
245
|
+
puts "#{idx+1}: #{line}"
|
246
|
+
end
|
249
247
|
end
|
250
|
-
|
251
248
|
end
|
252
249
|
|
250
|
+
# = RenderExit
|
251
|
+
#
|
252
|
+
# Raise this exception to stop rendering.
|
253
|
+
#
|
254
|
+
class RenderExit < Exception
|
255
|
+
end
|
256
|
+
|
253
257
|
# = Render
|
254
258
|
#
|
255
259
|
module Render
|
@@ -324,6 +328,9 @@ module Render
|
|
324
328
|
r.send(meth)
|
325
329
|
@out = r.out
|
326
330
|
end
|
331
|
+
rescue N::RenderExit => e
|
332
|
+
# Just stop rendering.
|
333
|
+
# For example called by redirects.
|
327
334
|
rescue Exception, StandardError => e
|
328
335
|
log_error "error while handling '#{path}'."
|
329
336
|
log_error pp_exception(e)
|
@@ -345,15 +352,12 @@ module Render
|
|
345
352
|
# Send a redirect response.
|
346
353
|
#
|
347
354
|
def redirect(url, status = 303)
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
# stop the filter pipeline
|
356
|
-
return false
|
355
|
+
@response.status = status
|
356
|
+
@response.body = "<html><a href=\"#{url.to_s}\">#{url.to_s}</a>.</html>\n"
|
357
|
+
@response.header['location'] = url.to_s
|
358
|
+
|
359
|
+
# stop the rendering
|
360
|
+
raise N::RenderExit
|
357
361
|
end
|
358
362
|
|
359
363
|
# Redirect to the referer of this method.
|
data/lib/nitro/server/shaders.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: shaders.rb
|
5
|
+
# $Id: shaders.rb 189 2004-12-13 21:38:05Z gmosx $
|
6
6
|
|
7
7
|
module N
|
8
8
|
|
@@ -62,12 +62,28 @@ class RubyShader < N::Shader
|
|
62
62
|
# Convert the xhtml script to actual Ruby code, ready to be
|
63
63
|
# evaluated.
|
64
64
|
#
|
65
|
+
#--
|
66
|
+
# Investigate:
|
67
|
+
# perhaps xl:href should be used to be XLink compatible?
|
68
|
+
#++
|
69
|
+
#
|
65
70
|
def process(hash, text)
|
66
71
|
# strip the xml header! (interracts with the following gsub!)
|
67
72
|
text.gsub!(/<\?xml.*\?>/, "")
|
68
73
|
|
69
|
-
# statically include files.
|
70
|
-
#
|
74
|
+
# statically include sub script files.
|
75
|
+
# The target file is included at compile time.
|
76
|
+
#
|
77
|
+
# gmosx: must be xformed before the <?r pi.
|
78
|
+
#
|
79
|
+
# Example:
|
80
|
+
# <?include xl:href="root/myfile.sx" ?>
|
81
|
+
#
|
82
|
+
text.gsub!(/<\?include href="(.*?)"(.*)\?>/) { |match|
|
83
|
+
# gmosx: xmm match matches the whole string.
|
84
|
+
# match = overload_path($1)
|
85
|
+
load_statically_included("#$root_dir/#$1")
|
86
|
+
}
|
71
87
|
|
72
88
|
# xform include instructions <include href="xxx" />
|
73
89
|
# must be transformed before the processinc instructions.
|
@@ -103,6 +119,19 @@ class RubyShader < N::Shader
|
|
103
119
|
process_next(hash, text)
|
104
120
|
end
|
105
121
|
|
122
|
+
# Loads and statically includes a file.
|
123
|
+
#
|
124
|
+
def load_statically_included(filename)
|
125
|
+
$log.debug "Statically including '#{filename}'" if $DBG
|
126
|
+
|
127
|
+
text = File.read(filename)
|
128
|
+
text.gsub!(/<\?xml.*\?>/, '')
|
129
|
+
text.gsub!(/<\/?root(.*?)>/m, ' ');
|
130
|
+
|
131
|
+
return text
|
132
|
+
end
|
133
|
+
|
134
|
+
|
106
135
|
end
|
107
136
|
|
108
137
|
# = XSLTShader
|
data/lib/nitro/server/user.rb
CHANGED
data/lib/nitro/server/webrick.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: webrick.rb
|
5
|
+
# $Id: webrick.rb 200 2004-12-27 11:24:41Z gmosx $
|
6
6
|
|
7
7
|
require "webrick"
|
8
8
|
|
@@ -45,7 +45,7 @@ module WEBrick
|
|
45
45
|
def fill(obj, name = nil)
|
46
46
|
# if an object is passed create an instance.
|
47
47
|
obj = obj.new if obj.is_a?(Class)
|
48
|
-
|
48
|
+
|
49
49
|
@query.each do |param, val|
|
50
50
|
begin
|
51
51
|
# gmosx: DO NOT escape by default !!!
|
@@ -90,9 +90,14 @@ class WebrickServer < N::AppServer
|
|
90
90
|
#
|
91
91
|
def start
|
92
92
|
Socket.do_not_reverse_lookup = true # patch for OS X
|
93
|
+
|
94
|
+
=begin
|
95
|
+
accesslog = WEBrick::BasicLog::new('/dev/null')
|
96
|
+
referer = WEBrick::BasicLog::new('/dev/null')
|
97
|
+
=end
|
93
98
|
|
94
|
-
accesslog = WEBrick::BasicLog::new(
|
95
|
-
referer = WEBrick::BasicLog::new(
|
99
|
+
accesslog = WEBrick::BasicLog::new('log/access.log')
|
100
|
+
referer = WEBrick::BasicLog::new('log/referer.log')
|
96
101
|
|
97
102
|
@webrick = WEBrick::HTTPServer.new(
|
98
103
|
:BindAddress => $appsrv_address,
|
data/lib/nitro/ui/popup.rb
CHANGED
data/lib/nitro/ui/select.rb
CHANGED
data/lib/nitro/ui/tabs.rb
CHANGED
data/lib/nitro/version.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: version.rb
|
5
|
+
# $Id: version.rb 194 2004-12-20 20:23:57Z gmosx $
|
6
6
|
|
7
7
|
# The name of the server.
|
8
8
|
$srv_name = 'Nitro'
|
9
9
|
|
10
10
|
# The version of the server.
|
11
|
-
$srv_version = '0.
|
11
|
+
$srv_version = '0.7.0'
|
data/lib/og.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: og.rb
|
5
|
+
# $Id: og.rb 197 2004-12-21 13:50:17Z gmosx $
|
6
6
|
|
7
7
|
require "glue/property"
|
8
8
|
require "glue/array"
|
@@ -28,6 +28,11 @@ $og_auto_manage_classes = true
|
|
28
28
|
# If true, automatically include the Og meta-language into Module.
|
29
29
|
$og_include_meta_language = true
|
30
30
|
|
31
|
+
# Attach the following prefix to all generated SQL table names.
|
32
|
+
# Usefull on hosting scenarios where you have to run multiple
|
33
|
+
# web applications/sites on a single database.
|
34
|
+
$og_table_prefix = nil
|
35
|
+
|
31
36
|
require "og/meta"
|
32
37
|
|
33
38
|
# = Og
|
@@ -169,7 +174,10 @@ class Database
|
|
169
174
|
@config[:connection_count].times do
|
170
175
|
@connection_pool << Og::Connection.new(self)
|
171
176
|
end
|
172
|
-
|
177
|
+
|
178
|
+
# gmosx, FIXME: this automanage code is not elegant and slow
|
179
|
+
# should probably recode this, along with glue/property.rb
|
180
|
+
#
|
173
181
|
if $og_auto_manage_classes
|
174
182
|
# automatically manage classes with properties and metadata.
|
175
183
|
# gmosx: Any idea how to optimize this?
|
@@ -286,8 +294,6 @@ class Database
|
|
286
294
|
Og::Utils.eval_og_oid(klass) unless klass.instance_methods.include?(:oid)
|
287
295
|
|
288
296
|
klass.class_eval %{
|
289
|
-
inherit_meta(superclass) if superclass
|
290
|
-
|
291
297
|
DBTABLE = "#{Og::Utils.table(klass)}"
|
292
298
|
DBSEQ = "#{Og::Utils.table(klass)}_oids_seq"
|
293
299
|
|
@@ -311,7 +317,12 @@ class Database
|
|
311
317
|
# class and its instances.
|
312
318
|
#
|
313
319
|
def enchant(klass)
|
314
|
-
klass.
|
320
|
+
klass.module_eval <<-"end_eval", __FILE__, __LINE__
|
321
|
+
def self.create(*params)
|
322
|
+
obj = #{klass}.new(*params)
|
323
|
+
obj.save!
|
324
|
+
end
|
325
|
+
|
315
326
|
def self.save(obj)
|
316
327
|
$og << obj
|
317
328
|
end
|
@@ -362,7 +373,7 @@ class Database
|
|
362
373
|
def delete!
|
363
374
|
$og.delete(@oid, #{klass})
|
364
375
|
end
|
365
|
-
|
376
|
+
end_eval
|
366
377
|
end
|
367
378
|
|
368
379
|
# Automatically wrap connection methods.
|
data/lib/og/backend.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: backend.rb
|
5
|
+
# $Id: backend.rb 197 2004-12-21 13:50:17Z gmosx $
|
6
6
|
|
7
7
|
require "yaml"
|
8
8
|
|
@@ -28,13 +28,13 @@ module Utils
|
|
28
28
|
# The name of the SQL table where objects of this class are stored.
|
29
29
|
#
|
30
30
|
def self.table(klass)
|
31
|
-
"_#{encode(klass)}"
|
31
|
+
"_#{$og_table_prefix}#{encode(klass)}"
|
32
32
|
end
|
33
33
|
|
34
34
|
# The name of the join table for the two given classes.
|
35
35
|
#
|
36
36
|
def self.join_table(klass1, klass2)
|
37
|
-
"
|
37
|
+
"_#{$og_table_prefix}j_#{Og::Utils.encode(klass1)}_#{Og::Utils.encode(klass2)}"
|
38
38
|
end
|
39
39
|
|
40
40
|
# Returns the props that will be included in the insert query.
|
@@ -232,7 +232,37 @@ class Backend
|
|
232
232
|
def rollback
|
233
233
|
exec "ROLLBACK"
|
234
234
|
end
|
235
|
-
|
235
|
+
|
236
|
+
# Create the fields that correpsond to the klass properties.
|
237
|
+
# The generated fields array is used in create_table.
|
238
|
+
# If the property has an :sql metadata this overrides the default mapping.
|
239
|
+
# If the property has an :extra_sql metadata the extra sql is appended
|
240
|
+
# after the default mapping.
|
241
|
+
#
|
242
|
+
def create_fields(klass, typemap)
|
243
|
+
fields = []
|
244
|
+
|
245
|
+
klass.__props.each do |p|
|
246
|
+
klass.sql_index(p.symbol) if p.meta[:sql_index]
|
247
|
+
|
248
|
+
field = "#{p.symbol}"
|
249
|
+
|
250
|
+
if p.meta and p.meta[:sql]
|
251
|
+
field << " #{p.meta[:sql]}"
|
252
|
+
else
|
253
|
+
field << " #{typemap[p.klass]}"
|
254
|
+
# attach extra sql
|
255
|
+
if p.meta and extra_sql = p.meta[:extra_sql]
|
256
|
+
field << " #{extra_sql}"
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
fields << field
|
261
|
+
end
|
262
|
+
|
263
|
+
return fields
|
264
|
+
end
|
265
|
+
|
236
266
|
# Create the managed object table. The properties of the
|
237
267
|
# object are mapped to the table columns. Additional sql relations
|
238
268
|
# and constrains are created (indicices, sequences, etc).
|