Beginning with Rails 3.1, class_inheritable_accessor
produces deprecation warnings, telling me to use class_attribute
instead. But class_attribut
class_attribute
won't pollute its parent if it's used as intended. Make sure you're not changing the mutable items in-place.
types_and_classes.keys.each do |t|
self.presented = presented.merge({t => types_and_classes[t]})
end
Give this a try, a great way to have attributes set on the class, and not polluted by inheritance or instances.
class Class
private
# Sets Unique Variables on a resource
def inheritable_attr_accessor(*attrs)
attrs.each do |attr|
# Class Setter, Defining Setter
define_singleton_method "#{attr}=".to_sym do |value|
define_singleton_method attr do
value
end
end
# Default to nil
self.send("#{attr}=".to_sym, nil)
# Instance Setter
define_method "#{attr}=".to_sym do |value|
eval("@_#{attr} = value")
end
# Instance Getter, gets class var if nil
define_method attr do
eval("defined?(@_#{attr})") ? eval("@_#{attr}") : self.class.send(attr)
end
end
end
end