summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2011-09-11 00:47:01 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2011-09-11 01:03:24 +0200
commitcfe72087d3179c2e80f923f9061d9450714a1547 (patch)
treedfdf53ce9e578713bf7a1db8d9c304a581fa704a /lib
parent889cdf7749217c0425e2984cf13d7791ad79cb48 (diff)
downloadzorglub-cfe72087d3179c2e80f923f9061d9450714a1547.zip
zorglub-cfe72087d3179c2e80f923f9061d9450714a1547.tar.gz
implement Node#redirect + add tests in sample.ru
Diffstat (limited to 'lib')
-rw-r--r--lib/zorglub/node.rb28
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/zorglub/node.rb b/lib/zorglub/node.rb
index 357b97f..a161cb6 100644
--- a/lib/zorglub/node.rb
+++ b/lib/zorglub/node.rb
@@ -55,13 +55,27 @@ module Zorglub
end
#
def realize
- @content = self.send @action[:method], *@action[:args]
- e, v, l = Config.engine_proc(@action[:engine]), view, layout
- # TODO compile and cache
- @content = e.call v, self if e and File.exists? v
- @content = e.call l, self if e and File.exists? l
- response.write @content
- response.finish
+ catch(:stop_realize) {
+ @content = self.send @action[:method], *@action[:args]
+ e, v, l = Config.engine_proc(@action[:engine]), view, layout
+ # TODO compile and cache
+ @content = e.call v, self if e and File.exists? v
+ @content = e.call l, self if e and File.exists? l
+ response.write @content
+ response.finish
+ response
+ }
+ end
+ #
+ def redirect target, options={}, &block
+ status = options[:status] || 302
+ body = options[:body] || redirect_body(target)
+ header = response.header.merge('Location' => target.to_s)
+ throw :stop_realize, Rack::Response.new(body, status, header, &block)
+ end
+ #
+ def redirect_body target
+ "You are being redirected, please follow this link to: <a href='#{target}'>#{target}</a>!"
end
#
def engine engine=nil