merged cont.
[opensuse:yast-rest-service.git] / webservice / lib / url_rewriter.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 module ActionController
20   class UrlRewriter
21       #monkey patch for url rewriter to allow easy change of port in url_for
22       def rewrite_url(options)
23       rewritten_url = ""
24
25       unless options[:only_path]
26         rewritten_url << (options[:protocol] || @request.protocol)
27         rewritten_url << "://" unless rewritten_url.match("://")
28         rewritten_url << rewrite_authentication(options)
29         rewritten_url << (options[:host] || options.key?(:port) ? @request.host : @request.host_with_port )
30         rewritten_url << ":#{options.delete(:port)}" if options.key?(:port)
31       end
32
33       path = rewrite_path(options)
34       rewritten_url << ActionController::Base.relative_url_root.to_s unless options[:skip_relative_url_root]
35       rewritten_url << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path)
36       rewritten_url << "##{CGI.escape(options[:anchor].to_param.to_s)}" if options[:anchor]
37
38       rewritten_url
39     end
40   end
41 end