Module: Mack::Routes::Urls

Included in:
Mack::Runner, Spec::Example::ExampleMethods
Defined in:
lib/mack/routing/urls.rb

Overview

This module is the repository for named_routes. See Mack::Routes::RouteMap for more information.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create_method(sym, &block) ⇒ Object

:nodoc:



71
72
73
# File 'lib/mack/routing/urls.rb', line 71

def self.create_method(sym, &block) # :nodoc:
  define_method(sym, &block)
end

Instance Method Details

#redirect_html(original_path, new_path, status) ⇒ Object

Builds a simple HTML page to be rendered when a redirect occurs. Hopefully no one sees the HTML, but in case the browser won’t do the redirect it’s nice to let people know what’s happening.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mack/routing/urls.rb', line 55

def redirect_html(original_path, new_path, status) # :nodoc:
  %{
    <!DOCTYPE HTML PUBLIC 
        "-//IETF//DTD HTML 2.0//EN"> 
    <html>
      <head> 
        <title>#{status} Found</title> 
      </head>
      <body> 
        <h1>Found</h1> 
         <p>The document has moved <a href="#{new_path}">here</a>.</p> 
      </body>
    </html>
  }
end

#url_for_pattern(url, options = {}) ⇒ Object

Takes a url pattern and merges it with the options to hopefully produce a well formed url. Query string parameters will get escaped.

Example:

url_for_pattern("/:controller/:action/:id", {:controller => :blog, :action => :show, :id => 1})
  # => "/blog/show/1
url_for_pattern("/:controller/:action/:id", {:controller => :blog, :action => :show})
  # => "/blog/show/:id"
url_for_pattern("/blog/:id", {:id => 1})
  # => "/blog/1
url_for_pattern("/blog/:id", {:id => 1, :n_id => 2})
  # => "/blog/1?n_id=2


18
19
20
21
22
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
# File 'lib/mack/routing/urls.rb', line 18

def url_for_pattern(url, options = {})
  u = url.dup
  u = "/" if url.blank?
  unused_params = []
  format = nil
  host_options = {:host => options[:host], :port => options[:port], :scheme => options[:scheme]}
  options - [:host, :port, :scheme]
  options.each_pair do |k, v|
    unless k.to_sym == :format
      if u.match(/\*#{k}/)
        vp = [v].flatten.collect {|c| Rack::Utils.escape(c.to_param)}
        if u.gsub!("*#{k}", File.join(vp)).nil?
          unused_params << "#{Rack::Utils.escape(k)}=#{vp}"
        end
      else
        vp = Rack::Utils.escape(v.to_param)
        if u.gsub!(":#{k}", vp).nil?
          unused_params << "#{Rack::Utils.escape(k)}=#{vp}"
        end
      end
    else
      format = v
    end
  end
  if format
    u << ".#{format}"
  end
  unless unused_params.empty?
    u << "?" << unused_params.sort.join("&")
  end
  File.join(build_full_host_from_options(host_options), u)
  # u
end