31 lines
		
	
	
		
			680 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			680 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
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def class_attributes
 | |
|         @class_attributes ||= {}
 | |
|       end
 | |
| 
 | |
|       def superclass_attributes(name)
 | |
|         return unless superclass.include? Gitlab::ClassAttributes
 | |
| 
 | |
|         superclass.get_class_attribute(name)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |