Module: ActionDispatch::Http::URL
- Included in:
- Request
- Defined in:
- lib/action_dispatch/http/url.rb
Class Method Summary collapse
- .extract_domain(host, tld_length = @@tld_length) ⇒ Object
- .extract_subdomain(host, tld_length = @@tld_length) ⇒ Object
- .extract_subdomains(host, tld_length = @@tld_length) ⇒ Object
- .url_for(options = {}) ⇒ Object
Instance Method Summary collapse
-
#domain(tld_length = @@tld_length) ⇒ Object
Returns the domain part of a host, such as “rubyonrails.org” in “www.rubyonrails.org”.
-
#host ⇒ Object
Returns the host for this request, such as example.com.
-
#host_with_port ⇒ Object
Returns a host:port string for this request, such as “example.com” or “example.com:8080”.
-
#optional_port ⇒ Object
Returns a number port suffix like 8080 if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
-
#port ⇒ Object
Returns the port number of this request as an integer.
-
#port_string ⇒ Object
Returns a string port suffix, including colon, like “:8080” if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
-
#protocol ⇒ Object
Returns ‘https://’ if this is an SSL request and ‘http://’ otherwise.
-
#raw_host_with_port ⇒ Object
Returns the host for this request, such as “example.com”.
- #server_port ⇒ Object
-
#standard_port ⇒ Object
Returns the standard port number for this request’s protocol.
-
#standard_port? ⇒ Boolean
Returns whether this request is using the standard port.
-
#subdomain(tld_length = @@tld_length) ⇒ Object
Returns all the subdomains as a string, so
"dev.www"
would be returned for “dev.www.rubyonrails.org”. -
#subdomains(tld_length = @@tld_length) ⇒ Object
Returns all the subdomains as an array, so
["dev", "www"]
would be returned for “dev.www.rubyonrails.org”. -
#url ⇒ Object
Returns the complete URL used for this request.
Class Method Details
.extract_domain(host, tld_length = @@tld_length) ⇒ Object
8 9 10 11 |
# File 'lib/action_dispatch/http/url.rb', line 8 def extract_domain(host, tld_length = @@tld_length) return nil unless named_host?(host) host.split('.').last(1 + tld_length).join('.') end |
.extract_subdomain(host, tld_length = @@tld_length) ⇒ Object
19 20 21 |
# File 'lib/action_dispatch/http/url.rb', line 19 def extract_subdomain(host, tld_length = @@tld_length) extract_subdomains(host, tld_length).join('.') end |
.extract_subdomains(host, tld_length = @@tld_length) ⇒ Object
13 14 15 16 17 |
# File 'lib/action_dispatch/http/url.rb', line 13 def extract_subdomains(host, tld_length = @@tld_length) return [] unless named_host?(host) parts = host.split('.') parts[0..-(tld_length+2)] end |
.url_for(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/action_dispatch/http/url.rb', line 23 def url_for( = {}) unless [:host].present? || [:only_path].present? 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 [:only_path] unless [:protocol] == false rewritten_url << ([:protocol] || "http") rewritten_url << ":" unless rewritten_url.match(%r{:|//}) end rewritten_url << "//" unless rewritten_url.match("//") rewritten_url << rewrite_authentication() rewritten_url << host_or_subdomain_and_domain() rewritten_url << ":#{.delete(:port)}" if [:port] end path = .delete(:path) || '' params = [:params] || {} params.reject! {|k,v| v.to_param.nil? } if [:trailing_slash] && !path.ends_with?('/') rewritten_url << path.sub(/(\?|\z)/) { "/" + $& } else rewritten_url << path end rewritten_url << "?#{params.to_query}" unless params.empty? rewritten_url << "##{Journey::Router::Utils.escape_fragment([:anchor].to_param.to_s)}" if [:anchor] rewritten_url end |
Instance Method Details
#domain(tld_length = @@tld_length) ⇒ Object
Returns the domain part of a host, such as “rubyonrails.org” in “www.rubyonrails.org”. You can specify a different tld_length
, such as 2 to catch rubyonrails.co.uk in “www.rubyonrails.co.uk”.
157 158 159 |
# File 'lib/action_dispatch/http/url.rb', line 157 def domain(tld_length = @@tld_length) ActionDispatch::Http::URL.extract_domain(host, tld_length) end |
#host ⇒ Object
Returns the host for this request, such as example.com.
105 106 107 |
# File 'lib/action_dispatch/http/url.rb', line 105 def host raw_host_with_port.sub(/:\d+$/, '') end |
#host_with_port ⇒ Object
Returns a host:port string for this request, such as “example.com” or “example.com:8080”.
111 112 113 |
# File 'lib/action_dispatch/http/url.rb', line 111 def host_with_port "#{host}#{port_string}" end |
#optional_port ⇒ Object
Returns a number port suffix like 8080 if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
141 142 143 |
# File 'lib/action_dispatch/http/url.rb', line 141 def optional_port standard_port? ? nil : port end |
#port ⇒ Object
Returns the port number of this request as an integer.
116 117 118 119 120 121 122 123 124 |
# File 'lib/action_dispatch/http/url.rb', line 116 def port @port ||= begin if raw_host_with_port =~ /:(\d+)$/ $1.to_i else standard_port end end end |
#port_string ⇒ Object
Returns a string port suffix, including colon, like “:8080” if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
147 148 149 |
# File 'lib/action_dispatch/http/url.rb', line 147 def port_string standard_port? ? '' : ":#{port}" end |
#protocol ⇒ Object
Returns ‘https://’ if this is an SSL request and ‘http://’ otherwise.
91 92 93 |
# File 'lib/action_dispatch/http/url.rb', line 91 def protocol @protocol ||= ssl? ? 'https://' : 'http://' end |
#raw_host_with_port ⇒ Object
Returns the host for this request, such as “example.com”.
96 97 98 99 100 101 102 |
# File 'lib/action_dispatch/http/url.rb', line 96 def raw_host_with_port if forwarded = env["HTTP_X_FORWARDED_HOST"] forwarded.split(/,\s?/).last else env['HTTP_HOST'] || "#{env['SERVER_NAME'] || env['SERVER_ADDR']}:#{env['SERVER_PORT']}" end end |
#server_port ⇒ Object
151 152 153 |
# File 'lib/action_dispatch/http/url.rb', line 151 def server_port @env['SERVER_PORT'].to_i end |
#standard_port ⇒ Object
Returns the standard port number for this request’s protocol.
127 128 129 130 131 132 |
# File 'lib/action_dispatch/http/url.rb', line 127 def standard_port case protocol when 'https://' then 443 else 80 end end |
#standard_port? ⇒ Boolean
Returns whether this request is using the standard port
135 136 137 |
# File 'lib/action_dispatch/http/url.rb', line 135 def standard_port? port == standard_port end |
#subdomain(tld_length = @@tld_length) ⇒ Object
Returns all the subdomains as a string, so "dev.www"
would be returned for “dev.www.rubyonrails.org”. You can specify a different tld_length
, such as 2 to catch "www"
instead of "www.rubyonrails"
in “www.rubyonrails.co.uk”.
173 174 175 |
# File 'lib/action_dispatch/http/url.rb', line 173 def subdomain(tld_length = @@tld_length) subdomains(tld_length).join(".") end |
#subdomains(tld_length = @@tld_length) ⇒ Object
Returns all the subdomains as an array, so ["dev", "www"]
would be returned for “dev.www.rubyonrails.org”. You can specify a different tld_length
, such as 2 to catch ["www"]
instead of ["www", "rubyonrails"]
in “www.rubyonrails.co.uk”.
165 166 167 |
# File 'lib/action_dispatch/http/url.rb', line 165 def subdomains(tld_length = @@tld_length) ActionDispatch::Http::URL.extract_subdomains(host, tld_length) end |
#url ⇒ Object
Returns the complete URL used for this request.
86 87 88 |
# File 'lib/action_dispatch/http/url.rb', line 86 def url protocol + host_with_port + fullpath end |