Permalink
Browse files

ActionDispatch::HTTP::Url#url_for refactor method

Separated right side url generation(before query string)
from left side url generation(after query string)
  • Loading branch information...
bogdan committed Apr 24, 2012
1 parent afcae34 commit 0129499ec7508d4d9f06ffbc63838d529b6784b5
Showing with 26 additions and 20 deletions.
  1. +26 −20 actionpack/lib/action_dispatch/http/url.rb
@@ -23,22 +23,6 @@ def extract_subdomain(host, tld_length = @@tld_length)
end
def url_for(options = {})
- if options[:host].blank? && options[:only_path].blank?
- raise ArgumentError, 'Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true'
- end
-
- rewritten_url = ""
-
- unless options[:only_path]
- unless options[:protocol] == false
- rewritten_url << (options[:protocol] || "http")
- rewritten_url << ":" unless rewritten_url.match(%r{:|//})
- end
- rewritten_url << "//" unless rewritten_url.match("//")
- rewritten_url << rewrite_authentication(options)
- rewritten_url << host_or_subdomain_and_domain(options)
- rewritten_url << ":#{options.delete(:port)}" if options[:port]
- end
path = ""
path << options.delete(:script_name).to_s.chomp("/")
@@ -47,14 +31,36 @@ def url_for(options = {})
params = options[:params] || {}
params.reject! {|k,v| v.to_param.nil? }
- rewritten_url << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path)
- rewritten_url << "?#{params.to_query}" unless params.empty?
- rewritten_url << "##{Journey::Router::Utils.escape_fragment(options[:anchor].to_param.to_s)}" if options[:anchor]
- rewritten_url
+ result = build_host_url(options)
+
+ result << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path)
+ result << "?#{params.to_query}" unless params.empty?
+ result << "##{Journey::Router::Utils.escape_fragment(options[:anchor].to_param.to_s)}" if options[:anchor]
+ result
end
private
+ def build_host_url(options)
+ if options[:host].blank? && options[:only_path].blank?
+ raise ArgumentError, 'Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true'
+ end
+
+ result = ""
+
+ unless options[:only_path]
+ unless options[:protocol] == false
+ result << (options[:protocol] || "http")
+ result << ":" unless result.match(%r{:|//})
+ end
+ result << "//" unless result.match("//")
+ result << rewrite_authentication(options)
+ result << host_or_subdomain_and_domain(options)
+ result << ":#{options.delete(:port)}" if options[:port]
+ end
+ result
+ end
+
def named_host?(host)
host && IP_HOST_REGEXP !~ host
end

4 comments on commit 0129499

@pechorin

This comment has been minimized.

Show comment Hide comment
@pechorin

pechorin Apr 25, 2012

you forgot about empty line at the begin of method -

or it is okay?

you forgot about empty line at the begin of method -

or it is okay?

@bogdan

This comment has been minimized.

Show comment Hide comment
@bogdan

bogdan Apr 25, 2012

Contributor

Don't think it's something to care about.

Contributor

bogdan replied Apr 25, 2012

Don't think it's something to care about.

@pechorin

This comment has been minimized.

Show comment Hide comment
@pechorin

pechorin Apr 25, 2012

yeah :) it's okay to ignore ruby style guides in rails core

yeah :) it's okay to ignore ruby style guides in rails core

@josevalim

This comment has been minimized.

Show comment Hide comment
@josevalim

josevalim Apr 25, 2012

Contributor
Contributor

josevalim replied Apr 25, 2012

Please sign in to comment.