2020-07-07 05:08:57 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module ClassAttributes
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
class_methods do
|
|
|
|
protected
|
|
|
|
|
|
|
|
# Returns an attribute declared on this class or its parent class.
|
|
|
|
# This approach allows declared attributes to be inherited by
|
|
|
|
# child classes.
|
|
|
|
def get_class_attribute(name)
|
|
|
|
class_attributes[name] || superclass_attributes(name)
|
|
|
|
end
|
|
|
|
|
2021-04-28 08:10:09 -04:00
|
|
|
def set_class_attribute(name, value)
|
|
|
|
class_attributes[name] = value
|
|
|
|
|
|
|
|
after_hooks.each(&:call)
|
|
|
|
|
|
|
|
value
|
|
|
|
end
|
|
|
|
|
|
|
|
def after_set_class_attribute(&block)
|
|
|
|
after_hooks << block
|
|
|
|
end
|
|
|
|
|
2020-07-07 05:08:57 -04:00
|
|
|
private
|
|
|
|
|
|
|
|
def class_attributes
|
|
|
|
@class_attributes ||= {}
|
|
|
|
end
|
|
|
|
|
|
|
|
def superclass_attributes(name)
|
|
|
|
return unless superclass.include? Gitlab::ClassAttributes
|
|
|
|
|
|
|
|
superclass.get_class_attribute(name)
|
|
|
|
end
|
2021-04-28 08:10:09 -04:00
|
|
|
|
|
|
|
def after_hooks
|
|
|
|
@after_hooks ||= []
|
|
|
|
end
|
2020-07-07 05:08:57 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|