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
[View source]
103 104 105 |
# File 'lib/action_dispatch/journey/formatter.rb', line 103 def clear @cache = nil end |
#generate(name, options, path_parameters) ⇒ Object
[View source]
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 96 97 98 99 100 101 |
# File 'lib/action_dispatch/journey/formatter.rb', line 59 def generate(name, , path_parameters) = .dup path_params = .delete(:path_params) || {} = path_params.merge() 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 = .delete_if do |key, _| # top-level params' normal behavior of generating query_params # should be preserved even if the same key is also a bind_param parameterized_parts.key?(key) || route.defaults.key?(key) || (path_params.key?(key) && !.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 |