debian-mirror-gitlab/lib/gitlab/class_attributes.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

47 lines
967 B
Ruby
Raw Normal View History

2020-07-28 23:09:34 +05:30
# 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-06-08 01:23:25 +05:30
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-28 23:09:34 +05:30
private
def class_attributes
@class_attributes ||= {}
end
def superclass_attributes(name)
return unless superclass.include? Gitlab::ClassAttributes
superclass.get_class_attribute(name)
end
2021-06-08 01:23:25 +05:30
def after_hooks
@after_hooks ||= []
end
2020-07-28 23:09:34 +05:30
end
end
end