gitlab-org--gitlab-foss/lib/gitlab/request_endpoints.rb

43 lines
1.4 KiB
Ruby

# 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