cuca 0.02 → 0.03
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/application_skeleton/README +1 -1
- data/application_skeleton/app/_widgets/test.rb +2 -1
- data/application_skeleton/conf/config.rb +49 -0
- data/application_skeleton/conf/environment.rb +6 -16
- data/application_skeleton/public/404.html +8 -0
- data/application_skeleton/public/500.html +9 -0
- data/application_skeleton/scripts/console.rb +0 -0
- data/lib/cuca/app.rb +57 -23
- data/lib/cuca/const.rb +1 -1
- data/lib/cuca/controller.rb +57 -6
- data/lib/cuca/urlmap.rb +7 -3
- data/lib/cuca.rb +9 -2
- metadata +5 -6
- data/application_skeleton/app/user/__default_username/index.rb +0 -7
- data/application_skeleton/scripts/console +0 -5
data/application_skeleton/README
CHANGED
@@ -17,5 +17,5 @@ To get started:
|
|
17
17
|
2. See http://cuca.rubyforge.org/ for more information
|
18
18
|
|
19
19
|
|
20
|
-
Questions/Comments/Suggestions are welcome: Email boesemar@
|
20
|
+
Questions/Comments/Suggestions are welcome: Email boesemar@gmx.de or
|
21
21
|
use the rubyforge cuca project forum.
|
@@ -11,7 +11,8 @@ class TestWidget < Cuca::Widget
|
|
11
11
|
|
12
12
|
def output(*args, &block)
|
13
13
|
@a = @_assigns
|
14
|
-
|
14
|
+
@params = params
|
15
|
+
mab { text "Test-Widget (debug): "; br ;
|
15
16
|
text "ARGS: " + args.inspect ; br ;
|
16
17
|
text "ASSIGNS:" + @a.inspect; br;
|
17
18
|
text "PARAMS: " + @params.inspect ; br;
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# === conf/config.rb
|
2
|
+
# Use this file to set initial cuca framework and application configuration
|
3
|
+
# values - Only!
|
4
|
+
#
|
5
|
+
# You should NOT use this to load additional libraries or to modify cuca classes. Use
|
6
|
+
# conf/environment.rb instead.
|
7
|
+
#
|
8
|
+
# The cuca framework itself isn't fully loaded at this point.
|
9
|
+
#
|
10
|
+
# === Using Cuca::App.configure:
|
11
|
+
#
|
12
|
+
# You can pass any information here as you like. Some settings the framework
|
13
|
+
# will make use of, but this is also the right place to define application
|
14
|
+
# specific settings.
|
15
|
+
# You can access these values later anytime with Cuca::App.config[key]
|
16
|
+
|
17
|
+
Cuca::App.configure do |config|
|
18
|
+
### future use?
|
19
|
+
config.log_level = 3
|
20
|
+
|
21
|
+
### files within these directories will be automatically 'required' before
|
22
|
+
### your controller script get loaded.
|
23
|
+
config.include_directories = %w{_controllers _layouts _models _widgets}
|
24
|
+
|
25
|
+
### For pretty url mapping
|
26
|
+
# config.magic_action_prefix = '__default_'
|
27
|
+
|
28
|
+
### This defines the session cookie definitions
|
29
|
+
# config.session_key = 'cuca_session'
|
30
|
+
# config.session_prefix = 'cuca.'
|
31
|
+
# config.session_valid = 3600*24 # (one day)
|
32
|
+
|
33
|
+
### the view generator will look for external templates here:
|
34
|
+
# config.view_directory = 'app/_views'
|
35
|
+
|
36
|
+
### 404 (file not found) and 500 system error page (relative to the public folder)
|
37
|
+
# config.http_404 = '404.html'
|
38
|
+
# config.http_500 = '500.html'
|
39
|
+
|
40
|
+
### display_errors: Instead of showing a http-500 page this will display an application
|
41
|
+
### trace (similar to php display-errors) on an error event. Switch that off in
|
42
|
+
# production systems.
|
43
|
+
# config.display_errors = true
|
44
|
+
|
45
|
+
### Default mime type to be sent within the http header unless specified by the
|
46
|
+
### Controller
|
47
|
+
# config.default_mime_type = 'text/html'
|
48
|
+
|
49
|
+
end
|
@@ -1,16 +1,6 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# config.db_password = ''
|
8
|
-
# config.db_host = 'localhost'
|
9
|
-
# config.db_adapter = 'postgresql'
|
10
|
-
# config.db_database_testing = 'm3_test'
|
11
|
-
|
12
|
-
config.log_level = 3
|
13
|
-
config.include_directories = %w{_controllers _layouts _models _widgets}
|
14
|
-
config.magic_action_prefix = '__default_'
|
15
|
-
|
16
|
-
end
|
1
|
+
# Use this file to setup your application environment e.g.:
|
2
|
+
#
|
3
|
+
# - Initialize a 3rd party library
|
4
|
+
# - Load additional variables
|
5
|
+
# - Open a database handler
|
6
|
+
# - ...
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
2
|
+
<html>
|
3
|
+
<head><TITLE>404 - File not found</TITLE></head>
|
4
|
+
<body>
|
5
|
+
<h1>404 - File not found</h1>
|
6
|
+
The requested file could not be located.
|
7
|
+
</body>
|
8
|
+
</html>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
2
|
+
<html>
|
3
|
+
<head><TITLE>500 - Server error</TITLE></head>
|
4
|
+
<body>
|
5
|
+
<h1>500 - Server Error</h1>
|
6
|
+
An internal server error happened while processing your request.
|
7
|
+
</body>
|
8
|
+
</html>
|
9
|
+
|
File without changes
|
data/lib/cuca/app.rb
CHANGED
@@ -6,6 +6,8 @@ module Cuca
|
|
6
6
|
# Sandbox is used internally run the action script defined by the controller
|
7
7
|
# In future this can be extended to implement some security features etc..
|
8
8
|
class Sandbox
|
9
|
+
|
10
|
+
|
9
11
|
def self.run(controller_class_name, mod, assigns, request_method, subcall)
|
10
12
|
self.class.send(:include, mod)
|
11
13
|
controller_class = mod::const_get(controller_class_name)
|
@@ -23,7 +25,7 @@ class Sandbox
|
|
23
25
|
|
24
26
|
controller.run_after_filters
|
25
27
|
|
26
|
-
return controller.
|
28
|
+
return [controller.http_status, controller.mime_type, controller.to_s]
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -67,12 +69,14 @@ class App
|
|
67
69
|
self['include_directories'] = %w{_controllers _widgets _layouts}
|
68
70
|
self['log_level'] = 3
|
69
71
|
self['magic_prefix'] = '__default_'
|
70
|
-
self['directory_seperator'] = '/' # future?
|
71
72
|
self['session_key'] = 'cuca_session'
|
72
73
|
self['session_prefix'] = 'cuca.'
|
73
74
|
self['session_valid'] = 3600*24
|
74
|
-
self['view_directory'] = 'app/
|
75
|
-
|
75
|
+
self['view_directory'] = 'app/_views' # where to find views for the view/erb generator
|
76
|
+
self['http_404'] = '404.html'
|
77
|
+
self['http_500'] = '500.html'
|
78
|
+
self['default_mime_type'] = 'text/html'
|
79
|
+
self['display_errors'] = true
|
76
80
|
end
|
77
81
|
|
78
82
|
end
|
@@ -172,10 +176,10 @@ class App
|
|
172
176
|
@conf['ASSIGNS'] = mapping.assigns
|
173
177
|
@conf['ACTION'] = mapping.action
|
174
178
|
@urlmap = mapping
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
+
|
180
|
+
rescue RoutingError => r # no script found - maybe serve a static file?
|
181
|
+
@conf['SCRIPT'] = nil
|
182
|
+
return
|
179
183
|
end
|
180
184
|
|
181
185
|
# get the PATH_TREE for file inclusion!
|
@@ -213,8 +217,10 @@ class App
|
|
213
217
|
$conf = @conf
|
214
218
|
$app = self
|
215
219
|
|
216
|
-
rescue RuntimeError => e
|
217
|
-
@cgi.out { "Error initializing the app: #{$!}" }
|
220
|
+
# rescue RuntimeError => e
|
221
|
+
# @cgi.out { "Error initializing the app: #{$!}" }
|
222
|
+
rescue RoutingError => e
|
223
|
+
@cgi.out { "Error initializing the app (RoutingError: #{$!})" }
|
218
224
|
end
|
219
225
|
|
220
226
|
# this has to be public for testing scripts
|
@@ -238,6 +244,25 @@ class App
|
|
238
244
|
# end
|
239
245
|
end
|
240
246
|
|
247
|
+
|
248
|
+
# this will build an error message depending on configuration
|
249
|
+
private
|
250
|
+
def get_error(title, exception, show_trace = true, file=nil)
|
251
|
+
err = "<h3>#{title}</h3>"
|
252
|
+
if (show_trace) then
|
253
|
+
exception.backtrace.each do |b|
|
254
|
+
err +="<br/>#{b}"
|
255
|
+
end
|
256
|
+
else
|
257
|
+
begin
|
258
|
+
err = File.open(file).read
|
259
|
+
rescue
|
260
|
+
end
|
261
|
+
end
|
262
|
+
err
|
263
|
+
end
|
264
|
+
|
265
|
+
|
241
266
|
public
|
242
267
|
def cgicall
|
243
268
|
script = @conf['SCRIPT']
|
@@ -259,6 +284,19 @@ class App
|
|
259
284
|
return
|
260
285
|
end
|
261
286
|
|
287
|
+
# If config (urlmap) couldn't find a script then let's give up
|
288
|
+
# with a file-not-found 404 error
|
289
|
+
if script.nil? then
|
290
|
+
begin
|
291
|
+
file = "#{@conf['PUBLIC_PATH']}/#{Cuca::App.config['http_404']}"
|
292
|
+
c = File.open(file).read
|
293
|
+
@cgi.out('status' => 'NOT_FOUND', 'type' => 'text/html') { c }
|
294
|
+
rescue => e
|
295
|
+
@cgi.out('status' => 'NOT_FOUND', 'type' => 'text/html') { "404 - File not found!" }
|
296
|
+
end
|
297
|
+
return
|
298
|
+
end
|
299
|
+
|
262
300
|
|
263
301
|
#
|
264
302
|
# 2nd: Check if we have a script for requested action
|
@@ -299,25 +337,21 @@ class App
|
|
299
337
|
#
|
300
338
|
begin
|
301
339
|
|
302
|
-
|
303
|
-
|
304
|
-
|
340
|
+
(status, mime, content) = Sandbox.run(controller_class_name,
|
341
|
+
@urlmap.action_module, @conf['ASSIGNS'],
|
342
|
+
$cgi.request_method, @conf['SUBCALL'])
|
305
343
|
|
306
|
-
@cgi.out('type' => '
|
344
|
+
@cgi.out('type' => mime, 'status' => status) {content}
|
307
345
|
|
308
346
|
rescue Cuca::ApplicationException => e
|
309
|
-
err = "
|
310
|
-
|
311
|
-
err +="<br/>#{b}"
|
312
|
-
end
|
347
|
+
err = get_error("Application Error", e,
|
348
|
+
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
313
349
|
@cgi.out('status' => 'SERVER_ERROR') { err }
|
314
|
-
return
|
350
|
+
return
|
315
351
|
|
316
352
|
rescue => e
|
317
|
-
err = "
|
318
|
-
|
319
|
-
err +="<br/>#{b}"
|
320
|
-
end
|
353
|
+
err = get_error("System Error", e,
|
354
|
+
Cuca::App.config['display_errors'], Cuca::App.config['http_500'])
|
321
355
|
@cgi.out('status' => 'SERVER_ERROR') { err }
|
322
356
|
return
|
323
357
|
|
data/lib/cuca/const.rb
CHANGED
data/lib/cuca/controller.rb
CHANGED
@@ -48,6 +48,28 @@ end
|
|
48
48
|
#
|
49
49
|
# The magic URL prefix (default: __default_) can be change within App::Config
|
50
50
|
#
|
51
|
+
# == Defining a Layouts
|
52
|
+
#
|
53
|
+
# In most cases a layout is defined on the controller class definition with the
|
54
|
+
# layout instruction:
|
55
|
+
#
|
56
|
+
# class IndexController
|
57
|
+
# layout 'standard'
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# In some cases you want to render a different layout or disable it at all. For
|
61
|
+
# this you can call within your action the 'layout' instance method that will
|
62
|
+
# temporarily the instruct the controller to render another layout or no layout
|
63
|
+
# (if false).
|
64
|
+
#
|
65
|
+
#
|
66
|
+
# == Interrupting the program
|
67
|
+
#
|
68
|
+
# If you want to stop your program you can call the 'stop' method. Stop has
|
69
|
+
# function to do most function, like redirect or setting a different layout or
|
70
|
+
# raising an error message.
|
71
|
+
#
|
72
|
+
#
|
51
73
|
# == Examples
|
52
74
|
#
|
53
75
|
# Hello world (index.rb):
|
@@ -85,16 +107,39 @@ class Controller < Widget
|
|
85
107
|
attr_reader :cancel_execution # this can be set by anyone,
|
86
108
|
# methods get/post/run will not be executed
|
87
109
|
|
110
|
+
|
111
|
+
# Tells the app what to send to the browser 'text/html'
|
112
|
+
def mime_type(mt=nil)
|
113
|
+
@_mime_type = mt unless mt.nil?
|
114
|
+
@_mime_type
|
115
|
+
end
|
116
|
+
|
117
|
+
# A ruby cgi status type 'OK', 'NOT_FOUND'....to be sent within the http header
|
118
|
+
def http_status(hs=nil)
|
119
|
+
@_http_status = hs unless hs.nil?
|
120
|
+
@_http_status
|
121
|
+
end
|
122
|
+
|
88
123
|
|
89
124
|
# get layout
|
125
|
+
private # ??
|
90
126
|
def self.def_layout
|
127
|
+
# return @_layout unless @_layout.nil?
|
91
128
|
self.run_attr_method('def_layout_name')
|
92
129
|
end
|
93
130
|
|
94
|
-
# define a layout
|
131
|
+
# define a layout for the Controller
|
132
|
+
public
|
95
133
|
def self.layout(name)
|
96
134
|
define_attr_method(:def_layout_name, name)
|
97
135
|
end
|
136
|
+
|
137
|
+
# define a layout for the current instance
|
138
|
+
def layout(name)
|
139
|
+
$stderr.puts "Overwriting Layout: #{self.class.def_layout.inspect} with #{name}"
|
140
|
+
@_layout = name
|
141
|
+
end
|
142
|
+
|
98
143
|
|
99
144
|
private
|
100
145
|
def self.define_filter_method(chain_name, method_name)
|
@@ -177,11 +222,11 @@ class Controller < Widget
|
|
177
222
|
# this piece of code will handle a thrown exception BreakControllerException
|
178
223
|
def handle_exception(e)
|
179
224
|
if e.flags.has_key?(:layout) then
|
180
|
-
|
225
|
+
@_layout = e.flags[:layout]
|
181
226
|
end
|
182
227
|
|
183
228
|
if e.flags.has_key?(:redirect) then
|
184
|
-
|
229
|
+
@_layout = false
|
185
230
|
to = e.flags[:redirect]
|
186
231
|
clear
|
187
232
|
@_content = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title>Redirecting...</title><meta http-equiv=\"REFRESH\" content=\"0;url=#{to}\"></HEAD></HTML>"
|
@@ -189,7 +234,7 @@ class Controller < Widget
|
|
189
234
|
end
|
190
235
|
|
191
236
|
if e.flags.has_key?(:error) then
|
192
|
-
|
237
|
+
@_layout = false
|
193
238
|
clear
|
194
239
|
@error_message = e.flags[:error]
|
195
240
|
@cancel_execution = true
|
@@ -241,13 +286,19 @@ class Controller < Widget
|
|
241
286
|
get_assigns.each_pair do |k,v|
|
242
287
|
instance_variable_set("@#{k}", v)
|
243
288
|
end
|
289
|
+
|
290
|
+
@_mime_type = Cuca::App.config['default_mime_type']
|
291
|
+
@_http_status = 'OK'
|
244
292
|
end
|
245
293
|
|
246
294
|
private
|
247
295
|
def load_layout
|
248
|
-
|
296
|
+
l = @_layout.nil? ? self.class.def_layout : @_layout
|
297
|
+
return nil if (l.nil? || l == false)
|
298
|
+
lname = l.capitalize+"Layout"
|
299
|
+
|
249
300
|
begin
|
250
|
-
layout_class = Object::const_get(
|
301
|
+
layout_class = Object::const_get(lname)
|
251
302
|
rescue => e
|
252
303
|
# fixme - if layout loading fails we should display some error
|
253
304
|
return nil
|
data/lib/cuca/urlmap.rb
CHANGED
@@ -23,8 +23,9 @@ end
|
|
23
23
|
# * assigns - hash with variable assigns from the url (magick prefixes)
|
24
24
|
# * subcall - name of subcall or nil if a normal call was made
|
25
25
|
# * action - Action name (Note: action.capitalize+"Controller" is your controller class name)
|
26
|
-
# *
|
27
|
-
# *
|
26
|
+
# * base_url - Base URL to the action (e.g.: /user/someone/show is -> /user/someone/)
|
27
|
+
# * action_path - Path to the action script
|
28
|
+
# * action_path_full - Full path to action script
|
28
29
|
# * action_module - The module the action should be loaded into (to avoid name conflicts, depends on action_path)
|
29
30
|
#
|
30
31
|
#
|
@@ -52,6 +53,7 @@ end
|
|
52
53
|
#
|
53
54
|
# u.script => '/home/bones/src/cuca_app/app/customer/__customer/show.rb'
|
54
55
|
# u.action => 'show'
|
56
|
+
# u.base_url => '/customer/__customer/'
|
55
57
|
# u.assigns => { 'customer' => 'southwind_lda' }
|
56
58
|
# u.action_path => 'customer/southwind_lda/'
|
57
59
|
#
|
@@ -59,6 +61,7 @@ class URLMap
|
|
59
61
|
attr_reader :assigns
|
60
62
|
attr_reader :script
|
61
63
|
attr_reader :subcall
|
64
|
+
attr_reader :base_url
|
62
65
|
attr_reader :action
|
63
66
|
attr_reader :action_path
|
64
67
|
attr_reader :action_path_full
|
@@ -138,7 +141,7 @@ class URLMap
|
|
138
141
|
files = @path_info.split('/')
|
139
142
|
|
140
143
|
files << '' if @path_info[@path_info.size-1].chr == '/' # add empty element if we point to a directory
|
141
|
-
|
144
|
+
|
142
145
|
# puts files.inspect
|
143
146
|
real_path = @base_path
|
144
147
|
|
@@ -150,6 +153,7 @@ class URLMap
|
|
150
153
|
real_path = "#{real_path}/#{r}"
|
151
154
|
end
|
152
155
|
|
156
|
+
@base_url = "#{files[0..-2].join('/')}/"
|
153
157
|
@action_path = real_path[@base_path.length..-1]
|
154
158
|
@action_path_full = real_path
|
155
159
|
@action_module = make_module(@action_path)
|
data/lib/cuca.rb
CHANGED
@@ -58,11 +58,18 @@ require 'cuca/app'
|
|
58
58
|
|
59
59
|
$LOAD_PATH << $cuca_path+'/lib'
|
60
60
|
begin
|
61
|
-
require $cuca_path+'/conf/
|
61
|
+
require $cuca_path+'/conf/config'
|
62
62
|
rescue LoadError => e
|
63
|
-
$stderr.puts "WARN: Error loading conf/
|
63
|
+
$stderr.puts "WARN: Error loading conf/config: #{e}"
|
64
64
|
end
|
65
65
|
|
66
66
|
require 'cuca/widget'
|
67
67
|
require 'cuca/controller'
|
68
68
|
require 'cuca/layout'
|
69
|
+
|
70
|
+
begin
|
71
|
+
require $cuca_path+'/conf/environment'
|
72
|
+
rescue LoadError => e
|
73
|
+
$stderr.puts "WARN: Error loading conf/environment: #{e}"
|
74
|
+
end
|
75
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.03"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Boese
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-05-
|
12
|
+
date: 2008-05-18 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -90,9 +90,6 @@ files:
|
|
90
90
|
- application_skeleton/app/_widgets
|
91
91
|
- application_skeleton/app/_widgets/test.rb
|
92
92
|
- application_skeleton/app/_widgets/sourcecode.rb
|
93
|
-
- application_skeleton/app/user
|
94
|
-
- application_skeleton/app/user/__default_username
|
95
|
-
- application_skeleton/app/user/__default_username/index.rb
|
96
93
|
- application_skeleton/app/_views
|
97
94
|
- application_skeleton/scripts
|
98
95
|
- application_skeleton/scripts/server-lighttpd-fcgi.rb
|
@@ -100,16 +97,18 @@ files:
|
|
100
97
|
- application_skeleton/scripts/test.rb
|
101
98
|
- application_skeleton/scripts/server-lighttpd.rb
|
102
99
|
- application_skeleton/scripts/server-webrick.rb
|
103
|
-
- application_skeleton/scripts/console
|
104
100
|
- application_skeleton/lib
|
105
101
|
- application_skeleton/public
|
102
|
+
- application_skeleton/public/404.html
|
106
103
|
- application_skeleton/public/dispatch.fcgi
|
107
104
|
- application_skeleton/public/dispatch.cgi
|
108
105
|
- application_skeleton/public/css
|
109
106
|
- application_skeleton/public/css/style.css
|
110
107
|
- application_skeleton/public/img
|
111
108
|
- application_skeleton/public/img/cuca-seagull.png
|
109
|
+
- application_skeleton/public/500.html
|
112
110
|
- application_skeleton/conf
|
111
|
+
- application_skeleton/conf/config.rb
|
113
112
|
- application_skeleton/conf/environment.rb
|
114
113
|
has_rdoc: true
|
115
114
|
homepage: http://cuca.rubyforge.org/
|