nitro 0.3.0 → 0.4.1
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 +284 -0
- data/{LICENCE → LICENSE} +1 -1
- data/README +13 -17
- data/RELEASES +13 -1
- data/Rakefile +1 -9
- data/bin/cluster.rb +5 -5
- data/examples/blog/README +45 -0
- data/examples/blog/apache.conf +0 -0
- data/examples/blog/app.rb +21 -0
- data/examples/blog/config.rb +88 -0
- data/examples/blog/lib/blog.rb +104 -0
- data/examples/blog/log/app.log +117 -0
- data/examples/blog/root/comments.xhtml +38 -0
- data/examples/blog/root/entry_form.xhtml +18 -0
- data/examples/blog/root/index.xhtml +43 -0
- data/examples/blog/root/login.xhtml +24 -0
- data/examples/blog/root/m/bubbles.gif +0 -0
- data/examples/blog/root/m/comments_curve.gif +0 -0
- data/examples/blog/root/m/down.gif +0 -0
- data/examples/blog/root/m/footer_bg.gif +0 -0
- data/examples/blog/root/m/garrow.gif +0 -0
- data/examples/blog/root/m/gbull.gif +0 -0
- data/examples/blog/root/m/grbull.gif +0 -0
- data/examples/blog/root/m/h1_bg.gif +0 -0
- data/examples/blog/root/m/header_bg.gif +0 -0
- data/examples/blog/root/m/obull.gif +0 -0
- data/examples/blog/root/m/page_bg.gif +0 -0
- data/examples/blog/root/m/side_title_bg.gif +0 -0
- data/examples/blog/root/m/sidebar_bg.gif +0 -0
- data/examples/blog/root/recent_posts.xhtml +14 -0
- data/examples/blog/root/style.css +201 -0
- data/examples/blog/root/style.xsl +118 -0
- data/examples/blog/root/view_entry.xhtml +29 -0
- data/examples/og/run.rb +27 -29
- data/examples/tiny/README +3 -4
- data/examples/tiny/app.rb +6 -16
- data/examples/tiny/config.rb +30 -0
- data/examples/tiny/log/app.log +23 -0
- data/examples/tiny/root/{index.sx → index.xhtml} +3 -6
- data/lib/{n/std.rb → nitro.rb} +9 -4
- data/lib/{n → nitro}/application.rb +13 -7
- data/lib/{n → nitro}/config.rb +38 -8
- data/lib/{n → nitro}/events.rb +1 -1
- data/lib/{n → nitro}/l10n.rb +1 -1
- data/lib/{n → nitro}/logger.rb +8 -8
- data/lib/{n → nitro}/macros.rb +3 -3
- data/lib/{n → nitro}/mixins.rb +1 -1
- data/lib/nitro/properties.rb +301 -0
- data/lib/{n → nitro}/server.rb +2 -2
- data/lib/{n → nitro}/server/appserver.rb +14 -5
- data/lib/{n → nitro}/server/cluster.rb +5 -5
- data/lib/{n → nitro}/server/cookie.rb +1 -1
- data/lib/nitro/server/dispatcher.rb +66 -0
- data/lib/{n → nitro}/server/filters.rb +7 -7
- data/lib/{n → nitro}/server/filters/autologin.rb +3 -3
- data/lib/{n → nitro}/server/fragment.rb +3 -3
- data/lib/{n → nitro}/server/handlers.rb +3 -3
- data/lib/nitro/server/render.rb +200 -0
- data/lib/{n → nitro}/server/request.rb +6 -6
- data/lib/{n → nitro}/server/requestpart.rb +5 -5
- data/lib/{n → nitro}/server/script.rb +3 -3
- data/lib/{n → nitro}/server/server.rb +4 -4
- data/lib/{n → nitro}/server/session.rb +3 -3
- data/lib/nitro/server/shaders.rb +165 -0
- data/lib/{n → nitro}/server/user.rb +1 -1
- data/lib/nitro/server/webrick.rb +175 -0
- data/lib/nitro/service.rb +25 -0
- data/lib/{n → nitro}/sitemap.rb +2 -2
- data/lib/{n → nitro}/ui/date-select.rb +0 -0
- data/lib/{n → nitro}/ui/pager.rb +1 -1
- data/lib/{n → nitro}/ui/popup.rb +1 -1
- data/lib/{n → nitro}/ui/select.rb +1 -1
- data/lib/{n → nitro}/ui/tabs.rb +1 -1
- data/lib/{n → nitro}/utils/array.rb +1 -1
- data/lib/{n → nitro}/utils/cache.rb +1 -1
- data/lib/{n → nitro}/utils/gfx.rb +1 -1
- data/lib/{n → nitro}/utils/hash.rb +1 -1
- data/lib/{n → nitro}/utils/html.rb +1 -1
- data/lib/{n → nitro}/utils/http.rb +1 -1
- data/lib/{n → nitro}/utils/mail.rb +1 -1
- data/lib/{n → nitro}/utils/number.rb +1 -1
- data/lib/{n → nitro}/utils/pool.rb +1 -1
- data/lib/{n → nitro}/utils/string.rb +19 -95
- data/lib/{n → nitro}/utils/template.rb +0 -0
- data/lib/{n → nitro}/utils/time.rb +1 -1
- data/lib/{n → nitro}/utils/uri.rb +3 -3
- data/lib/nitro/version.rb +11 -0
- data/lib/{n/og.rb → og.rb} +61 -31
- data/lib/{n/og → og}/backend.rb +13 -7
- data/lib/{n/og → og}/backends/mysql.rb +43 -39
- data/lib/{n/og → og}/backends/psql.rb +42 -38
- data/lib/{n/og → og}/connection.rb +21 -9
- data/lib/{n/og → og}/meta.rb +18 -12
- data/lib/xsl/base.xsl +11 -88
- data/test/n/server/tc_cookie.rb +1 -1
- data/test/n/server/tc_filters.rb +1 -1
- data/test/n/server/tc_request.rb +3 -3
- data/test/n/server/tc_requestpart.rb +2 -2
- data/test/n/server/tc_session.rb +1 -1
- data/test/n/tc_events.rb +1 -1
- data/test/n/tc_og.rb +16 -18
- data/test/n/tc_properties.rb +22 -18
- data/test/n/tc_sitemap.rb +2 -2
- data/test/n/ui/tc_pager.rb +4 -4
- data/test/n/utils/tc_cache.rb +1 -1
- data/test/n/utils/tc_hash.rb +1 -1
- data/test/n/utils/tc_html.rb +1 -1
- data/test/n/utils/tc_http.rb +1 -1
- data/test/n/utils/tc_number.rb +1 -1
- data/test/n/utils/tc_strings.rb +1 -46
- data/test/n/utils/tc_uri.rb +1 -1
- metadata +101 -108
- data/examples/simple/README +0 -42
- data/examples/simple/app.rb +0 -31
- data/examples/simple/conf/apache.conf +0 -100
- data/examples/simple/conf/config.rb +0 -72
- data/examples/simple/conf/debug-config.rb +0 -26
- data/examples/simple/conf/live-config.rb +0 -26
- data/examples/simple/conf/requires.rb +0 -43
- data/examples/simple/ctl +0 -32
- data/examples/simple/env.rb +0 -32
- data/examples/simple/install.rb +0 -12
- data/examples/simple/lib/articles/entities.rb +0 -37
- data/examples/simple/lib/articles/lc-en.rb +0 -36
- data/examples/simple/lib/articles/methods.rb +0 -55
- data/examples/simple/lib/articles/part.rb +0 -57
- data/examples/simple/root/add-article.sx +0 -15
- data/examples/simple/root/article-form.ss +0 -20
- data/examples/simple/root/comments-form.ss +0 -16
- data/examples/simple/root/comments.si +0 -30
- data/examples/simple/root/index.sx +0 -44
- data/examples/simple/root/shader/shader.xsl +0 -100
- data/examples/simple/root/shader/style.css +0 -9
- data/examples/simple/root/view-article.sx +0 -29
- data/examples/tiny/conf/config.rb +0 -62
- data/examples/tiny/conf/requires.rb +0 -33
- data/examples/tiny/ctl +0 -16
- data/lib/n/parts.rb +0 -157
- data/lib/n/properties.rb +0 -199
- data/lib/n/server/dispatcher.rb +0 -55
- data/lib/n/server/handlers/code-handler.rb +0 -182
- data/lib/n/server/handlers/page-handler.rb +0 -612
- data/lib/n/server/webrick.rb +0 -283
- data/lib/n/shaders.rb +0 -166
- data/lib/n/sync/clc.rb +0 -110
- data/lib/n/sync/handler.rb +0 -229
- data/lib/n/sync/server.rb +0 -176
- data/lib/p/README +0 -1
data/lib/{n → nitro}/server.rb
RENAMED
@@ -2,9 +2,9 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: server.rb
|
5
|
+
# $Id: server.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
|
-
require "
|
7
|
+
require "nitro/application"
|
8
8
|
|
9
9
|
module N
|
10
10
|
|
@@ -2,13 +2,13 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: appserver.rb
|
5
|
+
# $Id: appserver.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
7
|
require "drb"
|
8
8
|
|
9
|
-
require "
|
10
|
-
require "
|
11
|
-
require "
|
9
|
+
require "nitro/application"
|
10
|
+
require "nitro/server"
|
11
|
+
require "nitro/server/session"
|
12
12
|
|
13
13
|
module N
|
14
14
|
|
@@ -19,6 +19,7 @@ module N
|
|
19
19
|
module AppServerMixin
|
20
20
|
|
21
21
|
def initialize_app
|
22
|
+
|
22
23
|
if $drb_state
|
23
24
|
# Cluster mode: use distributed Ruby objects.
|
24
25
|
$lm = N::Cluster::Slm.new($drb_lm_server, "druby://:8000")
|
@@ -30,11 +31,19 @@ module AppServerMixin
|
|
30
31
|
end
|
31
32
|
|
32
33
|
# initialize app
|
33
|
-
initialize_sitemap()
|
34
|
+
initialize_sitemap()
|
34
35
|
initialize_shaders()
|
35
36
|
initialize_events()
|
36
37
|
end
|
37
38
|
|
39
|
+
def initialize_sitemap
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize_shaders
|
43
|
+
end
|
44
|
+
|
45
|
+
def initialize_events
|
46
|
+
end
|
38
47
|
end
|
39
48
|
|
40
49
|
# = AppServer
|
@@ -2,17 +2,17 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: cluster.rb
|
5
|
+
# $Id: cluster.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
7
|
$:.unshift "lib"
|
8
8
|
|
9
9
|
require "drb"
|
10
10
|
require "monitor"
|
11
11
|
|
12
|
-
require "
|
13
|
-
require "
|
14
|
-
require "
|
15
|
-
require "
|
12
|
+
require "nitro/application"
|
13
|
+
require "nitro/server"
|
14
|
+
require "nitro/utils/cache"
|
15
|
+
require "nitro/server/session"
|
16
16
|
|
17
17
|
module N
|
18
18
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
3
|
+
#
|
4
|
+
# (c) 2004 Navel, all rights reserved.
|
5
|
+
# $Id: dispatcher.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
|
+
|
7
|
+
require 'nitro/server/render'
|
8
|
+
|
9
|
+
module N
|
10
|
+
|
11
|
+
# = Dispatcher
|
12
|
+
#
|
13
|
+
module Dispatcher
|
14
|
+
include N::Render
|
15
|
+
|
16
|
+
def process(request, response)
|
17
|
+
begin
|
18
|
+
$og.get_connection if $og
|
19
|
+
|
20
|
+
session = create_session(request, response)
|
21
|
+
render(request.request_uri.path, request, response, session)
|
22
|
+
|
23
|
+
unless response.header['Content-Type']
|
24
|
+
response.header['Content-Type'] = $default_content_type
|
25
|
+
end
|
26
|
+
response.body = @out
|
27
|
+
rescue Exception, StandardError => e
|
28
|
+
$log.error "error while handling the request #{request.request_uri}"
|
29
|
+
$log.error pp_exception(e)
|
30
|
+
|
31
|
+
if $error_page_url
|
32
|
+
# internal redirect to error page.
|
33
|
+
request.request_uri.path = $error_page_url
|
34
|
+
retry
|
35
|
+
else
|
36
|
+
# no custom error page defined. Presen a simple yet
|
37
|
+
# useful error screen.
|
38
|
+
response.header['Content-Type'] = 'text/html'
|
39
|
+
body = %{
|
40
|
+
<h1>ERROR</h1>
|
41
|
+
<p>Click <a href="#{request.referer}">here</a> to return
|
42
|
+
to the previous page.</p>
|
43
|
+
}
|
44
|
+
=begin
|
45
|
+
if request.error_log
|
46
|
+
body << %{
|
47
|
+
<h3>Request error log</h3>
|
48
|
+
<pre>#{request.error_log.join("\n")}</pre>
|
49
|
+
}
|
50
|
+
end
|
51
|
+
=end
|
52
|
+
body << %{
|
53
|
+
<h3>Exception</h3>
|
54
|
+
<pre>#{pp_exception(e)}</pre>
|
55
|
+
}
|
56
|
+
response.body = body
|
57
|
+
end
|
58
|
+
ensure
|
59
|
+
$og.put_connection if $og
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end # module
|
66
|
+
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 20024 Navel, all rights reserved.
|
5
|
-
# $Id: filters.rb
|
5
|
+
# $Id: filters.rb 152 2004-11-13 20:02:35Z gmosx $
|
6
6
|
|
7
7
|
require "socket"
|
8
8
|
require "thread"
|
@@ -33,7 +33,7 @@ class ServerFilter
|
|
33
33
|
#
|
34
34
|
# example:
|
35
35
|
# LogFilter.new(TimeFilter.new(PageFilter.new))
|
36
|
-
|
36
|
+
#
|
37
37
|
def initialize(next_filter = nil)
|
38
38
|
@next_filter = next_filter
|
39
39
|
end
|
@@ -42,13 +42,13 @@ class ServerFilter
|
|
42
42
|
#
|
43
43
|
# example:
|
44
44
|
# LogFilter.new << TimeFilter.new << PageFilter.new
|
45
|
-
|
45
|
+
#
|
46
46
|
def << (next_filter = nil)
|
47
47
|
@next_filter = next_filter
|
48
48
|
end
|
49
49
|
|
50
|
-
#
|
51
|
-
|
50
|
+
# Override this method to implement your filter.
|
51
|
+
#
|
52
52
|
def process(request)
|
53
53
|
# preprocessing comes here...
|
54
54
|
|
@@ -60,8 +60,8 @@ class ServerFilter
|
|
60
60
|
# return the result...
|
61
61
|
end
|
62
62
|
|
63
|
-
#
|
64
|
-
|
63
|
+
# Process the next filter in the pipeline
|
64
|
+
#
|
65
65
|
def process_next(request)
|
66
66
|
if @next_filter
|
67
67
|
return @next_filter.process(request)
|
@@ -2,10 +2,10 @@
|
|
2
2
|
# * George Moschovitis
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: autologin.rb
|
5
|
+
# $Id: autologin.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
|
-
require "
|
8
|
-
require "
|
7
|
+
require "nitro/utils/string"
|
8
|
+
require "nitro/server/filters"
|
9
9
|
|
10
10
|
require_part "users"
|
11
11
|
|
@@ -2,10 +2,10 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: fragment.rb
|
5
|
+
# $Id: fragment.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
|
-
require "
|
8
|
-
require "
|
7
|
+
require "nitro/utils/cache"
|
8
|
+
require "nitro/mixins"
|
9
9
|
|
10
10
|
module N
|
11
11
|
|
@@ -2,10 +2,10 @@
|
|
2
2
|
# * George Moschovitis <gm@navel.gr>
|
3
3
|
#
|
4
4
|
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: handlers.rb
|
5
|
+
# $Id: handlers.rb 155 2004-11-13 20:32:12Z gmosx $
|
6
6
|
|
7
|
-
require "
|
8
|
-
require "
|
7
|
+
require "nitro/utils/cache"
|
8
|
+
require "nitro/server/filters"
|
9
9
|
|
10
10
|
module N
|
11
11
|
|
@@ -0,0 +1,200 @@
|
|
1
|
+
# code:
|
2
|
+
# * George Moschovitis <gm@navel.gr>
|
3
|
+
#
|
4
|
+
# (c) 2004 Navel, all rights reserved.
|
5
|
+
# $Id: render.rb 152 2004-11-13 20:02:35Z gmosx $
|
6
|
+
|
7
|
+
module N
|
8
|
+
|
9
|
+
# = RenderUtils
|
10
|
+
#
|
11
|
+
# Various render related utilities.
|
12
|
+
#
|
13
|
+
module RenderUtils
|
14
|
+
|
15
|
+
# Split the path to base, render_class and method.
|
16
|
+
#
|
17
|
+
# Examples:
|
18
|
+
#
|
19
|
+
# / -> nil, index, nil
|
20
|
+
# /add_user -> nil, add_user, nil
|
21
|
+
# /add_user?user=gmosx -> nil, add_user, user=gmosx
|
22
|
+
# /blog/new_entry -> blog, new_entry
|
23
|
+
# /blog -> blog, index, nil
|
24
|
+
#
|
25
|
+
def self.split_path(path)
|
26
|
+
parts = path.split('/')
|
27
|
+
|
28
|
+
case parts.size
|
29
|
+
when 0
|
30
|
+
base = ''
|
31
|
+
render_class = $services[:index]
|
32
|
+
meth = 'index'
|
33
|
+
when 2
|
34
|
+
if render_class = $services[parts[1]]
|
35
|
+
base = parts[1]
|
36
|
+
meth = 'index'
|
37
|
+
else
|
38
|
+
base = ''
|
39
|
+
render_class = $services[:index]
|
40
|
+
meth = parts[1]
|
41
|
+
end
|
42
|
+
when 3
|
43
|
+
base = parts[1]
|
44
|
+
render_class = $services[parts[1]]
|
45
|
+
meth = parts[2]
|
46
|
+
end
|
47
|
+
|
48
|
+
return base, render_class, meth
|
49
|
+
end
|
50
|
+
|
51
|
+
# Transform an xhtml file to ruby rendering code.
|
52
|
+
#
|
53
|
+
def self.transform_xhtml(path)
|
54
|
+
$log.debug "Transforming '#{path}'" if $DBG
|
55
|
+
|
56
|
+
text = File.read(path)
|
57
|
+
hash, text = $shader.process(path, text)
|
58
|
+
return text
|
59
|
+
end
|
60
|
+
|
61
|
+
# Compile a rendering method.
|
62
|
+
#
|
63
|
+
def self.compile_method(klass, base, meth)
|
64
|
+
$log.debug "Compiling '#{klass}:#{meth}'" if $DBG
|
65
|
+
|
66
|
+
xhtml_path = "#$root_dir/#{base}/#{meth}.xhtml".squeeze('/')
|
67
|
+
|
68
|
+
code = %{
|
69
|
+
def __#{meth}
|
70
|
+
@out ||= ''
|
71
|
+
}
|
72
|
+
|
73
|
+
if klass.instance_methods.include?(meth)
|
74
|
+
code << %{
|
75
|
+
#{meth}();
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
if klass.instance_methods.include?("#{meth}_xhtml")
|
80
|
+
code << %{
|
81
|
+
#{meth}_xhtml();
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
if xhtml_exists = File.exist?(xhtml_path)
|
86
|
+
code << %{
|
87
|
+
__#{meth}_xhtml();
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
code << %{
|
92
|
+
redirect_referer if @out.empty?
|
93
|
+
end
|
94
|
+
}
|
95
|
+
|
96
|
+
if xhtml_exists = File.exist?(xhtml_path)
|
97
|
+
code << %{
|
98
|
+
def __#{meth}_xhtml
|
99
|
+
#{transform_xhtml(xhtml_path)}
|
100
|
+
end
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
klass.class_eval(code)
|
105
|
+
|
106
|
+
return "__#{meth}"
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
# = Render
|
112
|
+
#
|
113
|
+
module Render
|
114
|
+
# The outbut buffer. The output of a script/action is accumulated
|
115
|
+
# in this buffer.
|
116
|
+
attr :out
|
117
|
+
|
118
|
+
# The parameters of this request as Hash.
|
119
|
+
attr_accessor :params
|
120
|
+
|
121
|
+
# The request.
|
122
|
+
attr_accessor :request
|
123
|
+
|
124
|
+
# The response.
|
125
|
+
attr_accessor :response
|
126
|
+
|
127
|
+
# The session contains variables that stay alive for the full
|
128
|
+
# user session.
|
129
|
+
attr_accessor :session
|
130
|
+
|
131
|
+
def initialize(base_path = '', request = nil, response = nil, session = nil)
|
132
|
+
@base_path = base_path
|
133
|
+
@request = request
|
134
|
+
@response = response
|
135
|
+
@session = session
|
136
|
+
@params = request.query
|
137
|
+
end
|
138
|
+
|
139
|
+
# Returns the output of the rendering as string.
|
140
|
+
#
|
141
|
+
def render(path, request = nil, response = nil, session = nil)
|
142
|
+
path, query_string = path.split('?')
|
143
|
+
|
144
|
+
@request ||= request
|
145
|
+
@response ||= response
|
146
|
+
@session ||= session
|
147
|
+
|
148
|
+
@params = @request.set_query(query_string) if query_string
|
149
|
+
|
150
|
+
base, render_class, meth = $methods[path]
|
151
|
+
|
152
|
+
unless meth
|
153
|
+
base, render_class, meth = RenderUtils.split_path(path)
|
154
|
+
meth = RenderUtils.compile_method(render_class, base, meth)
|
155
|
+
$methods[path] = [base, render_class, meth] unless $reload_scripts
|
156
|
+
end
|
157
|
+
|
158
|
+
if self.class == render_class
|
159
|
+
self.send(meth)
|
160
|
+
else
|
161
|
+
r = render_class.new(base, @request, @response, @session)
|
162
|
+
r.send(meth)
|
163
|
+
@out = r.out
|
164
|
+
end
|
165
|
+
|
166
|
+
# stop the filter pipeline
|
167
|
+
return false
|
168
|
+
end
|
169
|
+
|
170
|
+
# Render the referer of this method.
|
171
|
+
#
|
172
|
+
def render_referer
|
173
|
+
render(@request.referer.gsub(/#$srv_url/, ''))
|
174
|
+
end
|
175
|
+
|
176
|
+
# Send a redirect response.
|
177
|
+
#
|
178
|
+
def redirect(url, status = 303)
|
179
|
+
begin
|
180
|
+
# url = "#$srv_url/#{url}".squeeze('/') unless url =~ /^http/
|
181
|
+
@response.status = status
|
182
|
+
@response.set_redirect(status, url)
|
183
|
+
rescue Exception, StandardError => ex
|
184
|
+
# drink it!
|
185
|
+
end
|
186
|
+
|
187
|
+
# stop the filter pipeline
|
188
|
+
return false
|
189
|
+
end
|
190
|
+
|
191
|
+
# Redirect to the referer of this method.
|
192
|
+
#
|
193
|
+
def redirect_referer(status = 303)
|
194
|
+
redirect(@request.referer, status)
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
end # module
|
200
|
+
|