Module: Heredity::InheritableClassInstanceVariables::ClassMethods

Defined in:
lib/heredity/inheritable_class_instance_variables.rb

Instance Method Summary collapse

Instance Method Details

#_inheritable_class_instance_variablesObject



24
25
26
# File 'lib/heredity/inheritable_class_instance_variables.rb', line 24

def _inheritable_class_instance_variables
  @_inheritable_class_instance_variables
end

#inheritable_attributes(*args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/heredity/inheritable_class_instance_variables.rb', line 28

def inheritable_attributes(*args)
  Thread.exclusive do
    args.flatten.compact.uniq.each do |class_instance_variable|
      unless @_inheritable_class_instance_variables.include?(class_instance_variable)
        @_inheritable_class_instance_variables << class_instance_variable
      end
    end

    @_inheritable_class_instance_variables.each do |attr_symbol|
      unless self.respond_to?("#{attr_symbol}")
        class_eval %Q{
          class << self; attr_reader :#{attr_symbol}; end
        }
      end

      unless self.respond_to?("#{attr_symbol}=")
        class_eval %Q{
          class << self; attr_writer :#{attr_symbol}; end
        }
      end
    end

    @_inheritable_class_instance_variables
  end
end

#inherited(klass) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/heredity/inheritable_class_instance_variables.rb', line 54

def inherited(klass)
  super # ActiveRecord needs the inherited hook to setup fields

  Thread.exclusive do
    @_inheritable_class_instance_variables.each do |attribute|
      attr_sym = :"@#{attribute}"
      klass.instance_variable_set(attr_sym, self.instance_variable_get(attr_sym))
    end
  end
end