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

48 lines
1.4 KiB
Ruby

# 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