diff options
Diffstat (limited to 'railties/lib/rails/info_controller.rb')
-rw-r--r-- | railties/lib/rails/info_controller.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/railties/lib/rails/info_controller.rb b/railties/lib/rails/info_controller.rb new file mode 100644 index 0000000000..14459623ac --- /dev/null +++ b/railties/lib/rails/info_controller.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +require "rails/application_controller" +require "action_dispatch/routing/inspector" + +class Rails::InfoController < Rails::ApplicationController # :nodoc: + prepend_view_path ActionDispatch::DebugView::RESCUES_TEMPLATE_PATH + layout -> { request.xhr? ? false : "application" } + + before_action :require_local! + + def index + redirect_to action: :routes + end + + def properties + respond_to do |format| + format.html do + @info = Rails::Info.to_html + @page_title = "Properties" + end + + format.json do + render json: Rails::Info.to_json + end + end + end + + def routes + if path = params[:path] + path = URI.parser.escape path + normalized_path = with_leading_slash path + render json: { + exact: match_route { |it| it.match normalized_path }, + fuzzy: match_route { |it| it.spec.to_s.match path } + } + else + @routes_inspector = ActionDispatch::Routing::RoutesInspector.new(_routes.routes) + @page_title = "Routes" + end + end + + private + + def match_route + _routes.routes.select { |route| + yield route.path + }.map { |route| route.path.spec.to_s } + end + + def with_leading_slash(path) + ("/" + path).squeeze("/") + end +end |