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

46 lines
967 B
Ruby

# 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
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
private
def class_attributes
@class_attributes ||= {}
end
def superclass_attributes(name)
return unless superclass.include? Gitlab::ClassAttributes
superclass.get_class_attribute(name)
end
def after_hooks
@after_hooks ||= []
end
end
end
end