Sha256: 5f0c2579c63097176cf9ba2254fb1c1a38be8d2ddcdc179d145312389f479158

Contents?: true

Size: 828 Bytes

Versions: 1

Compression:

Stored size: 828 Bytes

Contents

module SmartMethods
  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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
smart_methods-0.0.1 lib/smart_methods.rb