class R10K::Settings::Collection

Define a group of settings, which can be single definitions or nested collections.

Attributes

name[R]

@!attribute [r] name

@return [String] The name of this collection

Public Class Methods

new(name, settings) click to toggle source

@param name [Symbol] The name of the collection @param settings [Array] All settings in this collection

# File lib/r10k/settings/collection.rb, line 21
def initialize(name, settings)
  @name = name

  @settings = {}

  # iterate through settings and adopt them
  settings.each do |s|
    s.parent = self
    @settings[s.name] = s
  end
end

Public Instance Methods

[](name) click to toggle source

Access individual settings via a Hash-like interface.

# File lib/r10k/settings/collection.rb, line 99
def [](name)
  @settings[name]
end
assign(newvalues) click to toggle source

Assign a hash of values to the settings in this collection.

If the passed hash contains any invalid settings values, the names of those settings are stored for use in the {#validate} method.

@param newvalues [Hash] @return [void]

# File lib/r10k/settings/collection.rb, line 48
def assign(newvalues)
  return if newvalues.nil?

  R10K::Util::SymbolizeKeys.symbolize_keys!(newvalues)

  @settings.each_pair do |name, setting|
    if newvalues.key?(name)
      setting.assign(newvalues[name])
    end
  end
end
evaluate(newvalues) click to toggle source

Assign new values, perform validation checks, and return the final values for this collection

# File lib/r10k/settings/collection.rb, line 35
def evaluate(newvalues)
  assign(newvalues)
  validate
  resolve
end
resolve() click to toggle source

Evaluate all settings and return a frozen hash of the final values. @return [Hash]

# File lib/r10k/settings/collection.rb, line 88
def resolve
  rv = {}

  @settings.each_pair do |name, setting|
    rv[name] = setting.resolve
  end

  rv.freeze
end
validate() click to toggle source

Validate all settings and return validation errors

@return [nil, Hash] If all validation passed nil will be returned; if

validation failed then a hash of those errors will be returned.
# File lib/r10k/settings/collection.rb, line 64
def validate
  errors = {}

  @settings.each_pair do |name, setting|
    begin
      setting.validate
    rescue => error
      errors[name] = error
    end
  end

  if !errors.empty?
    if @name
      msg = _("Validation failed for '%{name}' settings group") % {name: @name}
    else
      msg = _("Validation failed for settings group")
    end

    raise ValidationError.new(msg, :errors => errors)
  end
end