Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/request_endpoints.rb')
-rw-r--r--lib/gitlab/request_endpoints.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/gitlab/request_endpoints.rb b/lib/gitlab/request_endpoints.rb
new file mode 100644
index 00000000000..157c0f91e65
--- /dev/null
+++ b/lib/gitlab/request_endpoints.rb
@@ -0,0 +1,41 @@
+# 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.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