Class: ActionDispatch::Journey::Formatter
- Inherits:
- 
      Object
      
        - Object
- ActionDispatch::Journey::Formatter
 
- Defined in:
- lib/action_dispatch/journey/formatter.rb
Overview
The Formatter class is used for formatting URLs. For example, parameters passed to url_for in Rails will eventually call Formatter#generate.
Defined Under Namespace
Classes: MissingRoute, RouteWithParams
Instance Attribute Summary collapse
- 
  
    
      #routes  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute routes. 
Instance Method Summary collapse
- #clear ⇒ Object
- #generate(name, options, path_parameters) ⇒ Object
- 
  
    
      #initialize(routes)  ⇒ Formatter 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Formatter. 
Constructor Details
#initialize(routes) ⇒ Formatter
Returns a new instance of Formatter.
| 13 14 15 16 | # File 'lib/action_dispatch/journey/formatter.rb', line 13 def initialize(routes) @routes = routes @cache = nil end | 
Instance Attribute Details
#routes ⇒ Object (readonly)
Returns the value of attribute routes.
| 11 12 13 | # File 'lib/action_dispatch/journey/formatter.rb', line 11 def routes @routes end | 
Instance Method Details
#clear ⇒ Object
| 97 98 99 | # File 'lib/action_dispatch/journey/formatter.rb', line 97 def clear @cache = nil end | 
#generate(name, options, path_parameters) ⇒ Object
| 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | # File 'lib/action_dispatch/journey/formatter.rb', line 59 def generate(name, , path_parameters) constraints = path_parameters.merge() missing_keys = nil match_route(name, constraints) do |route| parameterized_parts = extract_parameterized_parts(route, , path_parameters) # Skip this route unless a name has been provided or it is a # standard Rails route since we can't determine whether an options # hash passed to url_for matches a Rack application or a redirect. next unless name || route.dispatcher? missing_keys = missing_keys(route, parameterized_parts) next if missing_keys && !missing_keys.empty? params = .dup.delete_if do |key, _| parameterized_parts.key?(key) || route.defaults.key?(key) end defaults = route.defaults required_parts = route.required_parts route.parts.reverse_each do |key| break if defaults[key].nil? && parameterized_parts[key].present? next if parameterized_parts[key].to_s != defaults[key].to_s break if required_parts.include?(key) parameterized_parts.delete(key) end return RouteWithParams.new(route, parameterized_parts, params) end unmatched_keys = (missing_keys || []) & constraints.keys missing_keys = (missing_keys || []) - unmatched_keys MissingRoute.new(constraints, missing_keys, unmatched_keys, routes, name) end |