Module: ActiveRecordDescendantAttributeAccessors

Defined in:
lib/purgatory/active_record_descendant_attribute_accessors.rb

Class Method Summary collapse

Class Method Details

.attr_accessor_instance_variables(obj) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/purgatory/active_record_descendant_attribute_accessors.rb', line 3

def self.attr_accessor_instance_variables(obj)
  include_ancestor_methods = false
  
  ancestors_before_active_record_base = obj.class.ancestors.take_while { |klass| klass != ActiveRecord::Base }

  instance_methods_of_ancestors_before_active_record_base = ancestors_before_active_record_base
                                                              .map { |klass| klass.instance_methods(include_ancestor_methods) }
                                                              .flatten

  setter_methods_of_ancestors_before_active_record_base = instance_methods_of_ancestors_before_active_record_base
                                                              .select { |meth| meth.to_s.last == '=' } 

  possible_instance_variables_from_setter_methods = setter_methods_of_ancestors_before_active_record_base
                                                              .map { |meth| meth.to_s.prepend('@').chop.to_sym }

  obj.instance_variables & possible_instance_variables_from_setter_methods
end