2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/smart_methods.rb', line 2
def smart_methods(*names)
names.each do |name|
instance_eval %Q{
def #{name}(v = nil, &block)
if block_given?
@#{name} = block
elsif v
@#{name} = v
else
return @#{name} unless superclass.respond_to?(:#{name}) and value = superclass.#{name}
@#{name} ||= value.clone
end
end
def #{name}=(v)
@#{name} = v
end
}
class_eval %Q{
def #{name}
return @#{name} if @#{name}
if self.class.#{name}.is_a?(Proc)
@#{name} = instance_eval(&self.class.#{name})
else
@#{name} = self.class.#{name}
end
end
def #{name}=(v)
@#{name} = v
end
}
end
end
|