nitro 0.15.0 → 0.16.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 +218 -0
- data/INSTALL +3 -0
- data/README +4 -2
- data/Rakefile +150 -8
- data/benchmark/bench.rb +1 -1
- data/doc/AUTHORS +2 -8
- data/doc/RELEASES +63 -1
- data/examples/ajax/controller.rb +2 -2
- data/examples/ajax/public/index.xhtml +3 -1
- data/examples/ajax/run.rb +3 -3
- data/examples/blog/README +8 -0
- data/examples/blog/cache/entriesadmintrue +3 -0
- data/examples/blog/run.rb +38 -40
- data/examples/blog/src/blog.rb +2 -1
- data/examples/blog/src/controller.rb +40 -20
- data/examples/blog/src/mailer.rb +2 -2
- data/examples/blog/src/models/blog.rb +2 -1
- data/examples/blog/src/models/content.rb +4 -33
- data/examples/blog/src/views/error.xhtml +1 -1
- data/examples/blog/src/xsl/style.xsl +1 -1
- data/examples/blog/test/tc_blog.rb +43 -0
- data/examples/flash/run.rb +2 -2
- data/examples/no_xsl_blog/lib/blog.rb +1 -1
- data/examples/no_xsl_blog/lib/blog/controller.rb +26 -17
- data/examples/no_xsl_blog/lib/blog/model.rb +3 -3
- data/examples/no_xsl_blog/lib/blog/template.rb +1 -1
- data/examples/no_xsl_blog/lib/content.rb +3 -7
- data/examples/no_xsl_blog/run.rb +34 -34
- data/examples/tiny/public/deep/dir/hello.xhtml +2 -0
- data/examples/tiny/run.rb +2 -2
- data/examples/wee_style/run.rb +5 -3
- data/examples/why_wiki/run.rb +5 -3
- data/install.rb +1 -1
- data/lib/nitro.rb +10 -9
- data/lib/nitro/adapters/cgi.rb +27 -2
- data/lib/nitro/adapters/fastcgi.rb +6 -2
- data/lib/nitro/adapters/webrick.rb +11 -9
- data/lib/nitro/buffering.rb +2 -2
- data/lib/nitro/builders/atom.rb +78 -0
- data/lib/nitro/builders/form.rb +2 -2
- data/lib/nitro/builders/rss.rb +4 -4
- data/lib/nitro/builders/table.rb +2 -2
- data/lib/nitro/builders/xhtml.rb +5 -8
- data/lib/nitro/builders/xml.rb +38 -14
- data/lib/nitro/caching.rb +2 -2
- data/lib/nitro/caching/actions.rb +2 -2
- data/lib/nitro/caching/fragments.rb +2 -2
- data/lib/nitro/caching/invalidation.rb +2 -28
- data/lib/nitro/caching/output.rb +3 -3
- data/lib/nitro/caching/stores.rb +4 -4
- data/lib/nitro/conf.rb +11 -6
- data/lib/nitro/context.rb +2 -2
- data/lib/nitro/controller.rb +12 -7
- data/lib/nitro/cookie.rb +2 -2
- data/lib/nitro/dispatcher.rb +33 -40
- data/lib/nitro/environment.rb +1 -1
- data/lib/nitro/localization.rb +5 -7
- data/lib/nitro/mail.rb +2 -2
- data/lib/nitro/markup.rb +5 -5
- data/lib/nitro/output.rb +2 -2
- data/lib/nitro/part.rb +8 -5
- data/lib/nitro/render.rb +46 -45
- data/lib/nitro/request.rb +7 -6
- data/lib/nitro/response.rb +14 -5
- data/lib/nitro/routing.rb +2 -2
- data/lib/nitro/runner.rb +57 -17
- data/lib/nitro/scaffold.rb +14 -8
- data/lib/nitro/session.rb +7 -4
- data/lib/nitro/session/drb.rb +2 -2
- data/lib/nitro/session/drbserver.rb +2 -2
- data/lib/nitro/session/memory.rb +2 -2
- data/lib/nitro/shaders.rb +8 -7
- data/lib/nitro/simple.rb +4 -1
- data/lib/nitro/template.rb +8 -8
- data/lib/nitro/testing.rb +6 -0
- data/lib/nitro/testing/assertions.rb +102 -0
- data/lib/nitro/testing/context.rb +52 -0
- data/lib/nitro/testing/testcase.rb +55 -0
- data/lib/nitro/ui/pager.rb +3 -3
- data/lib/nitro/ui/popup.rb +8 -13
- data/lib/nitro/ui/tabs.rb +4 -10
- data/lib/nitro/uri.rb +7 -7
- data/proto/doc/README +1 -0
- data/proto/public/cgi.rb +5 -0
- data/proto/run.rb +2 -4
- data/test/nitro/adapters/tc_cgi.rb +1 -1
- data/test/nitro/adapters/tc_webrick.rb +1 -2
- data/test/nitro/builders/tc_atom.rb +26 -0
- data/test/nitro/builders/tc_rss.rb +3 -2
- data/test/nitro/builders/tc_table.rb +1 -1
- data/test/nitro/builders/tc_xhtml.rb +4 -3
- data/test/nitro/builders/tc_xml.rb +7 -7
- data/test/nitro/tc_context.rb +1 -1
- data/test/nitro/tc_controller.rb +5 -3
- data/test/nitro/tc_dispatcher.rb +19 -18
- data/test/nitro/tc_localization.rb +1 -1
- data/test/nitro/tc_mail.rb +1 -1
- data/test/nitro/tc_session.rb +1 -1
- data/test/nitro/tc_template.rb +1 -1
- data/test/nitro/tc_uri.rb +3 -4
- data/test/nitro/ui/tc_pager.rb +7 -7
- data/test/public/blog/inc1.xhtml +2 -0
- data/test/public/blog/inc2.xhtml +1 -0
- data/test/public/blog/list.xhtml +3 -0
- metadata +180 -203
- data/examples/blog/cache/entriesadmin +0 -12
- data/lib/nitro/cluster.rb +0 -218
- data/lib/nitro/component.rb +0 -15
- data/lib/nitro/filters.rb +0 -215
- data/lib/nitro/ui/date-select.rb +0 -69
- data/test/nitro/tc_filters.rb +0 -111
data/lib/nitro/render.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
|
2
|
-
# (c)
|
|
3
|
-
# $Id$
|
|
2
|
+
# (c) 2005 Navel, all rights reserved.
|
|
3
|
+
# $Id: render.rb 20 2005-04-15 15:18:36Z gmosx $
|
|
4
4
|
|
|
5
5
|
require 'sync'
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ require 'glue/object'
|
|
|
11
11
|
require 'nitro/shaders'
|
|
12
12
|
require 'nitro/buffering'
|
|
13
13
|
|
|
14
|
-
module
|
|
14
|
+
module Nitro
|
|
15
15
|
|
|
16
16
|
# Raise this exception to stop rendering.
|
|
17
17
|
|
|
@@ -89,13 +89,10 @@ module Rendering
|
|
|
89
89
|
|
|
90
90
|
def self.compile_action(klass, action, template_root)
|
|
91
91
|
@@sync.synchronize do
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
# dummy, api, action = action.to_s.split('__')
|
|
98
|
-
|
|
92
|
+
Aspects.include_advice_modules(klass)
|
|
93
|
+
|
|
94
|
+
action = action.to_s.gsub(/_action$/, '')
|
|
95
|
+
|
|
99
96
|
# This is not a controller action.
|
|
100
97
|
|
|
101
98
|
return false unless action
|
|
@@ -105,18 +102,14 @@ module Rendering
|
|
|
105
102
|
valid = false
|
|
106
103
|
|
|
107
104
|
code = %{
|
|
108
|
-
def
|
|
109
|
-
|
|
105
|
+
def #{action}_action
|
|
106
|
+
@parent_action_name = @action_name
|
|
110
107
|
@action_name = '#{action}'
|
|
111
108
|
}
|
|
112
|
-
|
|
113
|
-
#
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
code << %{
|
|
117
|
-
#{klass.gen_filters_call_code(action, klass.before_filters)}
|
|
118
|
-
}
|
|
119
|
-
end
|
|
109
|
+
|
|
110
|
+
# Inject the pre advices.
|
|
111
|
+
|
|
112
|
+
code << Aspects.gen_advice_code(action, klass.advices, :pre)
|
|
120
113
|
|
|
121
114
|
# call the action
|
|
122
115
|
|
|
@@ -134,37 +127,33 @@ module Rendering
|
|
|
134
127
|
}
|
|
135
128
|
end
|
|
136
129
|
|
|
137
|
-
# call the
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
# call the template if exists.
|
|
130
|
+
# Try to call the template method if it exists. It is a nice
|
|
131
|
+
# practice to put output related code in this method instead
|
|
132
|
+
# of the main action so that this method can be overloaded
|
|
133
|
+
# separately.
|
|
134
|
+
#
|
|
135
|
+
# If no template method exists, try to convert an external
|
|
136
|
+
# template file into a template method. It is an even better
|
|
137
|
+
# practice to place the output related code in an external
|
|
138
|
+
# template file.
|
|
147
139
|
|
|
148
|
-
if template = template_for_action(template_root, action)
|
|
140
|
+
if (template = template_for_action(template_root, action)) or
|
|
141
|
+
klass.instance_methods.include?("#{action}_template")
|
|
149
142
|
valid = true
|
|
150
143
|
code << %{
|
|
151
|
-
return unless
|
|
144
|
+
return unless #{action}_template;
|
|
152
145
|
}
|
|
153
146
|
end
|
|
154
147
|
|
|
155
148
|
# raise "Invalid action '#{action}' for '#{klass}'!" unless valid
|
|
156
149
|
return false unless valid
|
|
157
150
|
|
|
158
|
-
#
|
|
151
|
+
# Inject the post advices.
|
|
159
152
|
|
|
160
|
-
|
|
161
|
-
code << %{
|
|
162
|
-
#{klass.gen_filters_call_code(action, klass.after_filters)}
|
|
163
|
-
}
|
|
164
|
-
end
|
|
153
|
+
code << Aspects.gen_advice_code(action, klass.advices, :post)
|
|
165
154
|
|
|
166
155
|
code << %{
|
|
167
|
-
@action_name =
|
|
156
|
+
@action_name = @parent_action_name
|
|
168
157
|
|
|
169
158
|
redirect_referer if @out.empty?
|
|
170
159
|
end
|
|
@@ -172,15 +161,22 @@ module Rendering
|
|
|
172
161
|
|
|
173
162
|
if template
|
|
174
163
|
code << %{
|
|
175
|
-
def
|
|
164
|
+
def #{action}_template
|
|
176
165
|
#{transform_template(template, Rendering.shader)}
|
|
177
166
|
end
|
|
178
167
|
}
|
|
179
168
|
end
|
|
180
169
|
|
|
181
|
-
# puts '---', code, '---'
|
|
170
|
+
# puts '---', klass, '==', code, '---'
|
|
171
|
+
|
|
172
|
+
where = "Action: #{action}"
|
|
173
|
+
where += ", Template: #{template}" if template
|
|
182
174
|
|
|
183
|
-
|
|
175
|
+
begin
|
|
176
|
+
klass.class_eval(code, where)
|
|
177
|
+
rescue SyntaxError => e
|
|
178
|
+
p e
|
|
179
|
+
end
|
|
184
180
|
end
|
|
185
181
|
|
|
186
182
|
return true
|
|
@@ -196,10 +192,14 @@ end
|
|
|
196
192
|
|
|
197
193
|
module Render
|
|
198
194
|
|
|
199
|
-
# The
|
|
195
|
+
# The output buffer. The output of a script/action is accumulated
|
|
200
196
|
# in this buffer.
|
|
201
197
|
|
|
202
198
|
attr_accessor :out
|
|
199
|
+
|
|
200
|
+
# A nice alias
|
|
201
|
+
|
|
202
|
+
alias_method :body, :out
|
|
203
203
|
|
|
204
204
|
# The context.
|
|
205
205
|
|
|
@@ -237,9 +237,10 @@ module Render
|
|
|
237
237
|
def render(path)
|
|
238
238
|
Logger.debug "Rendering '#{path}'." if $DBG
|
|
239
239
|
|
|
240
|
-
klass, action,
|
|
240
|
+
klass, action, base = @context.dispatcher.dispatch(path, @context)
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
# FIXME:
|
|
243
|
+
@context.content_type = klass.instance_variable_get('@content_type') || 'text/html'
|
|
243
244
|
|
|
244
245
|
raise 'No controller for action' unless klass
|
|
245
246
|
|
data/lib/nitro/request.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
|
2
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id:
|
|
3
|
+
# $Id: request.rb 9 2005-04-13 00:08:20Z nasis $
|
|
4
4
|
|
|
5
|
-
module
|
|
5
|
+
module Nitro
|
|
6
6
|
|
|
7
7
|
# Encapsulates a request. This is an abstract request
|
|
8
|
-
# typically extended by sub-classes.
|
|
8
|
+
# typically extended by sub-classes. This module
|
|
9
|
+
# is included in Context
|
|
9
10
|
|
|
10
11
|
module Request
|
|
11
12
|
|
|
@@ -51,7 +52,7 @@ module Request
|
|
|
51
52
|
|
|
52
53
|
# The path is the uri without the query string.
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
def path
|
|
55
56
|
path = uri ? uri.split('?').first : ''
|
|
56
57
|
end
|
|
57
58
|
|
|
@@ -91,7 +92,7 @@ module Request
|
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
# The remote IP address. REMOTE_ADDR is the standard
|
|
94
|
-
|
|
95
|
+
# but will fail if the user is behind a proxy.
|
|
95
96
|
# HTTP_CLIENT_IP and/or HTTP_X_FORWARDED_FOR are set by
|
|
96
97
|
# proxies so check for these before falling back to
|
|
97
98
|
# REMOTE_ADDR. HTTP_X_FORWARDED_FOR may be a comma-delimited
|
|
@@ -101,7 +102,7 @@ module Request
|
|
|
101
102
|
def remote_ip
|
|
102
103
|
return @headers['HTTP_CLIENT_IP'] if @headers.include?('HTTP_CLIENT_IP')
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
if @headers.include?('HTTP_X_FORWARDED_FOR') then
|
|
105
106
|
remote_ips = @headers['HTTP_X_FORWARDED_FOR'].split(',').reject do |ip|
|
|
106
107
|
ip =~ /^unknown$|^(10|172\.16|192\.168)\./i
|
|
107
108
|
end
|
data/lib/nitro/response.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
|
2
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id:
|
|
3
|
+
# $Id: response.rb 1 2005-04-11 11:04:30Z gmosx $
|
|
4
4
|
|
|
5
|
-
module
|
|
5
|
+
module Nitro
|
|
6
6
|
|
|
7
|
-
# HTTP Response.
|
|
7
|
+
# HTTP Response. This module is included in Context.
|
|
8
8
|
|
|
9
9
|
module Response
|
|
10
10
|
|
|
@@ -27,9 +27,18 @@ module Response
|
|
|
27
27
|
# Add a cookie to the response. Better use this
|
|
28
28
|
# method to avoid precreating the cookies array
|
|
29
29
|
# for every request.
|
|
30
|
+
#
|
|
31
|
+
# === Examples
|
|
32
|
+
#
|
|
33
|
+
# add_cookie('nsid', 'gmosx')
|
|
34
|
+
# add_cookie(Cookie.new('nsid', 'gmosx')
|
|
30
35
|
|
|
31
|
-
def add_cookie(cookie)
|
|
32
|
-
|
|
36
|
+
def add_cookie(cookie, value = nil)
|
|
37
|
+
if value
|
|
38
|
+
(@response_cookies ||= []) << Cookie.new(cookie, value)
|
|
39
|
+
else
|
|
40
|
+
(@response_cookies ||= []) << cookie
|
|
41
|
+
end
|
|
33
42
|
end
|
|
34
43
|
alias_method :send_cookie, :add_cookie
|
|
35
44
|
|
data/lib/nitro/routing.rb
CHANGED
data/lib/nitro/runner.rb
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
3
|
# * George Moschovitis <gm@navel.gr>
|
|
4
|
+
# * James Britt <james_b@neurogami.com>
|
|
4
5
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
5
|
-
# $Id$
|
|
6
|
+
# $Id: runner.rb 9 2005-04-13 00:08:20Z nasis $
|
|
6
7
|
|
|
7
8
|
require 'optparse'
|
|
8
9
|
|
|
9
10
|
require 'glue/misc'
|
|
10
11
|
require 'nitro/conf'
|
|
11
12
|
|
|
12
|
-
module
|
|
13
|
+
module Nitro
|
|
13
14
|
|
|
14
15
|
# The Runner is a helper class that encapsulates a web
|
|
15
16
|
# application and is responsible for launching the
|
|
@@ -126,15 +127,20 @@ class Runner
|
|
|
126
127
|
Logger.set(Logger.new('log/app.log'))
|
|
127
128
|
end
|
|
128
129
|
|
|
130
|
+
opts.on('--apache-cgi', 'Run as CGI (Apache)') do
|
|
131
|
+
@server = :cgi
|
|
132
|
+
Logger.set(Logger.new('log/app.log'))
|
|
133
|
+
end
|
|
134
|
+
|
|
129
135
|
opts.on('-C', '--console', 'Start a console attached to an instance of the application.') do
|
|
130
136
|
if RUBY_PLATFORM =~ /mswin32/
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
137
|
+
irb_name = 'irb.bat'
|
|
138
|
+
else
|
|
139
|
+
irb_name = 'irb'
|
|
134
140
|
end
|
|
135
141
|
ENV['NITRO_INVOKE'] = 'irb'
|
|
136
142
|
conf_file = File.basename(caller.last.split(':').first)
|
|
137
|
-
|
|
143
|
+
exec "#{irb_name} -r #{conf_file} -r irb/completion --noinspect"
|
|
138
144
|
exit
|
|
139
145
|
end
|
|
140
146
|
|
|
@@ -187,6 +193,8 @@ class Runner
|
|
|
187
193
|
|
|
188
194
|
if 'fcgi_proc' == ENV['NITRO_INVOKE']
|
|
189
195
|
invoke_fcgi_proc(conf)
|
|
196
|
+
elsif 'cgi_proc' == ENV['NITRO_INVOKE']
|
|
197
|
+
invoke_cgi_proc(conf)
|
|
190
198
|
elsif 'irb' == ENV['NITRO_INVOKE']
|
|
191
199
|
invoke_irb(conf)
|
|
192
200
|
else
|
|
@@ -218,6 +226,11 @@ class Runner
|
|
|
218
226
|
FastCGI.start(conf)
|
|
219
227
|
end
|
|
220
228
|
|
|
229
|
+
def invoke_cgi_proc(conf)
|
|
230
|
+
require 'nitro/adapters/cgi'
|
|
231
|
+
Cgi.start(conf)
|
|
232
|
+
end
|
|
233
|
+
|
|
221
234
|
def invoke_irb(conf)
|
|
222
235
|
$conf = conf
|
|
223
236
|
end
|
|
@@ -244,17 +257,20 @@ class Runner
|
|
|
244
257
|
puts "\n==> Listening at #{conf.host}:#{conf.port}.\n\n"
|
|
245
258
|
|
|
246
259
|
case @server
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
260
|
+
when :webrick
|
|
261
|
+
require 'nitro/adapters/webrick'
|
|
262
|
+
Webrick.start(conf)
|
|
263
|
+
|
|
264
|
+
when :lhttpd
|
|
265
|
+
require 'nitro/adapters/fastcgi'
|
|
266
|
+
`lighttpd -f conf/lhttpd.conf`
|
|
267
|
+
|
|
268
|
+
when :apache
|
|
269
|
+
require 'nitro/adapters/fastcgi'
|
|
270
|
+
`apachectl -d #{Dir.pwd} -f conf/apache.conf -k start`
|
|
271
|
+
|
|
272
|
+
when :cgi
|
|
273
|
+
require 'nitro/adapters/cgi'
|
|
258
274
|
end
|
|
259
275
|
|
|
260
276
|
when :stop
|
|
@@ -279,4 +295,28 @@ class Runner
|
|
|
279
295
|
|
|
280
296
|
end
|
|
281
297
|
|
|
298
|
+
# Helper method to start applications.
|
|
299
|
+
#
|
|
300
|
+
# === Example
|
|
301
|
+
#
|
|
302
|
+
# Nitro.run do |conf|
|
|
303
|
+
# conf.port = 8080
|
|
304
|
+
# conf.template_root = 'root'
|
|
305
|
+
# end
|
|
306
|
+
#
|
|
307
|
+
# Nitro.run do |conf|
|
|
308
|
+
# conf.update(
|
|
309
|
+
# :template_root => root,
|
|
310
|
+
# :port => 8080
|
|
311
|
+
# )
|
|
312
|
+
# end
|
|
313
|
+
|
|
314
|
+
def self.run(conf = nil)
|
|
315
|
+
runner = Runner.new.setup
|
|
316
|
+
conf ||= Conf.new({})
|
|
317
|
+
$nitro_environment = conf
|
|
318
|
+
yield(conf) if block_given?
|
|
319
|
+
runner.run(conf)
|
|
320
|
+
end
|
|
321
|
+
|
|
282
322
|
end
|
data/lib/nitro/scaffold.rb
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
|
2
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id: scaffold.rb
|
|
3
|
+
# $Id: scaffold.rb 1 2005-04-11 11:04:30Z gmosx $
|
|
4
4
|
|
|
5
5
|
require 'glue/inflector'
|
|
6
6
|
|
|
7
|
-
module
|
|
7
|
+
module Nitro
|
|
8
|
+
|
|
9
|
+
# The scaffolder adds default actions to a Controller.
|
|
10
|
+
#--
|
|
11
|
+
# FIXME: handle controller base in generated routes.
|
|
12
|
+
# FIXME: better handle templates (check if action exists).
|
|
13
|
+
#++
|
|
8
14
|
|
|
9
15
|
module Scaffolding
|
|
10
16
|
|
|
@@ -21,16 +27,16 @@ module Scaffolding
|
|
|
21
27
|
def scaffold(klass, options = {})
|
|
22
28
|
|
|
23
29
|
oid = options[:oid] || 'oid'
|
|
24
|
-
name = options[:name] ||
|
|
25
|
-
list_name = options[:list_name] ||
|
|
30
|
+
name = options[:name] || Inflector.name(klass.name)
|
|
31
|
+
list_name = options[:list_name] || Inflector.plural_name(name)
|
|
26
32
|
options[:nosuffix] ? suffix = nil : suffix = "_#{name}"
|
|
27
33
|
|
|
28
34
|
# Add methods to the scaffolded class.
|
|
29
35
|
|
|
30
36
|
klass.module_eval %{
|
|
31
37
|
def view_uri
|
|
32
|
-
|
|
33
|
-
"view#{suffix}/\#\{@oid\}"
|
|
38
|
+
"view#{suffix}?oid=\#\{@oid\}"
|
|
39
|
+
# "view#{suffix}/\#\{@oid\}"
|
|
34
40
|
end
|
|
35
41
|
}
|
|
36
42
|
|
|
@@ -86,7 +92,7 @@ module Scaffolding
|
|
|
86
92
|
def list#{suffix}
|
|
87
93
|
@#{list_name} = #{klass}.all('ORDER BY oid')
|
|
88
94
|
}
|
|
89
|
-
unless Rendering.template_for_action(self.template_root, "
|
|
95
|
+
unless Rendering.template_for_action(self.template_root, "list#{suffix}")
|
|
90
96
|
code << %{
|
|
91
97
|
o.ul {
|
|
92
98
|
for item in @#{list_name}
|
|
@@ -102,7 +108,7 @@ module Scaffolding
|
|
|
102
108
|
# @#{name} = #{klass}[@context['#{oid}']]
|
|
103
109
|
@#{name} = #{klass}[@#{oid}]
|
|
104
110
|
end
|
|
105
|
-
action :view#{suffix}, :route => \%r\{view#{suffix}/(.*)\}, 'oid' => 1
|
|
111
|
+
action :view#{suffix}, :route => \%r\{#{@base}/view#{suffix}/(.*)\}, 'oid' => 1
|
|
106
112
|
|
|
107
113
|
def save#{suffix}
|
|
108
114
|
if oid = request['oid']
|
data/lib/nitro/session.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
|
2
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id$
|
|
3
|
+
# $Id: session.rb 1 2005-04-11 11:04:30Z gmosx $
|
|
4
4
|
|
|
5
5
|
require 'md5'
|
|
6
6
|
require 'webrick'
|
|
@@ -9,7 +9,7 @@ require 'glue/hash'
|
|
|
9
9
|
require 'glue/attribute'
|
|
10
10
|
require 'nitro/cookie'
|
|
11
11
|
|
|
12
|
-
module
|
|
12
|
+
module Nitro
|
|
13
13
|
|
|
14
14
|
# A web application session.
|
|
15
15
|
#
|
|
@@ -35,7 +35,7 @@ class Session < Hash
|
|
|
35
35
|
# The sessions store. By default sessions are
|
|
36
36
|
# stored in memory.
|
|
37
37
|
|
|
38
|
-
cattr_accessor :store; @@store =
|
|
38
|
+
cattr_accessor :store; @@store = Glue::SafeHash.new
|
|
39
39
|
|
|
40
40
|
# Set the session store. The following options are
|
|
41
41
|
# available:
|
|
@@ -47,7 +47,10 @@ class Session < Hash
|
|
|
47
47
|
# * :file (not available yet)
|
|
48
48
|
|
|
49
49
|
def self.store_type=(store_type)
|
|
50
|
-
|
|
50
|
+
# gmosx: RDoc complains about this, so lets use an
|
|
51
|
+
# eval, AAAAAAAARGH!
|
|
52
|
+
# require "nitro/session/#{store_type}"
|
|
53
|
+
eval %{ require 'nitro/session/#{store_type}' }
|
|
51
54
|
end
|
|
52
55
|
|
|
53
56
|
# Lookup the session in the store by using the session
|