match(path, *rest)
public
match
‘path’ => ‘controller#action’ match
‘path’, to: ‘controller#action’ match
‘path’, ‘otherpath’, on: :member, via: :get
Show source
def match(path, *rest)
if rest.empty? && Hash === path
options = path
path, to = options.find { |name, _value| name.is_a?(String) }
case to
when Symbol
options[:action] = to
when String
if to =~ /#/
options[:to] = to
else
options[:controller] = to
end
else
options[:to] = to
end
options.delete(path)
paths = [path]
else
options = rest.pop || {}
paths = [path] + rest
end
options[:anchor] = true unless options.key?(:anchor)
if options[:on] && !VALID_ON_OPTIONS.include?(options[:on])
raise ArgumentError, "Unknown scope #{on.inspect} given to :on"
end
if @scope[:controller] && @scope[:action]
options[:to] ||= "#{@scope[:controller]}##{@scope[:action]}"
end
paths.each do |_path|
route_options = options.dup
route_options[:path] ||= _path if _path.is_a?(String)
path_without_format = _path.to_s.sub(/\(\.:format\)$/, '')
if using_match_shorthand?(path_without_format, route_options)
route_options[:to] ||= path_without_format.gsub(%{^/}, "").sub(%{/([^/]*)$}, '#\1')
route_options[:to].tr!("-", "_")
end
decomposed_match(_path, route_options)
end
self
end