Module: ConcreteAttributes

Defined in:
lib/concrete_attributes.rb,
lib/concrete_attributes/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Instance Method Summary collapse

Instance Method Details

#concrete_attribute(*attr) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/concrete_attributes.rb', line 5

def concrete_attribute(*attr)
  attr.each do |prop|
    instance_eval %Q{
      def #{prop}=(v)
        @#{prop} = v
      end

      def #{prop}
        return @#{prop} if instance_variable_defined?(:@#{prop})
        @#{prop} = concrete_for(self, :#{prop})
      end
    }
  end
end

#concrete_for(klass, method) ⇒ Object



20
21
22
23
24
25
# File 'lib/concrete_attributes.rb', line 20

def concrete_for(klass, method)
  parent = klass.superclass
  return unless parent.respond_to?(method)

  parent.public_send(method)
end