Module: ActionDispatch::Http::URL

Included in:
Request
Defined in:
lib/action_dispatch/http/url.rb

Class Method Summary collapse

Instance Method Summary collapse

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(options = {})
  unless options[:host].present? || options[: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 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 = options.delete(:path) || ''

  params = options[:params] || {}
  params.reject! {|k,v| v.to_param.nil? }

  if options[: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(options[:anchor].to_param.to_s)}" if options[: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

#hostObject

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_portObject

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_portObject

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

#portObject

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_stringObject

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

#protocolObject

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_portObject

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_portObject



151
152
153
# File 'lib/action_dispatch/http/url.rb', line 151

def server_port
  @env['SERVER_PORT'].to_i
end

#standard_portObject

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

Returns:

  • (Boolean)


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

#urlObject

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