aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_dispatch/routing.rb6
-rw-r--r--actionpack/lib/action_dispatch/routing/inspector.rb75
-rw-r--r--actionpack/test/dispatch/routing/inspector_test.rb22
-rw-r--r--railties/lib/rails/commands/routes/routes_command.rb8
4 files changed, 49 insertions, 62 deletions
diff --git a/actionpack/lib/action_dispatch/routing.rb b/actionpack/lib/action_dispatch/routing.rb
index 776058d98e..5cde677051 100644
--- a/actionpack/lib/action_dispatch/routing.rb
+++ b/actionpack/lib/action_dispatch/routing.rb
@@ -243,9 +243,9 @@ module ActionDispatch
#
# rails routes
#
- # Target specific controllers by prefixing the command with <tt>-c</tt> option. Use
- # <tt>--expanded</tt> to turn on the expanded table formatting mode.
- #
+ # Target a specific controller with <tt>-c</tt>, or grep routes
+ # using <tt>-g</tt>. Useful in conjunction with <tt>--expanded</tt>
+ # which displays routes vertically.
module Routing
extend ActiveSupport::Autoload
diff --git a/actionpack/lib/action_dispatch/routing/inspector.rb b/actionpack/lib/action_dispatch/routing/inspector.rb
index 19dfb44283..7656c263a3 100644
--- a/actionpack/lib/action_dispatch/routing/inspector.rb
+++ b/actionpack/lib/action_dispatch/routing/inspector.rb
@@ -61,11 +61,11 @@ module ActionDispatch
@routes = routes
end
- def format(formatter, filter = nil)
+ def format(formatter, filter = {})
routes_to_display = filter_routes(normalize_filter(filter))
routes = collect_routes(routes_to_display)
if routes.none?
- formatter.no_routes(collect_routes(@routes))
+ formatter.no_routes(collect_routes(@routes), filter)
return formatter.result
end
@@ -83,10 +83,16 @@ module ActionDispatch
private
def normalize_filter(filter)
- if filter.is_a?(Hash) && filter[:controller]
+ if filter[:controller]
{ controller: /#{filter[:controller].downcase.sub(/_?controller\z/, '').sub('::', '/')}/ }
- elsif filter
- { controller: /#{filter}/, action: /#{filter}/, verb: /#{filter}/, name: /#{filter}/, path: /#{filter}/ }
+ elsif filter[:grep_pattern]
+ {
+ controller: /#{filter[:grep_pattern]}/,
+ action: /#{filter[:grep_pattern]}/,
+ verb: /#{filter[:grep_pattern]}/,
+ name: /#{filter[:grep_pattern]}/,
+ path: /#{filter[:grep_pattern]}/
+ }
end
end
@@ -127,7 +133,7 @@ module ActionDispatch
end
module ConsoleFormatter
- class Sheet
+ class Base
def initialize
@buffer = []
end
@@ -137,18 +143,15 @@ module ActionDispatch
end
def section_title(title)
- @buffer << "\n#{title}:"
end
def section(routes)
- @buffer << draw_section(routes)
end
def header(routes)
- @buffer << draw_header(routes)
end
- def no_routes(routes)
+ def no_routes(routes, filter)
@buffer <<
if routes.none?
<<~MESSAGE
@@ -156,11 +159,27 @@ module ActionDispatch
Please add some routes in config/routes.rb.
MESSAGE
- else
- "No routes were found for this controller"
+ elsif filter.has_key?(:controller)
+ "No routes were found for this controller."
+ elsif filter.has_key?(:grep_pattern)
+ "No routes were found for this grep pattern."
end
@buffer << "For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
end
+ end
+
+ class Sheet < Base
+ def section_title(title)
+ @buffer << "\n#{title}:"
+ end
+
+ def section(routes)
+ @buffer << draw_section(routes)
+ end
+
+ def header(routes)
+ @buffer << draw_header(routes)
+ end
private
@@ -186,46 +205,20 @@ module ActionDispatch
end
end
- class Expanded
- def initialize
- @buffer = []
- end
-
- def result
- @buffer.join("")
- end
-
+ class Expanded < Base
def section_title(title)
- @buffer << "\n#{"[ #{title} ]"}\n"
+ @buffer << "\n#{"[ #{title} ]"}"
end
def section(routes)
@buffer << draw_expanded_section(routes)
end
- def header(routes)
- @buffer
- end
-
- def no_routes(routes)
- @buffer <<
- if routes.none?
- <<~MESSAGE
- You don't have any routes defined!
-
- Please add some routes in config/routes.rb.\n
- MESSAGE
- else
- "No routes were found for this controller\n"
- end
- @buffer << "For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
- end
-
private
def draw_expanded_section(routes)
routes.map.each_with_index do |r, i|
- <<~MESSAGE
+ <<~MESSAGE.chomp
#{route_header(index: i + 1)}
Prefix | #{r[:name]}
Verb | #{r[:verb]}
diff --git a/actionpack/test/dispatch/routing/inspector_test.rb b/actionpack/test/dispatch/routing/inspector_test.rb
index 43407724aa..cf26f9fb3e 100644
--- a/actionpack/test/dispatch/routing/inspector_test.rb
+++ b/actionpack/test/dispatch/routing/inspector_test.rb
@@ -20,7 +20,7 @@ module ActionDispatch
@set = ActionDispatch::Routing::RouteSet.new
end
- def draw(options = nil, formater = ActionDispatch::Routing::ConsoleFormatter::Sheet.new, &block)
+ def draw(options = {}, formater = ActionDispatch::Routing::ConsoleFormatter::Sheet.new, &block)
@set.draw(&block)
inspector = ActionDispatch::Routing::RoutesInspector.new(@set.routes)
inspector.format(formater, options).split("\n")
@@ -306,7 +306,7 @@ module ActionDispatch
end
def test_routes_can_be_filtered
- output = draw("posts") do
+ output = draw(grep_pattern: "posts") do
resources :articles
resources :posts
end
@@ -335,7 +335,7 @@ module ActionDispatch
get "/cart", to: "cart#show"
end
- output = draw(nil, ActionDispatch::Routing::ConsoleFormatter::Expanded.new) do
+ output = draw({}, ActionDispatch::Routing::ConsoleFormatter::Expanded.new) do
get "/custom/assets", to: "custom_assets#show"
get "/custom/furnitures", to: "custom_furnitures#show"
mount engine => "/blog", :as => "blog"
@@ -368,18 +368,18 @@ module ActionDispatch
end
def test_no_routes_matched_filter_when_expanded
- output = draw("rails/dummy", ActionDispatch::Routing::ConsoleFormatter::Expanded.new) do
+ output = draw({ grep_pattern: "rails/dummy" }, ActionDispatch::Routing::ConsoleFormatter::Expanded.new) do
get "photos/:id" => "photos#show", :id => /[A-Z]\d{5}/
end
assert_equal [
- "No routes were found for this controller",
+ "No routes were found for this grep pattern.",
"For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
], output
end
def test_not_routes_when_expanded
- output = draw("rails/dummy", ActionDispatch::Routing::ConsoleFormatter::Expanded.new) {}
+ output = draw({ grep_pattern: "rails/dummy" }, ActionDispatch::Routing::ConsoleFormatter::Expanded.new) {}
assert_equal [
"You don't have any routes defined!",
@@ -391,7 +391,7 @@ module ActionDispatch
end
def test_routes_can_be_filtered_with_namespaced_controllers
- output = draw("admin/posts") do
+ output = draw(grep_pattern: "admin/posts") do
resources :articles
namespace :admin do
resources :posts
@@ -439,24 +439,24 @@ module ActionDispatch
end
assert_equal [
- "No routes were found for this controller",
+ "No routes were found for this controller.",
"For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
], output
end
def test_no_routes_matched_filter
- output = draw("rails/dummy") do
+ output = draw(grep_pattern: "rails/dummy") do
get "photos/:id" => "photos#show", :id => /[A-Z]\d{5}/
end
assert_equal [
- "No routes were found for this controller",
+ "No routes were found for this grep pattern.",
"For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
], output
end
def test_no_routes_were_defined
- output = draw("Rails::DummyController") {}
+ output = draw(grep_pattern: "Rails::DummyController") {}
assert_equal [
"You don't have any routes defined!",
diff --git a/railties/lib/rails/commands/routes/routes_command.rb b/railties/lib/rails/commands/routes/routes_command.rb
index c4f3717095..25ee65aeaa 100644
--- a/railties/lib/rails/commands/routes/routes_command.rb
+++ b/railties/lib/rails/commands/routes/routes_command.rb
@@ -36,13 +36,7 @@ module Rails
private
def routes_filter
- if options.has_key?("controller")
- { controller: options["controller"] }
- elsif options.has_key?("grep_pattern")
- options["grep_pattern"]
- else
- nil
- end
+ options.symbolize_keys.slice(:controller, :grep_pattern)
end
end
end