def set(keys, value, delete_nil = false, &code) # :yields: key, value, existing
    modify(@properties, symbol_array(array(keys).flatten), value, delete_nil, &code)
    return self
  end
def set(keys, value, delete_nil = false, &code) # :yields: key, value, existing
    modify(@properties, symbol_array(array(keys).flatten), value, delete_nil, &code)
    return self
  end
Set value for key path in the configuration object.

 * *Parameters*
   - [Array<String, Symbol>, String, Symbol] *keys*  Key path to modify
   - [ANY] *value*  Value to set for key path
   - [Boolean] *delete_nil*  Delete nil value (serves as an internal way to delete properties)

 * *Returns*
   - [Nucleon::Config]  Returns reference to self for compound operations

 * *Errors*

 * *Yields*
   - [Symbol]  *key*  Configuration key to modify
   - [ANY] *value*  New value of configuration key
   - [ANY] *existing*  Existing value being replaced for the configuration key

 See:
 - #modify

 See also:
 - #array