diff options
Diffstat (limited to 'lib/gitlab/endpoint_attributes.rb')
-rw-r--r-- | lib/gitlab/endpoint_attributes.rb | 48 |
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 |