Method: Confix::InstanceMethods#set

Defined in:
lib/confix.rb

#set(key, *value) ⇒ Object Also known as: []=

Sets a setting by the given key.

If the key refers to a child configuration, an exception is returned.



212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/confix.rb', line 212

def set(key, *value)
  if value.length == 0 && key.is_a?(Hash)
    # Apply the hash to the settings.
    key.each { |key, value| set key, value }
  else
    raise ArgumentError, 'too many arguments (1 or 2 expected)' if value.length > 1
    value = value.first

    key = key.to_s

    if self.class.configs[key]
      raise CannotModifyConfiguration, "you cannot update a child configuration with anything else than a hash" unless value.is_a?(Hash)

      config = (config_root.configs[self.class.expand_key(key)] ||= self.class.configs[key].new(self))
      config.update value
    elsif child?
      raise UndefinedSetting, "setting '#{self.class.expand_key(key)}' does not exist" unless self.class.key_defined?(key)
      config_root.values[self.class.expand_key(key)] = value
    else
      raise UndefinedSetting, "setting '#{self.class.expand_key(key)}' does not exist" unless self.class.key_defined?(key)
      values[key] = value
    end
  end
end