Module: Umlaut::UrlGeneration

Included in:
Helper
Defined in:
app/helpers/umlaut/url_generation.rb

Overview

A Rails view helper module, which over-rides #url_for and some other rails url-generating methods, so that they can be forced to generate absolute URLs if a controller iVar is set to say so.

This is used by our partial HTML api responses, so make sure html snippets have absolute URLs in them.

Instance Method Summary collapse

Instance Method Details

#path_to_image(source) ⇒ Object Also known as: image_path

over-ride path_to_image to generate complete urls with hostname and everything if @generate_url_with_host is set. This makes image_tag generate src with full url with host. See #url_for



28
29
30
31
32
33
34
35
# File 'app/helpers/umlaut/url_generation.rb', line 28

def path_to_image(source)
  path = super(source)
  if @generate_urls_with_host
    protocol =  request.protocol()
    path = protocol + request.host_with_port() + path
  end
  return path
end

#path_to_javascript(*args) ⇒ Object



51
52
53
54
55
56
57
# File 'app/helpers/umlaut/url_generation.rb', line 51

def path_to_javascript(*args)
  path = super
  if @generate_urls_with_host    
    path = request.protocol() + request.host_with_port() + path
  end
  return path
end

#path_to_stylesheet(*args) ⇒ Object

We want stylesheets and javascripts to do the exact same thing, magic of polymorphous super() makes it work:



43
44
45
46
47
48
49
# File 'app/helpers/umlaut/url_generation.rb', line 43

def path_to_stylesheet(*args)
  path = super
  if @generate_urls_with_host    
    path = request.protocol() + request.host_with_port() + path
  end
  return path
end

#url_for(*arguments) ⇒ Object

Over-ride to allow default forcing of urls with hostnames. This is neccesary for our partial_html_sections service to work properly. Just set @generate_url_with_host = true in your controller, and urls will be generated with hostnames for the remainder of that action.



15
16
17
18
19
20
21
22
23
# File 'app/helpers/umlaut/url_generation.rb', line 15

def url_for(*arguments)
  url = super
  if @generate_urls_with_host && url.starts_with?("/")
    #regex take root url and get just scheme/port part, no path. 
    # the path we want is in our own url we will add on. 
    url = root_url.gsub(/\A(.*\/\/[^\/]+)\/.*\Z/, '\1') + url
  end
  return url
end