Module: SmartMethods

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

Constant Summary collapse

VERSION =
"0.0.1"

Instance Method Summary collapse

Instance Method Details

#smart_methods(*names) ⇒ Object



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