class Nac::Config

The main configuration manager class

Attributes

source[R]
template[R]

Public Class Methods

new(source, options = {}) click to toggle source
# File lib/nac/config.rb, line 8
def initialize(source, options = {})
  @source     = source
  @template   = (options[:template] || {}).to_yaml

  options[:init!] ? init! : init
  cache
end

Public Instance Methods

get(keys = nil, default = nil) click to toggle source
# File lib/nac/config.rb, line 24
def get(keys = nil, default = nil)
  return @cache unless keys

  val = @cache

  [keys].flatten.each do |key|
    val = val[key]
  end

  val
rescue NoMethodError
  default
end
init!() click to toggle source
# File lib/nac/config.rb, line 16
def init!
  FileUtils.mkdir_p(File.dirname(@source))

  File.open(@source, 'w+') do |file|
    file.write(@template)
  end
end
set(keys, value) click to toggle source
# File lib/nac/config.rb, line 38
def set(keys, value)
  @cache.merge!(bury(keys, value))

  File.write(@source, @cache.to_yaml)

  cache!
end

Private Instance Methods

bury(keys, value) click to toggle source
# File lib/nac/config.rb, line 54
def bury(keys, value)
  hkeys = [keys].flatten.map { |k| { k => nil } }

  hkeys.count.times do |i|
    val = hkeys[i + 1] || value
    hkeys[i][hkeys[i].keys[0]] = val
  end

  hkeys.shift
end
cache() click to toggle source
# File lib/nac/config.rb, line 70
def cache
  @cache ||= YAML.load_file(@source) || {}
end
cache!() click to toggle source
# File lib/nac/config.rb, line 65
def cache!
  @cache = nil
  cache
end
init() click to toggle source
# File lib/nac/config.rb, line 48
def init
  return true if File.exist?(@source)

  init!
end