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

49 lines
1.4 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module EndpointAttributes
extend ActiveSupport::Concern
include Gitlab::ClassAttributes
DEFAULT_TARGET_DURATION = Config::TARGET_DURATIONS.fetch(:medium)
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 target_duration(duration, actions = [])
endpoint_attributes.set(actions, target_duration: duration)
end
def target_duration_for_action(action)
duration = endpoint_attributes.attribute_for_action(action, :target_duration)
duration || superclass_target_duration_for_action(action) || DEFAULT_TARGET_DURATION
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_target_duration_for_action(action)
return unless superclass.respond_to?(:target_duration_for_action)
superclass.target_duration_for_action(action)
end
end
end
end