def undef_config(key, options={})
      unless configs.has_key?(key)
        raise NameError.new("#{key.inspect} is not a config on #{self}")
      end
      
      options = {
        :reader => true,
        :writer => true
      }.merge(options)
      
      config = configs[key]
      config_registry[key] = nil
      reset_configs
      
      undef_method(config.reader) if options[:reader]
      undef_method(config.writer) if options[:writer]
      
      config
    end
def undef_config(key, options={})
      unless configs.has_key?(key)
        raise NameError.new("#{key.inspect} is not a config on #{self}")
      end
      
      options = {
        :reader => true,
        :writer => true
      }.merge(options)
      
      config = configs[key]
      config_registry[key] = nil
      reset_configs
      
      undef_method(config.reader) if options[:reader]
      undef_method(config.writer) if options[:writer]
      
      config
    end
Undefines a config much like undef_method undefines a method.  The
 reader and writer for the config are likewise undefined.  Nested configs
 can be undefined using this method.

 Setting :reader or :writer to false in the options prevents those
 methods from being undefined.

 ==== Implementation Note

 Configurations are undefined by setting the key to nil in the registry.
 Deleting the config is not sufficient because the registry needs to
 convey to self and subclasses to not inherit the config from ancestors.

 This is unlike remove_config where the config is simply deleted from the
 config_registry.