Changeset 2451 for lang/ruby/ssb

Show
Ignore:
Timestamp:
12/05/07 01:37:39 (13 months ago)
Author:
lchin
Message:

lang/ruby/ssb: Refactored ssb response processing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ssb/trunk/libs/ssb.rb

    r2404 r2451  
    4545    end 
    4646 
    47     def process_response(res, response) 
    48       response_header = nil 
    49       source = page = 'N/A' 
    50  
    51       if response.nil? 
    52         page = 'response is nil' 
     47    # Does this rely on side effects? 
     48    def process_response(cgi_response, ssb_response) 
     49      case 
     50      when ssb_response.nil? 
     51        ['response is nil', 'N/A'] 
     52      when ssb_response.instance_of?(String) 
     53        string_response(cgi_response, ssb_response) 
     54      when ssb_response.code == '302' || ssb_response.code == '301' 
     55        redirect_response(cgi_response, ssb_response) 
    5356      else 
    54         if response.class == String 
    55           res.header['Content-Type'] = 'text/html; charset=utf-8' 
    56           page = NKF.nkf('-w', response.dup.untaint) 
    57         elsif response.code == '302' || response.code == '301' 
    58           response_header = response.header 
    59           res.header['Content-Type'] = 'text/html; charset=utf-8' 
    60           renderable = true 
    61           redirect = response.header['location'].to_s.dup.untaint 
    62           page = "<html><head></head><body><p style=\"background-color: #f0f000; color: navy\">[SSB]リダイレクトされました</p>" 
    63           page += "<p style=\"font-size:x-small\">#{redirect}</p><a href=\"#{redirect}\">リダイレクト先へ</a></body></html>" 
    64  
    65           source = CGI.escapeHTML(page.dup) 
    66  
    67           #cgi.header('location'=>'./?q='+CGI.escape(response.header['location']).to_s) 
    68           #exit 
    69         else 
    70           response_header = response.header 
    71           renderable = true 
    72           content_type = 'text/html' 
    73           if response.header['content-type'].nil? 
    74             content_type = 'text/plain' 
    75           elsif response.header['content-type'].include?('text/') 
    76             content_type = 'text/html' 
    77           elsif response.header['content-type'].include?('application/xhtml') 
    78             content_type = 'text/html' 
    79           else 
    80             renderable = false 
    81             content_type = response.header['content-type'] 
    82           end 
    83  
    84           unless renderable 
    85             res.header['Content-Type'] = content_type 
    86             res.body = response.body 
    87             return 
    88           else 
    89             res.header['Content-Type'] = "#{content_type}; charset=utf-8" 
    90           end 
    91  
    92           page = response.body.dup.untaint 
    93           source = CGI.escapeHTML(NKF::nkf('-w', page)) 
    94         end 
    95       end 
    96  
    97       [page,source] 
    98     end 
    99  
    100     def run(req, res) 
     57        ok_response(cgi_response, ssb_response) 
     58      end 
     59    end 
     60 
     61    def ok_response(cgi_response, ssb_response) 
     62      raw_content_type = ssb_response.header['content-type'] 
     63      case 
     64      when raw_content_type.nil? 
     65        cgi_response.header['Content-Type'] = "text/plain; charset=utf-8" 
     66      when raw_content_type.include?('text/') 
     67        cgi_response.header['Content-Type'] = "text/html; charset=utf-8" 
     68      when raw_content_type.include?('application/xhtml') 
     69        cgi_response.header['Content-Type'] = "text/html; charset=utf-8" 
     70      else 
     71        cgi_response.header['Content-Type'] = raw_content_type 
     72        cgi_response.body = ssb_response.body 
     73        return 
     74      end 
     75      page = ssb_response.body.dup.untaint 
     76      [page, CGI.escapeHTML(NKF::nkf('-w', page))] 
     77    end 
     78 
     79    def redirect_response(cgi_response, ssb_response) 
     80      cgi_response.header['Content-Type'] = 'text/html; charset=utf-8' 
     81      redirect = ssb_response.header['location'].to_s.dup.untaint 
     82      page = "<html><head></head><body><p style=\"background-color: #f0f000; color: navy\">[SSB]リダイレクトされました</p>" 
     83      page += "<p style=\"font-size:x-small\">#{redirect}</p><a href=\"#{redirect}\">リダイレクト先へ</a></body></html>" 
     84      source = CGI.escapeHTML(page.dup) 
     85      [page, source] 
     86    end 
     87 
     88    def string_response(cgi_response, ssb_response) 
     89      cgi_response.header['Content-Type'] = 'text/html; charset=utf-8' 
     90      [NKF.nkf('-w', ssb_response.dup.untaint), 'N/A'] 
     91    end 
     92 
     93    def run(cgi_request, cgi_response) 
    10194      # リクエストの生成 
    102       @ssb_uri = 'http://' + req.host + File.basename(req.script_name) + '/' 
    103       @request = SSB::Request.build_request(req) 
     95      @ssb_uri = 'http://' + cgi_request.host + File.basename(cgi_request.script_name) + '/' 
     96      @request = SSB::Request.build_request(cgi_request) 
    10497 
    10598      # ログ 
     
    118111      @time_stamp.stamp(:request_finish) 
    119112 
    120       page,source = process_response(res, response) 
    121       if res.body != "" 
     113      page,source = process_response(cgi_response, response) 
     114      if cgi_response.body != "" 
    122115        # レスポンスをまんま返しちゃったときとかはもうここで終わり。 
    123116        return 
     
    132125                      page, 
    133126                      source, 
    134                       res) 
     127                      cgi_response) 
    135128    end 
    136129