Module: Aidp::CoreExt::ClassAttribute

Defined in:
lib/aidp/core_ext/class_attribute.rb

Instance Method Summary collapse

Instance Method Details

#class_attribute(*attrs) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/aidp/core_ext/class_attribute.rb', line 6

def class_attribute(*attrs)
  attrs.each do |name|
    # Define class instance variable
    class_eval <<-RUBY, __FILE__, __LINE__ + 1
      @#{name} = nil

      def self.#{name}
        return @#{name} if defined?(@#{name})
        return superclass.#{name} if superclass.respond_to?(:#{name})
        nil
      end

      def self.#{name}=(val)
        @#{name} = val
      end

      def #{name}
        self.class.#{name}
      end

      def #{name}=(val)
        raise "#{name} is a class attribute, cannot be set on instance"
      end
    RUBY
  end
end