48 lines
1.4 KiB
Ruby
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
|