# frozen_string_literal: true module Gitlab module RequestEndpoints class << self def all_api_endpoints # This compile does not do anything if the routes were already built # but if they weren't, the routes will be drawn and available for the rest of # application. API::API.compile! API::API.reset_routes! API::API.routes.select { |route| route.app.options[:for] < API::Base } end def all_controller_actions # This will return tuples of all controller actions defined in the routes # Only for controllers inheriting ApplicationController # Excluding controllers from gems (OAuth, Sidekiq) Rails.application.routes.routes.filter_map do |route| route_info = route.required_defaults.presence next unless route_info next if route_info[:controller].blank? || route_info[:action].blank? controller = constantize_controller(route_info[:controller]) next unless controller&.include?(::Gitlab::EndpointAttributes) next if controller == ApplicationController next if controller == Devise::UnlocksController [controller, route_info[:action]] end end private def constantize_controller(name) "#{name.camelize}Controller".constantize rescue NameError nil # some controllers, like the omniauth ones are dynamic end end end end