route(routing_code, namespace: nil)
public
Make an entry in Rails routing file
config/routes.rb
route "root 'welcome#index'"
route "root 'admin#index'", namespace: :admin
# File railties/lib/rails/generators/actions.rb, line 281
def route(routing_code, namespace: nil)
routing_code = Array(namespace).reverse.reduce(routing_code) do |code, ns|
"namespace :#{ns} do\n#{optimize_indentation(code, 2)}end"
end
log :route, routing_code
after_pattern = Array(namespace).each_with_index.reverse_each.reduce(nil) do |pattern, (ns, i)|
margin = "\\#{i + 1}[ ]{2}"
"(?:(?:^[ ]*\n|^#{margin}.*\n)*?^(#{margin})namespace :#{ns} do\n#{pattern})?"
end.then do |pattern|
/^([ ]*).+\.routes\.draw do[ ]*\n#{pattern}/
end
in_root do
if existing = match_file("config/routes.rb", after_pattern)
base_indent, *, prev_indent = existing.captures.compact.map(&:length)
routing_code = optimize_indentation(routing_code, base_indent + 2).lines.grep_v(/^[ ]{,#{prev_indent}}\S/).join
end
inject_into_file "config/routes.rb", routing_code, after: after_pattern, verbose: false, force: false
end
end