def config(name, types: nil, type: nil, required: false, default: nil, &block)
      attribute = self.class.new
      attribute.name = name
      attribute.types = types || type
      attribute.required = required
      attribute.value = default
      attribute.instance_exec(&block) if block

      children << attribute
    end
def config(name, types: nil, type: nil, required: false, default: nil, &block)
      attribute = self.class.new
      attribute.name = name
      attribute.types = types || type
      attribute.required = required
      attribute.value = default
      attribute.instance_exec(&block) if block

      children << attribute
    end
Declares a configuration attribute.
 @param name [String, Symbol] The attribute's name.
 @param types [Object, Array<Object>] Optional: One or more types that the attribute's value
   must be.
 @param type [Object, Array<Object>] Optional: One or more types that the attribute's value
   must be.
 @param required [Boolean] Whether or not this attribute must be set. If required, and Lita
   is run without it set, Lita will abort on start up with a message about it.
 @param default [Object] An optional default value for the attribute.
 @yield A block to be evaluated in the context of the new attribute. Used for
   defining nested configuration attributes and validators.
 @return [void]