Report abuse

class Module
  def attribute(name, default=nil, &block)    
    return name.each { |name, default| attribute name, default } if name.is_a? Hash

    define_method("#{name}=") { |value| instance_variable_set "@#{name}", value }
    define_method(name) {
      unless instance_variable_defined? "@#{name}"
        send "#{name}=", block_given? ? instance_eval(&block) : default
      end
      instance_variable_get "@#{name}"
    }
    define_method("#{name}?") { not send(name).nil? }
  end
end