nitro 0.17.0 → 0.18.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 +124 -0
- data/README +2 -2
- data/Rakefile +4 -12
- data/bin/nitro +1 -1
- data/bin/nitrogen +47 -31
- data/doc/AUTHORS +3 -3
- data/doc/RELEASES +50 -1
- data/examples/README +7 -0
- data/lib/nitro.rb +5 -4
- data/lib/nitro/{adapters → adapter}/cgi.rb +2 -4
- data/lib/nitro/{adapters → adapter}/fastcgi.rb +1 -1
- data/lib/nitro/{adapters → adapter}/webrick.rb +5 -10
- data/lib/nitro/buffering.rb +6 -0
- data/lib/nitro/{builders → builder}/atom.rb +1 -5
- data/lib/nitro/{builders → builder}/form.rb +1 -5
- data/lib/nitro/{builders → builder}/rss.rb +3 -1
- data/lib/nitro/{builders → builder}/table.rb +2 -4
- data/lib/nitro/{builders → builder}/xhtml.rb +3 -5
- data/lib/nitro/{builders → builder}/xml.rb +2 -4
- data/lib/nitro/caching.rb +6 -4
- data/lib/nitro/caching/output.rb +18 -11
- data/lib/nitro/context.rb +3 -1
- data/lib/nitro/controller.rb +29 -18
- data/lib/nitro/dispatcher.rb +2 -4
- data/lib/nitro/element.rb +2 -0
- data/lib/nitro/environment.rb +2 -4
- data/lib/nitro/errors.rb +69 -0
- data/lib/nitro/mail.rb +2 -4
- data/lib/nitro/markup.rb +20 -3
- data/lib/nitro/output.rb +5 -9
- data/lib/nitro/part.rb +2 -3
- data/lib/nitro/render.rb +49 -30
- data/lib/nitro/request.rb +2 -1
- data/lib/nitro/runner.rb +23 -12
- data/lib/nitro/scaffold.rb +5 -3
- data/lib/nitro/service.rb +22 -0
- data/lib/nitro/service/xmlrpc.rb +42 -0
- data/lib/nitro/session.rb +2 -4
- data/lib/nitro/template.rb +8 -10
- data/lib/nitro/testing.rb +0 -4
- data/proto/public/error.xhtml +27 -2
- data/test/nitro/{adapters → adapter}/raw_post1.bin +0 -0
- data/test/nitro/{adapters → adapter}/tc_cgi.rb +1 -1
- data/test/nitro/{adapters → adapter}/tc_webrick.rb +1 -1
- data/test/nitro/{builders → builder}/tc_atom.rb +1 -1
- data/test/nitro/{builders → builder}/tc_rss.rb +1 -1
- data/test/nitro/{builders → builder}/tc_table.rb +1 -1
- data/test/nitro/{builders → builder}/tc_xhtml.rb +1 -1
- data/test/nitro/{builders → builder}/tc_xml.rb +1 -1
- data/test/nitro/tc_caching.rb +18 -0
- data/test/nitro/tc_controller.rb +1 -1
- data/test/nitro/tc_mail.rb +3 -1
- metadata +33 -168
- data/examples/README.windows +0 -9
- data/examples/ajax/controller.rb +0 -21
- data/examples/ajax/public/index.xhtml +0 -72
- data/examples/ajax/public/js/ajax.js +0 -64
- data/examples/ajax/run.rb +0 -14
- data/examples/blog/README +0 -70
- data/examples/blog/conf/apache.conf +0 -30
- data/examples/blog/conf/apache.conf.new +0 -53
- data/examples/blog/conf/lhttpd.conf +0 -79
- data/examples/blog/conf/locales/de.yml +0 -4
- data/examples/blog/conf/locales/en.yml +0 -4
- data/examples/blog/log/README +0 -3
- data/examples/blog/log/apache.error_log +0 -6647
- data/examples/blog/log/rewrite_log +0 -161
- data/examples/blog/public/base.xsl +0 -153
- data/examples/blog/public/fcgi.rb +0 -5
- data/examples/blog/public/m/bubbles.gif +0 -0
- data/examples/blog/public/m/comments_curve.gif +0 -0
- data/examples/blog/public/m/down.gif +0 -0
- data/examples/blog/public/m/footer_bg.gif +0 -0
- data/examples/blog/public/m/garrow.gif +0 -0
- data/examples/blog/public/m/gbull.gif +0 -0
- data/examples/blog/public/m/grbull.gif +0 -0
- data/examples/blog/public/m/h1_bg.gif +0 -0
- data/examples/blog/public/m/header_bg.gif +0 -0
- data/examples/blog/public/m/nitro.gif +0 -0
- data/examples/blog/public/m/obull.gif +0 -0
- data/examples/blog/public/m/page_bg.gif +0 -0
- data/examples/blog/public/m/rss.gif +0 -0
- data/examples/blog/public/m/side_title_bg.gif +0 -0
- data/examples/blog/public/m/sidebar_bg.gif +0 -0
- data/examples/blog/public/style.css +0 -305
- data/examples/blog/run.rb +0 -43
- data/examples/blog/src/blog.rb +0 -21
- data/examples/blog/src/controller.rb +0 -151
- data/examples/blog/src/mailer.rb +0 -23
- data/examples/blog/src/models/blog.rb +0 -33
- data/examples/blog/src/models/content.rb +0 -18
- data/examples/blog/src/views/blog_entry_email.xhtml +0 -16
- data/examples/blog/src/views/comments.xhtml +0 -36
- data/examples/blog/src/views/entry_form.xhtml +0 -22
- data/examples/blog/src/views/error.xhtml +0 -56
- data/examples/blog/src/views/index.xhtml +0 -49
- data/examples/blog/src/views/login.xhtml +0 -26
- data/examples/blog/src/views/recent_posts.xhtml +0 -14
- data/examples/blog/src/views/view_entry.xhtml +0 -37
- data/examples/blog/src/views/view_entry.xml +0 -12
- data/examples/blog/src/xsl/base.xsl +0 -160
- data/examples/blog/src/xsl/style.xsl +0 -143
- data/examples/blog/test/tc_blog.rb +0 -43
- data/examples/flash/log/README +0 -3
- data/examples/flash/root/index.xhtml +0 -16
- data/examples/flash/root/show_inline_text.xhtml +0 -17
- data/examples/flash/run.rb +0 -7
- data/examples/no_xsl_blog/README +0 -24
- data/examples/no_xsl_blog/conf/apache.conf +0 -30
- data/examples/no_xsl_blog/conf/lhttpd.conf +0 -79
- data/examples/no_xsl_blog/conf/locales/de.yml +0 -4
- data/examples/no_xsl_blog/conf/locales/en.yml +0 -4
- data/examples/no_xsl_blog/lib/blog.rb +0 -16
- data/examples/no_xsl_blog/lib/blog/controller.rb +0 -116
- data/examples/no_xsl_blog/lib/blog/model.rb +0 -35
- data/examples/no_xsl_blog/lib/blog/template.rb +0 -138
- data/examples/no_xsl_blog/lib/content.rb +0 -47
- data/examples/no_xsl_blog/log/README +0 -3
- data/examples/no_xsl_blog/log/apache.error_log +0 -473
- data/examples/no_xsl_blog/public/comments.xhtml +0 -36
- data/examples/no_xsl_blog/public/entry_form.xhtml +0 -22
- data/examples/no_xsl_blog/public/fcgi.rb +0 -5
- data/examples/no_xsl_blog/public/index.xhtml +0 -39
- data/examples/no_xsl_blog/public/login.xhtml +0 -21
- data/examples/no_xsl_blog/public/m/bubbles.gif +0 -0
- data/examples/no_xsl_blog/public/m/comments_curve.gif +0 -0
- data/examples/no_xsl_blog/public/m/down.gif +0 -0
- data/examples/no_xsl_blog/public/m/footer_bg.gif +0 -0
- data/examples/no_xsl_blog/public/m/garrow.gif +0 -0
- data/examples/no_xsl_blog/public/m/gbull.gif +0 -0
- data/examples/no_xsl_blog/public/m/grbull.gif +0 -0
- data/examples/no_xsl_blog/public/m/h1_bg.gif +0 -0
- data/examples/no_xsl_blog/public/m/header_bg.gif +0 -0
- data/examples/no_xsl_blog/public/m/nitro.gif +0 -0
- data/examples/no_xsl_blog/public/m/obull.gif +0 -0
- data/examples/no_xsl_blog/public/m/page_bg.gif +0 -0
- data/examples/no_xsl_blog/public/m/rss.gif +0 -0
- data/examples/no_xsl_blog/public/m/side_title_bg.gif +0 -0
- data/examples/no_xsl_blog/public/m/sidebar_bg.gif +0 -0
- data/examples/no_xsl_blog/public/recent_posts.xhtml +0 -14
- data/examples/no_xsl_blog/public/style.css +0 -299
- data/examples/no_xsl_blog/public/view_entry.xhtml +0 -25
- data/examples/no_xsl_blog/public/view_entry.xml +0 -12
- data/examples/no_xsl_blog/run.rb +0 -35
- data/examples/tiny/README +0 -14
- data/examples/tiny/conf/apache.conf +0 -30
- data/examples/tiny/conf/lhttpd.conf +0 -79
- data/examples/tiny/log/README +0 -3
- data/examples/tiny/log/apache.error_log +0 -154
- data/examples/tiny/public/deep/dir/hello.xhtml +0 -3
- data/examples/tiny/public/fcgi.rb +0 -5
- data/examples/tiny/public/include.xhtml +0 -3
- data/examples/tiny/public/index.xhtml +0 -55
- data/examples/tiny/public/nitro.png +0 -0
- data/examples/tiny/public/upload.xhtml +0 -21
- data/examples/tiny/run.rb +0 -7
- data/examples/wee_style/README +0 -10
- data/examples/wee_style/run.rb +0 -50
- data/examples/why_wiki/README +0 -5
- data/examples/why_wiki/run.rb +0 -59
- data/proto/public/js/ajax.js +0 -63
data/lib/nitro/markup.rb
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
# (c) 2004 Navel, all rights reserved.
|
|
3
|
-
# $Id: markup.rb 7 2005-04-12 14:24:10Z gmosx $
|
|
1
|
+
require 'redcloth'
|
|
4
2
|
|
|
5
3
|
require 'glue/property'
|
|
6
4
|
|
|
@@ -127,4 +125,23 @@ module Markup
|
|
|
127
125
|
|
|
128
126
|
end
|
|
129
127
|
|
|
128
|
+
# Markup shader.
|
|
129
|
+
#
|
|
130
|
+
# === Examples
|
|
131
|
+
#
|
|
132
|
+
# <h1>#{{Welcome}}</h1>
|
|
133
|
+
|
|
134
|
+
class MarkupShader < Shader
|
|
135
|
+
|
|
136
|
+
def process(hash, text)
|
|
137
|
+
# handle strings
|
|
138
|
+
text.gsub!(/\#\{\{(.*?)\}\}/, '#{RedCloth.new(\1).to_html}')
|
|
139
|
+
|
|
140
|
+
process_next(hash, text)
|
|
141
|
+
end
|
|
142
|
+
|
|
130
143
|
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/output.rb
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'nitro/
|
|
6
|
-
require 'nitro/builders/xhtml'
|
|
7
|
-
require 'nitro/builders/rss'
|
|
8
|
-
require 'nitro/builders/form'
|
|
9
|
-
require 'nitro/builders/table'
|
|
1
|
+
require 'nitro/builder/xml'
|
|
2
|
+
require 'nitro/builder/xhtml'
|
|
3
|
+
require 'nitro/builder/rss'
|
|
4
|
+
require 'nitro/builder/form'
|
|
5
|
+
require 'nitro/builder/table'
|
|
10
6
|
|
|
11
7
|
module Nitro
|
|
12
8
|
|
data/lib/nitro/part.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# UNDER CONSTRUCTION, dont use yet!
|
|
1
|
+
# WARNING: UNDER CONSTRUCTION, dont use yet!
|
|
2
2
|
|
|
3
3
|
require 'glue/attribute'
|
|
4
4
|
|
|
5
5
|
module Nitro
|
|
6
6
|
|
|
7
7
|
class Part
|
|
8
|
-
cattr_accessor :parts_root,
|
|
8
|
+
cattr_accessor :parts_root, '/home/gmosx/private/plasma/src'
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
end
|
|
@@ -20,4 +20,3 @@ module Kernel
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
end
|
|
23
|
-
|
data/lib/nitro/render.rb
CHANGED
|
@@ -6,6 +6,7 @@ require 'glue/object'
|
|
|
6
6
|
|
|
7
7
|
require 'nitro/shaders'
|
|
8
8
|
require 'nitro/buffering'
|
|
9
|
+
require 'nitro/errors'
|
|
9
10
|
|
|
10
11
|
module Nitro
|
|
11
12
|
|
|
@@ -25,6 +26,10 @@ module Rendering
|
|
|
25
26
|
|
|
26
27
|
@@sync = Sync.new
|
|
27
28
|
|
|
29
|
+
# The default template root
|
|
30
|
+
|
|
31
|
+
mattr_accessor :default_template_root, 'public'
|
|
32
|
+
|
|
28
33
|
# The default template name (no extension).
|
|
29
34
|
|
|
30
35
|
mattr_accessor :default_template, 'index'
|
|
@@ -54,20 +59,18 @@ module Rendering
|
|
|
54
59
|
# Returns nil if no template file is found.
|
|
55
60
|
|
|
56
61
|
def self.template_for_action(template_root, action, ext = :xhtml)
|
|
57
|
-
|
|
58
62
|
# attempt to find a template of the form
|
|
59
63
|
# template_root/action.xhtml
|
|
60
64
|
|
|
61
65
|
path = "#{template_root}/#{action.gsub(/__/, '/')}.#{ext}".squeeze('/')
|
|
62
|
-
|
|
66
|
+
|
|
63
67
|
unless File.exist?(path)
|
|
64
|
-
|
|
65
68
|
# attempt to find a template of the form
|
|
66
69
|
# template_root/action/index.xhtml
|
|
67
70
|
|
|
68
71
|
path = "#{template_root}/#{action.gsub(/__/, '/')}/#{Rendering.default_template}.#{ext}".squeeze('/')
|
|
69
72
|
|
|
70
|
-
unless File.exist?(path)
|
|
73
|
+
unless File.exist?(path)
|
|
71
74
|
# No template found!
|
|
72
75
|
path = nil
|
|
73
76
|
end
|
|
@@ -89,7 +92,7 @@ module Rendering
|
|
|
89
92
|
|
|
90
93
|
# Compile a controller action.
|
|
91
94
|
|
|
92
|
-
def self.compile_action(klass, action
|
|
95
|
+
def self.compile_action(klass, action)
|
|
93
96
|
@@sync.synchronize do
|
|
94
97
|
Aspects.include_advice_modules(klass)
|
|
95
98
|
|
|
@@ -99,7 +102,7 @@ module Rendering
|
|
|
99
102
|
|
|
100
103
|
return false unless action
|
|
101
104
|
|
|
102
|
-
Logger.debug "Compiling action '#{template_root}/#{action}'" if $DBG
|
|
105
|
+
Logger.debug "Compiling action '#{klass.template_root}/#{action}'" if $DBG
|
|
103
106
|
|
|
104
107
|
valid = false
|
|
105
108
|
|
|
@@ -166,13 +169,23 @@ module Rendering
|
|
|
166
169
|
end
|
|
167
170
|
view ||= action
|
|
168
171
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
cklass = klass
|
|
173
|
+
|
|
174
|
+
while cklass.respond_to?(:template_root)
|
|
175
|
+
if template = template_for_action(cklass.template_root, view.to_s)
|
|
176
|
+
valid = true
|
|
177
|
+
code << %{
|
|
178
|
+
#{action}_template;
|
|
179
|
+
}
|
|
180
|
+
break
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# don't search in parent template roots if an
|
|
184
|
+
# action is defined.
|
|
185
|
+
|
|
186
|
+
break if valid
|
|
187
|
+
|
|
188
|
+
cklass = cklass.superclass
|
|
176
189
|
end
|
|
177
190
|
|
|
178
191
|
# raise "Invalid action '#{action}' for '#{klass}'!" unless valid
|
|
@@ -194,26 +207,28 @@ module Rendering
|
|
|
194
207
|
end
|
|
195
208
|
}
|
|
196
209
|
|
|
210
|
+
# First compile the action method.
|
|
211
|
+
|
|
212
|
+
# begin
|
|
213
|
+
klass.class_eval(code)
|
|
214
|
+
# rescue SyntaxError => e
|
|
215
|
+
# raise ActionCompileError.new(code, action, e)
|
|
216
|
+
# end
|
|
217
|
+
|
|
218
|
+
# Try to compile the template (if exists).
|
|
219
|
+
|
|
197
220
|
if template
|
|
198
|
-
code
|
|
221
|
+
code = %{
|
|
199
222
|
def #{action}_template
|
|
200
223
|
#{transform_template(template, Rendering.shader)}
|
|
201
224
|
end
|
|
202
225
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
# lines in error radius.
|
|
210
|
-
klass.class_eval(code, __FILE__, __LINE__)
|
|
211
|
-
rescue SyntaxError => e
|
|
212
|
-
where = "Action: #{action}"
|
|
213
|
-
where += ", Template: #{template}" if template
|
|
214
|
-
Logger.error "Action compilation error, #{where}"
|
|
215
|
-
Logger.error e
|
|
216
|
-
return false
|
|
226
|
+
|
|
227
|
+
begin
|
|
228
|
+
klass.class_eval(code, template)
|
|
229
|
+
rescue SyntaxError => e
|
|
230
|
+
raise TemplateCompileError.new(code, template, e)
|
|
231
|
+
end
|
|
217
232
|
end
|
|
218
233
|
end
|
|
219
234
|
|
|
@@ -307,9 +322,11 @@ private
|
|
|
307
322
|
# Send a redirect response.
|
|
308
323
|
|
|
309
324
|
def redirect(url, status = 303)
|
|
325
|
+
url = url.to_s
|
|
326
|
+
url = "#{@context.host_url}/#{url.gsub(/^\//, '')}" unless url =~ /http/
|
|
310
327
|
@context.status = status
|
|
311
|
-
@context.out = "<html><a href=\"#{url
|
|
312
|
-
@context.response_headers['location'] = url
|
|
328
|
+
@context.out = "<html><a href=\"#{url}\">#{url}</a>.</html>\n"
|
|
329
|
+
@context.response_headers['location'] = url
|
|
313
330
|
|
|
314
331
|
raise RenderExit
|
|
315
332
|
end
|
|
@@ -363,3 +380,5 @@ private
|
|
|
363
380
|
end
|
|
364
381
|
|
|
365
382
|
end
|
|
383
|
+
|
|
384
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/request.rb
CHANGED
data/lib/nitro/runner.rb
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
# * George Moschovitis <gm@navel.gr>
|
|
4
|
-
# * James Britt <james_b@neurogami.com>
|
|
5
|
-
# (c) 2004-2005 Navel, all rights reserved.
|
|
6
|
-
# $Id: runner.rb 9 2005-04-13 00:08:20Z nasis $
|
|
7
|
-
|
|
8
3
|
require 'optparse'
|
|
9
4
|
|
|
10
5
|
require 'glue/misc'
|
|
@@ -222,12 +217,12 @@ class Runner
|
|
|
222
217
|
alias_method :setup_production, :setup_live
|
|
223
218
|
|
|
224
219
|
def invoke_fcgi_proc(conf)
|
|
225
|
-
require 'nitro/
|
|
220
|
+
require 'nitro/adapter/fastcgi'
|
|
226
221
|
FastCGI.start(conf)
|
|
227
222
|
end
|
|
228
223
|
|
|
229
224
|
def invoke_cgi_proc(conf)
|
|
230
|
-
require 'nitro/
|
|
225
|
+
require 'nitro/adapter/cgi'
|
|
231
226
|
Cgi.start(conf)
|
|
232
227
|
end
|
|
233
228
|
|
|
@@ -258,19 +253,19 @@ class Runner
|
|
|
258
253
|
|
|
259
254
|
case @server
|
|
260
255
|
when :webrick
|
|
261
|
-
require 'nitro/
|
|
256
|
+
require 'nitro/adapter/webrick'
|
|
262
257
|
Webrick.start(conf)
|
|
263
|
-
|
|
258
|
+
|
|
264
259
|
when :lhttpd
|
|
265
|
-
require 'nitro/
|
|
260
|
+
require 'nitro/adapter/fastcgi'
|
|
266
261
|
`lighttpd -f conf/lhttpd.conf`
|
|
267
262
|
|
|
268
263
|
when :apache
|
|
269
|
-
require 'nitro/
|
|
264
|
+
require 'nitro/adapter/fastcgi'
|
|
270
265
|
`apachectl -d #{Dir.pwd} -f conf/apache.conf -k start`
|
|
271
266
|
|
|
272
267
|
when :cgi
|
|
273
|
-
require 'nitro/
|
|
268
|
+
require 'nitro/adapter/cgi'
|
|
274
269
|
end
|
|
275
270
|
|
|
276
271
|
when :stop
|
|
@@ -287,6 +282,18 @@ class Runner
|
|
|
287
282
|
end
|
|
288
283
|
end
|
|
289
284
|
|
|
285
|
+
def daemonize
|
|
286
|
+
require 'daemons/daemonize'
|
|
287
|
+
pwd = Dir.pwd
|
|
288
|
+
Daemonize.daemonize(File.join(pwd, 'log/app.log'))
|
|
289
|
+
# Restore the original pwd (daemonize sets the
|
|
290
|
+
# pwd to '/').
|
|
291
|
+
Dir.chdir(pwd)
|
|
292
|
+
# Set the logger to a file (daemonize closes the
|
|
293
|
+
# std streams).
|
|
294
|
+
Logger.set(Logger.new('log/app.log'))
|
|
295
|
+
end
|
|
296
|
+
|
|
290
297
|
# Helper method.
|
|
291
298
|
|
|
292
299
|
def self.run(conf)
|
|
@@ -313,6 +320,7 @@ end
|
|
|
313
320
|
|
|
314
321
|
def self.run(conf = nil)
|
|
315
322
|
runner = Runner.new.setup
|
|
323
|
+
runner.daemonize if runner.daemon
|
|
316
324
|
conf ||= Conf.new({})
|
|
317
325
|
$nitro_environment = conf
|
|
318
326
|
yield(conf) if block_given?
|
|
@@ -320,3 +328,6 @@ def self.run(conf = nil)
|
|
|
320
328
|
end
|
|
321
329
|
|
|
322
330
|
end
|
|
331
|
+
|
|
332
|
+
# * George Moschovitis <gm@navel.gr>
|
|
333
|
+
# * James Britt <james_b@neurogami.com>
|
data/lib/nitro/scaffold.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'facet/string/singular'
|
|
2
|
+
require 'facet/string/demodulize'
|
|
3
|
+
require 'facet/string/underscore'
|
|
2
4
|
|
|
3
5
|
module Nitro
|
|
4
6
|
|
|
@@ -23,8 +25,8 @@ module Scaffolding
|
|
|
23
25
|
def scaffold(klass, options = {})
|
|
24
26
|
|
|
25
27
|
oid = options[:oid] || 'oid'
|
|
26
|
-
name = options[:name] ||
|
|
27
|
-
list_name = options[:list_name] ||
|
|
28
|
+
name = options[:name] || klass.to_s.demodulize.underscore.downcase
|
|
29
|
+
list_name = options[:list_name] || name.plural
|
|
28
30
|
options[:nosuffix] ? suffix = nil : suffix = "_#{name}"
|
|
29
31
|
|
|
30
32
|
# Add methods to the scaffolded class.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'nitro/controller'
|
|
2
|
+
|
|
3
|
+
module Nitro
|
|
4
|
+
|
|
5
|
+
class Service < Nitro::Controller
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
method, args = decode_request(request.raw_body)
|
|
9
|
+
|
|
10
|
+
res = send(method, *args)
|
|
11
|
+
|
|
12
|
+
response.content_type = 'text/xml'
|
|
13
|
+
print encode_response(method, res)
|
|
14
|
+
|
|
15
|
+
return :stop
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# * George Moschovitis <gm@navel.gr>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'xmlrpc/marshal'
|
|
2
|
+
|
|
3
|
+
require 'nitro/service'
|
|
4
|
+
|
|
5
|
+
module Nitro
|
|
6
|
+
|
|
7
|
+
# The XML-RPC protocol.
|
|
8
|
+
|
|
9
|
+
module XmlRpc
|
|
10
|
+
|
|
11
|
+
# === In
|
|
12
|
+
#
|
|
13
|
+
# [+request+]
|
|
14
|
+
# Raw request data.
|
|
15
|
+
#
|
|
16
|
+
# === Out
|
|
17
|
+
#
|
|
18
|
+
# [+method+]
|
|
19
|
+
# [+args+]
|
|
20
|
+
|
|
21
|
+
def decode_request(request)
|
|
22
|
+
method, args = XMLRPC::Marshal.load_call(request)
|
|
23
|
+
return method.gsub(/\./, '__'), args
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def encode_response(method_name, response)
|
|
27
|
+
XMLRPC::Marshal.dump_response(response)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# The XML-RPC base service.
|
|
35
|
+
|
|
36
|
+
class XmlRpcService < Service
|
|
37
|
+
include XmlRpc
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/session.rb
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
# * George Moschovitis <gm@navel.gr>
|
|
2
|
-
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id: session.rb 1 2005-04-11 11:04:30Z gmosx $
|
|
4
|
-
|
|
5
1
|
require 'md5'
|
|
6
2
|
require 'webrick'
|
|
7
3
|
|
|
@@ -156,3 +152,5 @@ class SessionStore
|
|
|
156
152
|
end
|
|
157
153
|
|
|
158
154
|
end
|
|
155
|
+
|
|
156
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/template.rb
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
# * George Moschovitis <gm@navel.gr>
|
|
2
|
-
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
-
# $Id: template.rb 30 2005-04-25 12:28:02Z gmosx $
|
|
4
|
-
|
|
5
1
|
require 'glue/flexob'
|
|
6
2
|
|
|
7
3
|
module Nitro
|
|
@@ -79,20 +75,20 @@ module TemplateMixin
|
|
|
79
75
|
# Transform the processing instructions, use <?r as
|
|
80
76
|
# a marker.
|
|
81
77
|
|
|
82
|
-
text.gsub!(/\?>/, "
|
|
83
|
-
text.gsub!(/<\?r(\s?)/, "
|
|
78
|
+
text.gsub!(/\?>/, "; #{buffer} << %^")
|
|
79
|
+
text.gsub!(/<\?r(\s?)/, "^; ")
|
|
84
80
|
|
|
85
81
|
# Transform alternative code tags.
|
|
86
82
|
# (very useful in xsl stylesheets)
|
|
87
83
|
|
|
88
|
-
text.gsub!(/<\/ruby>/, "
|
|
89
|
-
text.gsub!(/<ruby>/, "
|
|
84
|
+
text.gsub!(/<\/ruby>/, "; #{buffer} << %^")
|
|
85
|
+
text.gsub!(/<ruby>/, "^; ")
|
|
90
86
|
|
|
91
87
|
# Also handle erb/asp/jsp style tags. Those tags
|
|
92
88
|
# *cannot* be used with an xslt stylesheet.
|
|
93
89
|
|
|
94
|
-
text.gsub!(/%>/, "
|
|
95
|
-
text.gsub!(/<%/, "
|
|
90
|
+
text.gsub!(/%>/, "; #{buffer} << %^")
|
|
91
|
+
text.gsub!(/<%/, "^; ")
|
|
96
92
|
|
|
97
93
|
# Alterative versions of interpolation.
|
|
98
94
|
# (very useful in xsl stylesheets)
|
|
@@ -186,3 +182,5 @@ class FileTemplate < Flexob
|
|
|
186
182
|
end
|
|
187
183
|
|
|
188
184
|
end
|
|
185
|
+
|
|
186
|
+
# * George Moschovitis <gm@navel.gr>
|