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/endpoint_attributes.rb')
-rw-r--r--lib/gitlab/endpoint_attributes.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/gitlab/endpoint_attributes.rb b/lib/gitlab/endpoint_attributes.rb
new file mode 100644
index 00000000000..2455e5e599f
--- /dev/null
+++ b/lib/gitlab/endpoint_attributes.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module EndpointAttributes
+ extend ActiveSupport::Concern
+ include Gitlab::ClassAttributes
+
+ DEFAULT_URGENCY = Config::REQUEST_URGENCIES.fetch(:default)
+
+ class_methods do
+ def feature_category(category, actions = [])
+ endpoint_attributes.set(actions, feature_category: category)
+ end
+
+ def feature_category_for_action(action)
+ category = endpoint_attributes.attribute_for_action(action, :feature_category)
+ category || superclass_feature_category_for_action(action)
+ end
+
+ def urgency(urgency_name, actions = [])
+ endpoint_attributes.set(actions, urgency: urgency_name)
+ end
+
+ def urgency_for_action(action)
+ urgency = endpoint_attributes.attribute_for_action(action, :urgency)
+ urgency || superclass_urgency_for_action(action) || DEFAULT_URGENCY
+ end
+
+ private
+
+ def endpoint_attributes
+ class_attributes[:endpoint_attributes_config] ||= Config.new
+ end
+
+ def superclass_feature_category_for_action(action)
+ return unless superclass.respond_to?(:feature_category_for_action)
+
+ superclass.feature_category_for_action(action)
+ end
+
+ def superclass_urgency_for_action(action)
+ return unless superclass.respond_to?(:urgency_for_action)
+
+ superclass.urgency_for_action(action)
+ end
+ end
+ end
+end