diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-09-09 18:50:32 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-09-09 18:50:32 -0700 |
commit | 7bc6a0098b4799ac82bfa84ffe171c3d67b87551 (patch) | |
tree | 8044cb896e7654e0546a1e079b1b85c3d7c49df6 /railties/lib/rails/application | |
parent | 06e400eef2672a918f357a3294ba679bf5c5a933 (diff) | |
download | rails-7bc6a0098b4799ac82bfa84ffe171c3d67b87551.tar.gz rails-7bc6a0098b4799ac82bfa84ffe171c3d67b87551.tar.bz2 rails-7bc6a0098b4799ac82bfa84ffe171c3d67b87551.zip |
move route inspecting to an object so that we can more easily test it
Diffstat (limited to 'railties/lib/rails/application')
-rw-r--r-- | railties/lib/rails/application/route_inspector.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/railties/lib/rails/application/route_inspector.rb b/railties/lib/rails/application/route_inspector.rb new file mode 100644 index 0000000000..15c6d035e5 --- /dev/null +++ b/railties/lib/rails/application/route_inspector.rb @@ -0,0 +1,42 @@ +module Rails + class Application + ## + # This class is just used for displaying route information when someone + # executes `rake routes`. People should not use this class. + class RouteInspector # :nodoc: + def format all_routes, filter = nil + if filter + all_routes = all_routes.select{ |route| route.defaults[:controller] == filter } + end + + routes = all_routes.collect do |route| + + reqs = route.requirements.dup + rack_app = route.app unless route.app.class.name.to_s =~ /^ActionDispatch::Routing/ + + endpoint = rack_app ? rack_app.inspect : "#{reqs[:controller]}##{reqs[:action]}" + constraints = reqs.except(:controller, :action) + + reqs = endpoint == '#' ? '' : endpoint + + unless constraints.empty? + reqs = reqs.empty? ? constraints.inspect : "#{reqs} #{constraints.inspect}" + end + + {:name => route.name.to_s, :verb => route.verb.to_s, :path => route.path, :reqs => reqs} + end + + # Skip the route if it's internal info route + routes.reject! { |r| r[:path] =~ %r{/rails/info/properties|^/assets} } + + 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 + end + end +end |