diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2011-09-11 00:47:01 +0200 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2011-09-11 01:03:24 +0200 | 
| commit | cfe72087d3179c2e80f923f9061d9450714a1547 (patch) | |
| tree | dfdf53ce9e578713bf7a1db8d9c304a581fa704a | |
| parent | 889cdf7749217c0425e2984cf13d7791ad79cb48 (diff) | |
| download | zorglub-cfe72087d3179c2e80f923f9061d9450714a1547.zip zorglub-cfe72087d3179c2e80f923f9061d9450714a1547.tar.gz  | |
implement Node#redirect + add tests in sample.ru
| -rw-r--r-- | examples/sample.ru | 7 | ||||
| -rw-r--r-- | lib/zorglub/node.rb | 28 | 
2 files changed, 27 insertions, 8 deletions
diff --git a/examples/sample.ru b/examples/sample.ru index 5692ef5..00d1b7a 100644 --- a/examples/sample.ru +++ b/examples/sample.ru @@ -42,6 +42,10 @@ class Node1 < Zorglub::Node          "<b>should never be seeen</b>"      end      # +    def jump *args +        redirect r(:index,1,2,3) +    end +    #  end  #  APP = Zorglub::App.new do @@ -106,7 +110,7 @@ class Node0 < Zorglub::Node      #      def index          html = "<html><body><ul>" -        html << "<li><a href=\"#{Node1.r('index','a',2,'c')}\">Node1</a> engine, layout, view tests</li>" +        html << "<li><a href=\"#{Node1.r('index','a',2,'c')}\">Node1</a> engine, layout, view, redirect tests</li>"          html << "<li><a href=\"#{Node2.r}\">Node2</a> css helper tests</li>"          html << "<li><a href=\"#{Node3.r}\">Node3</a> session test</li>"          html << "</ul></body></html>" @@ -119,6 +123,7 @@ Node1::LINKS= [              [Node1.r('index','arg1','arg2','arg3'),'index'],              [Node1.r('meth0'),'meth0'],              [Node1.r('meth1','one','two'),'meth1 with args'], +            [Node1.r('jump','one','two'),'test redirect'],              [Node0.r,'back'],  ]  # 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  | 
