lib/middleman-core/vendor/hooks-0.2.0/lib/hooks/inheritable_attribute.rb
module Hooks module InheritableAttribute # Creates an inheritable attribute with accessors in the singleton class. Derived classes inherit the # attributes. This is especially helpful with arrays or hashes that are extended in the inheritance # chain. Note that you have to initialize the inheritable attribute. # # Example: # # class Cat # inheritable_attr :drinks # self.drinks = ["Becks"] # # class Garfield < Cat # self.drinks << "Fireman's 4" # # and then, later # # Cat.drinks #=> ["Becks"] # Garfield.drinks #=> ["Becks", "Fireman's 4"] def inheritable_attr(name) instance_eval %Q{ def #{name}=(v) @#{name} = v end def #{name} return @#{name} unless superclass.respond_to?(:#{name}) and value = superclass.#{name} @#{name} ||= value.clone # only do this once. end } end end end