module Uber::InheritableAttribute

Public Class Methods

inherit_for(klass, name, options={}) click to toggle source
# File lib/uber/inheritable_attr.rb, line 17
def self.inherit_for(klass, name, options={})
  return unless klass.superclass.respond_to?(name)

  value = klass.superclass.send(name) # could be nil

  return value if options[:clone] == false
  Clone.(value) # this could be dynamic, allowing other inheritance strategies.
end

Public Instance Methods

inheritable_attr(name, options={}) click to toggle source
# File lib/uber/inheritable_attr.rb, line 4
    def inheritable_attr(name, options={})
      instance_eval <<-RUBY, __FILE__, __LINE__ + 1
        def #{name}=(v)
          @#{name} = v
        end

        def #{name}
          return @#{name} if instance_variable_defined?(:@#{name})
          @#{name} = InheritableAttribute.inherit_for(self, :#{name}, #{options})
        end
      RUBY
    end