cuca 0.06 → 0.07
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +9 -0
- data/README +43 -34
- data/application_skeleton/app/_layouts/simple.rb +1 -1
- data/application_skeleton/public/dispatch-fwdev.cgi +21 -0
- data/application_skeleton/public/dispatch.cgi +1 -1
- data/application_skeleton/public/dispatch.cgi-old +18 -0
- data/application_skeleton/public/dispatch.fcgi-old +25 -0
- data/application_skeleton/scripts/rack-test.rb +52 -0
- data/application_skeleton/scripts/server-rack-thin.rb +40 -0
- data/application_skeleton/scripts/server-rack-webrick.rb +22 -0
- data/application_skeleton/scripts/server-webrick-cgihandler.rb +26 -0
- data/application_skeleton/scripts/server-webrick.rb +1 -1
- data/lib/cuca.rb +2 -30
- data/lib/cuca/app.rb +35 -30
- data/lib/cuca/app_cgi.rb +289 -0
- data/lib/cuca/config.rb +8 -15
- data/lib/cuca/controller.rb +22 -11
- data/lib/cuca/generator/view.rb +4 -51
- data/lib/cuca/generator_context.rb +42 -0
- data/lib/cuca/layout.rb +1 -1
- data/lib/cuca/session.rb-cgi +171 -0
- data/lib/cuca/sessionpage.rb +13 -2
- data/lib/cuca/stdlib/arform.rb +19 -2
- data/lib/cuca/stdlib/form.rb +6 -3
- data/lib/cuca/stdlib/formelements.rb +33 -8
- data/lib/cuca/stdlib/formelements.rbs +157 -0
- data/lib/cuca/stdlib/listwidget/dblist.rb +10 -6
- data/lib/cuca/stdlib/listwidget/list.rb +24 -4
- data/lib/cuca/widget.rb +11 -14
- data/lib/cuca_cli.rb +14 -0
- data/tests/controller.rb +21 -5
- data/tests/generator_markaby.rb +1 -1
- data/tests/widget.rb +2 -1
- metadata +96 -96
data/CHANGELOG
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
* 2009/xx/xx - 0.07
|
2
|
+
- 'stop' option :cancel_execution added. This can be raised in before filters
|
3
|
+
and will avoid that the run/get/post... methods are called.
|
4
|
+
- ARFormWidget will set attribites by the setter method which allows
|
5
|
+
overwriting within the model
|
6
|
+
- Minor Bugfixes
|
7
|
+
- Added subcall? method to controller to easily detect subcalls
|
8
|
+
|
9
|
+
|
1
10
|
* 2009/03/04 - 0.06
|
2
11
|
- Fixed sorting bug of filters with priority specified
|
3
12
|
- Nicer pagination on listwidget for large lists
|
data/README
CHANGED
@@ -1,34 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
application
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
1
|
+
# = Cuca - a web application framework
|
2
|
+
#
|
3
|
+
# Cuca is another web application framework written in Ruby. It's made to
|
4
|
+
# build applications with focus on functionality - less design. You can
|
5
|
+
# create and application without writing HTML. Once written Widgets
|
6
|
+
# (a smart screen element) can be reused thorough your project with
|
7
|
+
# minimum effort allowing to build fast and secure web applications.
|
8
|
+
#
|
9
|
+
# It implements the following concepts:
|
10
|
+
# * A Widget is a screen element. Can be a full page or part of it.
|
11
|
+
# The Controller and the Layout are Widgets, too.
|
12
|
+
# * A Controller deals with one request URI (get, post or both) and can set variables
|
13
|
+
# other widgets can make use of. It can also define a Layout and filters.
|
14
|
+
# * A Layout wraps the output of a controller and finally return the
|
15
|
+
# built web page.
|
16
|
+
# * A Generator (NOT "code generator") can be used within any Widget to help building the web content.
|
17
|
+
# Cuca comes with a Markaby and eruby Generator.
|
18
|
+
# * A Session can used optionally to keep stateful data.
|
19
|
+
#
|
20
|
+
#
|
21
|
+
# == Installation & Getting started
|
22
|
+
#
|
23
|
+
# Download and install from the internet:
|
24
|
+
#
|
25
|
+
# gem install --remote cuca
|
26
|
+
#
|
27
|
+
#
|
28
|
+
# Create an application skeleton:
|
29
|
+
#
|
30
|
+
# cuca my_project # this will create a new project
|
31
|
+
# cd my_project
|
32
|
+
# ruby ./script/server-webrick.rb
|
33
|
+
#
|
34
|
+
# Open http://localhost:2000/
|
35
|
+
#
|
36
|
+
#
|
37
|
+
# == Read on
|
38
|
+
#
|
39
|
+
# * Cuca::Widget
|
40
|
+
# * Cuca::Controller
|
41
|
+
# * Cuca::Layout
|
42
|
+
# * Cuca::Session
|
43
|
+
# * Cuca::App
|
@@ -11,7 +11,7 @@ class SimpleLayout < Cuca::Layout
|
|
11
11
|
<BODY>
|
12
12
|
#{@content_for_layout}
|
13
13
|
<HR/>
|
14
|
-
<SMALL>Generated by Cuca Framework #{Time.now} (using 'simple' demo layout on Cuca Version #{Cuca::VERSION})</SMALL>
|
14
|
+
<SMALL>Generated by Cuca Framework #{Time.now} (using 'simple' demo layout on Cuca Version #{Cuca::VERSION} on Ruby #{RUBY_VERSION})</SMALL>
|
15
15
|
</BODY>
|
16
16
|
</HTML>
|
17
17
|
EOF
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/ruby1.9.1
|
2
|
+
|
3
|
+
FRAMEWORK_PATH = '/home/bones/workspace/cuca_svn/cuca/lib'
|
4
|
+
|
5
|
+
$cuca_path = File.dirname(__FILE__)+"/../"
|
6
|
+
$: << FRAMEWORK_PATH
|
7
|
+
|
8
|
+
require 'cuca'
|
9
|
+
require 'rubygems'
|
10
|
+
|
11
|
+
Signal.trap("INT") do
|
12
|
+
$stderr.puts "INT caught"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
start = (Time.now.to_f * 1000).to_i
|
17
|
+
application = Cuca::App.new
|
18
|
+
application.cgicall
|
19
|
+
stop = (Time.now.to_f * 1000).to_i
|
20
|
+
dur_msec = stop - start
|
21
|
+
application.logger.info("App::cgicall: #{dur_msec} msec [= #{(1000 / dur_msec).to_i} pages / second]")
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$cuca_path = File.dirname(__FILE__)+"/../"
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'cuca'
|
7
|
+
|
8
|
+
Signal.trap("INT") do
|
9
|
+
$stderr.puts "INT caught"
|
10
|
+
exit
|
11
|
+
end
|
12
|
+
|
13
|
+
start = (Time.now.to_f * 1000).to_i
|
14
|
+
application = Cuca::App.new
|
15
|
+
application.cgicall
|
16
|
+
stop = (Time.now.to_f * 1000).to_i
|
17
|
+
dur_msec = stop - start
|
18
|
+
application.logger.info("App::cgicall: #{dur_msec} msec [= #{(1000 / dur_msec).to_i} pages / second]")
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
|
4
|
+
$cuca_path = File.dirname(__FILE__)+"/../"
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'cuca'
|
8
|
+
|
9
|
+
require "fcgi"
|
10
|
+
|
11
|
+
Signal.trap("INT") do
|
12
|
+
$stderr.puts "INT caught"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
application = Cuca::App.new
|
17
|
+
|
18
|
+
FCGI.each_cgi do |cgi|
|
19
|
+
CGI::fix_env(cgi.env_table)
|
20
|
+
start = (Time.now.to_f * 1000).to_i
|
21
|
+
application.cgicall(cgi)
|
22
|
+
stop = (Time.now.to_f * 1000).to_i
|
23
|
+
dur_msec = stop - start
|
24
|
+
application.logger.info("App::cgicall (#{cgi.path_info}: #{dur_msec} msec [= #{(1000 / dur_msec).to_i} pages / second]")
|
25
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rack'
|
4
|
+
require 'rack/session/cookie'
|
5
|
+
|
6
|
+
|
7
|
+
class Middle
|
8
|
+
def initialize(app)
|
9
|
+
@app = app
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
$stderr.puts "CAll for MIDDLE"
|
14
|
+
status, headers, body = @app.call(env)
|
15
|
+
[400, headers, [body.first.upcase]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Cuca
|
20
|
+
def initialize(app)
|
21
|
+
@app = app
|
22
|
+
end
|
23
|
+
|
24
|
+
def call(env)
|
25
|
+
$stderr.puts "CAll for CUCA"
|
26
|
+
$stderr.puts "#{@app.inspect}"
|
27
|
+
@app.call(env)
|
28
|
+
[200, {'Content-Type' => 'text/html'}, ['some Dynamic Website']]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
class App < Rack::Builder
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
app = App.new
|
40
|
+
app.use Cuca
|
41
|
+
|
42
|
+
app.use Middle
|
43
|
+
puts app.to_app.inspect
|
44
|
+
|
45
|
+
|
46
|
+
Rack::Handler::Thin.run(
|
47
|
+
Rack::ShowExceptions.new(
|
48
|
+
Rack::Lint.new(
|
49
|
+
app.to_app
|
50
|
+
)
|
51
|
+
), :Port => 1234)
|
52
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
$: << '/home/bones/workspace/cuca_svn/cuca/lib'
|
2
|
+
require 'cuca'
|
3
|
+
require 'rubygems'
|
4
|
+
# require 'cuca'
|
5
|
+
require 'rack/request'
|
6
|
+
require 'rack/response'
|
7
|
+
require 'rack/showexceptions'
|
8
|
+
require 'rack/handler'
|
9
|
+
require 'rack/handler/thin'
|
10
|
+
require 'rack/lint'
|
11
|
+
|
12
|
+
|
13
|
+
class MakeError
|
14
|
+
def initialize(app)
|
15
|
+
@app = app
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
status, headers, body = @app.call(env)
|
20
|
+
[500, headers,body]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
app = Cuca::App.new
|
27
|
+
app.use MakeError
|
28
|
+
|
29
|
+
|
30
|
+
Rack::Handler::Thin.run \
|
31
|
+
Rack::ShowExceptions.new(app),
|
32
|
+
:Port => 1234
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
# Rack::Handler::WEBrick.run \
|
37
|
+
# Rack::ShowExceptions.new(Rack::Lint.new(Cuca::App.new)),
|
38
|
+
# :Port => 1234
|
39
|
+
|
40
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
$: << '/home/bones/workspace/cuca_svn/cuca/lib'
|
2
|
+
require 'cuca'
|
3
|
+
require 'rubygems'
|
4
|
+
# require 'cuca'
|
5
|
+
require 'rack/request'
|
6
|
+
require 'rack/response'
|
7
|
+
require 'rack/showexceptions'
|
8
|
+
require 'rack/handler'
|
9
|
+
require 'rack/handler/webrick'
|
10
|
+
require 'rack/lint'
|
11
|
+
|
12
|
+
Rack::Handler::WEBrick.run \
|
13
|
+
Rack::ShowExceptions.new(Cuca::App.new),
|
14
|
+
:Port => 1234
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
# Rack::Handler::WEBrick.run \
|
19
|
+
# Rack::ShowExceptions.new(Rack::Lint.new(Cuca::App.new)),
|
20
|
+
# :Port => 1234
|
21
|
+
|
22
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'webrick'
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
|
7
|
+
# this is for http debugging
|
8
|
+
class CucaHandler < WEBrick::HTTPServlet::CGIHandler
|
9
|
+
alias :old_do_GET :do_GET
|
10
|
+
|
11
|
+
def do_GET(req, res)
|
12
|
+
# puts "------------ Request ----------\n #{req.to_s}"
|
13
|
+
start = (Time.now.to_f * 100).to_i
|
14
|
+
r = old_do_GET(req, res)
|
15
|
+
stop = (Time.now.to_f * 100).to_i
|
16
|
+
# $stderr.puts "WEBRICK: Time: #{stop - start} ms"
|
17
|
+
# puts "------------ RESPONSE ----------\n #{res.to_s}"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
server = WEBrick::HTTPServer.new(:Port => 2000)
|
23
|
+
server.mount("/", CucaHandler, File.expand_path(File.dirname(__FILE__))+"/../public/dispatch.cgi")
|
24
|
+
|
25
|
+
trap("INT"){ server.shutdown }
|
26
|
+
server.start
|
@@ -20,7 +20,7 @@ class CucaHandler < WEBrick::HTTPServlet::CGIHandler
|
|
20
20
|
end
|
21
21
|
|
22
22
|
server = WEBrick::HTTPServer.new(:Port => 2000)
|
23
|
-
server.mount("/", CucaHandler, File.expand_path(File.dirname(__FILE__))+"/../public/dispatch.cgi")
|
23
|
+
server.mount("/", CucaHandler, File.expand_path(File.dirname(__FILE__))+"/../public/dispatch-fwdev.cgi")
|
24
24
|
|
25
25
|
trap("INT"){ server.shutdown }
|
26
26
|
server.start
|
data/lib/cuca.rb
CHANGED
@@ -1,33 +1,3 @@
|
|
1
|
-
# == Cuca - a ruby web framework
|
2
|
-
#
|
3
|
-
# Cuca is a small web development framework mainly designed to build
|
4
|
-
# applications - there is little focus on design but more on coding
|
5
|
-
# efficiency.
|
6
|
-
#
|
7
|
-
# It implements the following concepts:
|
8
|
-
# * A Widget is a screen element. Can be a full page or part of it.
|
9
|
-
# The Controller and the Layout are Widgets, too.
|
10
|
-
# * A Controller deals with one request URI (get, post or both) and can set variables
|
11
|
-
# other widgets can make use of. It can also define a Layout and filters.
|
12
|
-
# * A Layout wraps the output of a controller and finally return the
|
13
|
-
# built web page.
|
14
|
-
# * A Generator (NOT "code generator") can be used within any Widget to help building the web content.
|
15
|
-
# Cuca comes with a Markaby and eruby Generator.
|
16
|
-
# * A Session can used optionally to keep stateful data.
|
17
|
-
#
|
18
|
-
#
|
19
|
-
# When you 'require' cuca you must set the global varibale $cuca_path to the root of your
|
20
|
-
# application structure. This is normally done by your dispatch.cgi or dispatch.fcgi
|
21
|
-
# script that comes with the cuca application skeleton.
|
22
|
-
#
|
23
|
-
# === See also
|
24
|
-
#
|
25
|
-
# * Cuca::Widget
|
26
|
-
# * Cuca::Controller
|
27
|
-
# * Cuca::Layout
|
28
|
-
# * Cuca::Session
|
29
|
-
# * Cuca::App
|
30
|
-
|
31
1
|
require 'cgi'
|
32
2
|
require 'cuca/cgi_fix'
|
33
3
|
require 'rubygems'
|
@@ -73,6 +43,8 @@ require 'cuca/const'
|
|
73
43
|
|
74
44
|
$cuca_path = File.expand_path($cuca_path) + '/'
|
75
45
|
|
46
|
+
$cuca_path.freeze
|
47
|
+
|
76
48
|
require 'cuca/app'
|
77
49
|
|
78
50
|
$LOAD_PATH << $cuca_path+'/lib'
|
data/lib/cuca/app.rb
CHANGED
@@ -20,6 +20,8 @@ class Sandbox
|
|
20
20
|
self.class.send(:include, mod)
|
21
21
|
controller_class = mod::const_get(controller_class_name)
|
22
22
|
controller = controller_class.send(:new, :assigns=>assigns)
|
23
|
+
$controller_object = controller
|
24
|
+
|
23
25
|
controller.run_before_filters
|
24
26
|
|
25
27
|
|
@@ -33,7 +35,7 @@ class Sandbox
|
|
33
35
|
|
34
36
|
controller.run_after_filters
|
35
37
|
|
36
|
-
return [controller.http_status, controller.mime_type, controller.to_s]
|
38
|
+
return [controller.http_status, controller.mime_type, controller.to_s, controller.http_header]
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
@@ -41,9 +43,9 @@ end
|
|
41
43
|
#
|
42
44
|
# A Cuca::App object will be created directly by the dispatcher - which again is the
|
43
45
|
# direct cgi or fastcgi script that get run by the webserver.
|
44
|
-
# Normally you just create a Cuca::App object and run the cgicall
|
46
|
+
# Normally you just create a Cuca::App object and run the cgicall method with optional with
|
45
47
|
# a cgi object as paramenter.
|
46
|
-
# Before doing that you must set $cuca_path to the root of your
|
48
|
+
# Before doing that you must set $cuca_path to the root of your application directory structure.
|
47
49
|
class App
|
48
50
|
|
49
51
|
|
@@ -70,6 +72,7 @@ class App
|
|
70
72
|
@public_path.freeze
|
71
73
|
@log_path.freeze
|
72
74
|
@logger = Logger.new("#{@log_path}/messages")
|
75
|
+
@logger.level = App::config['logger_level'] || Logger::WARN
|
73
76
|
end
|
74
77
|
|
75
78
|
|
@@ -104,14 +107,14 @@ class App
|
|
104
107
|
# this will schedule all files for autoloading
|
105
108
|
private
|
106
109
|
def autoload_files(path, naming_proc)
|
107
|
-
$app.logger.
|
110
|
+
$app.logger.debug "Autoload on #{path}"
|
108
111
|
return unless File.exist?(path)
|
109
112
|
pwd = Dir.pwd
|
110
113
|
Dir.chdir(path)
|
111
114
|
Dir['*.rb'].each do |f|
|
112
115
|
fn = f.scan(/(.*)\.rb/)[0][0]
|
113
116
|
classname = naming_proc.call(fn)
|
114
|
-
$app.logger.
|
117
|
+
$app.logger.debug "Scheduling Autoload Object '#{classname}' ==> #{path}/#{f}"
|
115
118
|
cuca_register_autoload(classname.intern, "#{path}/#{f}")
|
116
119
|
end
|
117
120
|
Dir.chdir(pwd)
|
@@ -139,18 +142,7 @@ class App
|
|
139
142
|
|
140
143
|
public
|
141
144
|
def load_support_files(urlmap) # :nodoc:
|
142
|
-
# $stderr.puts "======== load support files ========="
|
143
|
-
# $stderr.puts "Inc Dir: #{App::config['include_directories'].inspect}"
|
144
|
-
# $stderr.puts "Path tr: #{@conf['PATH_TREE'].inspect}"
|
145
|
-
# $stderr.puts "====================================="
|
146
|
-
|
147
|
-
# db = $:.dup
|
148
|
-
# all_support_directories(@conf['APP_PATH']) { |d,p| $: << d }
|
149
|
-
|
150
|
-
# all_support_directories(@app_path, @urlmap.path_tree) do |dir, proc|
|
151
|
-
# $stderr.puts "PATH TREE: #{urlmap.path_tree.inspect}"
|
152
145
|
all_support_directories(urlmap.path_tree) do |dir, proc|
|
153
|
-
# $stderr.puts "Support Directory #{dir}"
|
154
146
|
if proc then
|
155
147
|
autoload_files(dir, proc)
|
156
148
|
else
|
@@ -168,7 +160,7 @@ class App
|
|
168
160
|
$stderr.puts "ERROR: #{title} - #{exception.class.to_s}: #{exception.to_s}"
|
169
161
|
if (show_trace) then
|
170
162
|
exception.backtrace.each do |b|
|
171
|
-
$stderr.puts " #{b}"
|
163
|
+
$stderr.puts " #{b}"
|
172
164
|
err +="<br/>#{b}"
|
173
165
|
end
|
174
166
|
else
|
@@ -185,7 +177,6 @@ class App
|
|
185
177
|
def cgicall(cgi = nil)
|
186
178
|
@cgi = cgi || CGI.new
|
187
179
|
|
188
|
-
|
189
180
|
#
|
190
181
|
# 1st priority: Serve a file if it exists in the 'public' folder
|
191
182
|
#
|
@@ -197,7 +188,7 @@ class App
|
|
197
188
|
extension = file.scan(/.*\.(.*)$/)[0][0] if file.include?('.')
|
198
189
|
extension ||= 'html'
|
199
190
|
mime = mt[extension] || 'text/html'
|
200
|
-
@cgi.out('type' => mime,
|
191
|
+
@cgi.out('type' => mime,
|
201
192
|
'expires' => (Time.now+App.config['http_static_content_expires'])) { f.read }
|
202
193
|
f.close
|
203
194
|
return
|
@@ -232,9 +223,6 @@ class App
|
|
232
223
|
# 3rd: Load additional files
|
233
224
|
load_support_files(@urlmap)
|
234
225
|
|
235
|
-
test = ApplicationController.new
|
236
|
-
|
237
|
-
|
238
226
|
# 4th: Now let's run the actual page script code
|
239
227
|
controller_class_name = @urlmap.action.capitalize+"Controller"
|
240
228
|
|
@@ -248,8 +236,15 @@ class App
|
|
248
236
|
# things fail in this block get error logged and/or displayed in browser
|
249
237
|
begin
|
250
238
|
# load controller
|
251
|
-
|
252
|
-
|
239
|
+
begin
|
240
|
+
controller_module.module_eval(File.open(script).read, script) unless \
|
241
|
+
controller_module.const_defined?(controller_class_name.intern)
|
242
|
+
rescue SyntaxError => e
|
243
|
+
err = get_error("Load Error", e,
|
244
|
+
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
245
|
+
@cgi.out('status' => 'SERVER_ERROR') { err }
|
246
|
+
return
|
247
|
+
end
|
253
248
|
|
254
249
|
# Catch a common user error
|
255
250
|
raise Cuca::ApplicationException.new("Could not find #{controller_class_name} defined in #{script}") \
|
@@ -257,22 +252,32 @@ class App
|
|
257
252
|
|
258
253
|
|
259
254
|
# run controller
|
260
|
-
(status, mime, content) = Sandbox.run(controller_class_name,
|
255
|
+
(status, mime, content, headers) = Sandbox.run(controller_class_name,
|
261
256
|
@urlmap.action_module, @urlmap.assigns,
|
262
257
|
@cgi.request_method, @urlmap.subcall)
|
263
|
-
|
264
|
-
logger.
|
265
|
-
|
258
|
+
|
259
|
+
logger.debug "CGICall OK: #{status}/#{mime}"
|
260
|
+
|
261
|
+
@cgi.out(headers.merge( { 'type' => mime, 'status' => status} )) {content}
|
262
|
+
|
263
|
+
rescue SyntaxError => e
|
264
|
+
err = get_error("Syntax Error", e,
|
265
|
+
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
266
|
+
@cgi.out('status' => 'SERVER_ERROR') { err }
|
267
|
+
|
268
|
+
logger.info "CGICall Syntax Error"
|
269
|
+
return
|
270
|
+
|
266
271
|
|
267
272
|
rescue Cuca::ApplicationException => e
|
268
273
|
err = get_error("Application Error", e,
|
269
274
|
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
270
275
|
@cgi.out('status' => 'SERVER_ERROR') { err }
|
271
276
|
|
272
|
-
|
277
|
+
logger.info "CGICall Application Error"
|
273
278
|
return
|
274
279
|
|
275
|
-
rescue
|
280
|
+
rescue => e
|
276
281
|
err = get_error("System Error", e,
|
277
282
|
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
278
283
|
@cgi.out('status' => 'SERVER_ERROR') { err }
|