Class: Rails::Application::RouteInspector
- Defined in:
- railties/lib/rails/application/route_inspector.rb
Overview
This class is just used for displaying route information when someone executes ‘rake routes`. People should not use this class.
Instance Method Summary collapse
- #collect_engine_routes(name, rack_app) ⇒ Object
- #collect_routes(routes) ⇒ Object
- #discover_rack_app(app) ⇒ Object
- #format(all_routes, filter = nil) ⇒ Object
- #formatted_routes(routes) ⇒ Object
- #formatted_routes_for_engines ⇒ Object
-
#initialize ⇒ RouteInspector
constructor
A new instance of RouteInspector.
Constructor Details
#initialize ⇒ RouteInspector
Returns a new instance of RouteInspector.
7 8 9 |
# File 'railties/lib/rails/application/route_inspector.rb', line 7 def initialize @engines = ActiveSupport::OrderedHash.new end |
Instance Method Details
#collect_engine_routes(name, rack_app) ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'railties/lib/rails/application/route_inspector.rb', line 48 def collect_engine_routes(name, rack_app) return unless rack_app && rack_app.respond_to?(:routes) return if @engines[name] routes = rack_app.routes if routes.is_a?(ActionDispatch::Routing::RouteSet) @engines[name] = collect_routes(routes.routes) end end |
#collect_routes(routes) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'railties/lib/rails/application/route_inspector.rb', line 22 def collect_routes(routes) routes = routes.collect do |route| route_reqs = route.requirements rack_app = discover_rack_app(route.app) controller = route_reqs[:controller] || ':controller' action = route_reqs[:action] || ':action' endpoint = rack_app ? rack_app.inspect : "#{controller}##{action}" constraints = route_reqs.except(:controller, :action) reqs = endpoint reqs += " #{constraints.inspect}" unless constraints.empty? verb = route.verb.source.gsub(/[$^]/, '') collect_engine_routes(reqs, rack_app) {:name => route.name.to_s, :verb => verb, :path => route.path.spec.to_s, :reqs => reqs } end # Skip the route if it's internal info route routes.reject { |r| r[:path] =~ %r{/rails/info/properties|^#{Rails.application.config.assets.prefix}} } end |
#discover_rack_app(app) ⇒ Object
74 75 76 77 78 79 80 81 |
# File 'railties/lib/rails/application/route_inspector.rb', line 74 def discover_rack_app(app) class_name = app.class.name.to_s if class_name == "ActionDispatch::Routing::Mapper::Constraints" discover_rack_app(app.app) elsif class_name !~ /^ActionDispatch::Routing/ app end end |
#format(all_routes, filter = nil) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'railties/lib/rails/application/route_inspector.rb', line 11 def format all_routes, filter = nil if filter all_routes = all_routes.select{ |route| route.defaults[:controller] == filter } end routes = collect_routes(all_routes) formatted_routes(routes) + formatted_routes_for_engines end |
#formatted_routes(routes) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'railties/lib/rails/application/route_inspector.rb', line 64 def formatted_routes(routes) name_width = routes.map{ |r| r[:name].length }.max verb_width = routes.map{ |r| r[:verb].length }.max path_width = routes.map{ |r| r[:path].length }.max routes.map do |r| "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs]}" end end |
#formatted_routes_for_engines ⇒ Object
58 59 60 61 62 |
# File 'railties/lib/rails/application/route_inspector.rb', line 58 def formatted_routes_for_engines @engines.map do |name, routes| ["\nRoutes for #{name}:"] + formatted_routes(routes) end.flatten end |