class Cheffish::MergedConfig

Attributes

configs[R]

Public Class Methods

new(*configs) click to toggle source
# File lib/cheffish/merged_config.rb, line 5
def initialize(*configs)
  @configs = configs.map { |config| Mash.from_hash config.to_hash }
  @merge_arrays = Mash.new
end

Public Instance Methods

[](name) click to toggle source
# File lib/cheffish/merged_config.rb, line 23
def [](name)
  if @merge_arrays[name]
    configs.select { |c| !c[name].nil? }.collect_concat { |c| c[name] }
  else
    result_configs = []
    configs.each do |config|
      value = config[name]
      unless value.nil?
        if value.respond_to?(:keys)
          result_configs << value
        elsif result_configs.size > 0
          return result_configs[0]
        else
          return value
        end
      end
    end
    if result_configs.size > 1
      MergedConfig.new(*result_configs)
    elsif result_configs.size == 1
      result_configs[0]
    else
      nil
    end
  end
end
each() { |key, self| ... } click to toggle source
# File lib/cheffish/merged_config.rb, line 81
def each
  keys.each do |key|
    if block_given?
      yield key, self[key]
    end
  end
end
each_pair(&block) click to toggle source
# File lib/cheffish/merged_config.rb, line 77
def each_pair(&block)
  each(&block)
end
empty?() click to toggle source
# File lib/cheffish/merged_config.rb, line 73
def empty?
  configs.empty?
end
has_key?(name)
Alias for: key?
key?(name) click to toggle source
# File lib/cheffish/merged_config.rb, line 59
def key?(name)
  configs.any? { |config| config.key?(name) }
end
Also aliased as: has_key?
keys() click to toggle source
# File lib/cheffish/merged_config.rb, line 65
def keys
  configs.flat_map(&:keys).uniq
end
merge_arrays(*symbols) click to toggle source
# File lib/cheffish/merged_config.rb, line 13
def merge_arrays(*symbols)
  if symbols.size > 0
    symbols.each do |symbol|
      @merge_arrays[symbol] = true
    end
  else
    @merge_arrays
  end
end
method_missing(name, *args) click to toggle source
# File lib/cheffish/merged_config.rb, line 50
def method_missing(name, *args)
  $stderr.puts "WARN: deprecated use of method_missing on a Cheffish::MergedConfig object at #{caller[0]}"
  if args.count > 0
    raise NoMethodError, "Unexpected method #{name} for MergedConfig with arguments #{args}"
  else
    self[name]
  end
end
to_h() click to toggle source
# File lib/cheffish/merged_config.rb, line 97
def to_h
  to_hash
end
to_hash() click to toggle source
# File lib/cheffish/merged_config.rb, line 89
def to_hash
  result = {}
  each_pair do |key, value|
    result[key] = value
  end
  result
end
to_s() click to toggle source
# File lib/cheffish/merged_config.rb, line 101
def to_s
  to_hash.to_s
end
values() click to toggle source
# File lib/cheffish/merged_config.rb, line 69
def values
  keys.map { |key| self[key] }
end