class Inspec::Resources::MysqlConf

def abs_path(dir, f)

def abs_path(dir, f)
  return f if f.start_with? '/'
  File.join(dir, f)
end

def content

def content
  @content ||= read_content
end

def include_files(reldir, conf)

def include_files(reldir, conf)
  files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
  dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
  dirs.map do |dir|
    # @TODO: non local glob
    files += find_files(dir, depth: 1, type: 'file')
  end
  files
end

def initialize(conf_path = nil)

def initialize(conf_path = nil)
  @conf_path = conf_path || inspec.mysql.conf_path
  @files_contents = {}
  @content = nil
  @params = nil
  read_content
end

def method_missing(name)

def method_missing(name)
  @params || read_content
  @params[name.to_s]
end

def params(*opts)

def params(*opts)
  @params || read_content
  res = @params
  opts.each do |opt|
    res = res[opt] unless res.nil?
  end
  MysqlConfEntry.new(opts, res)
end

def read_content

def read_content
  @content = ''
  @params = {}
  to_read = [@conf_path]
  until to_read.empty?
    cur_file = to_read[0]
    raw_conf = read_file(cur_file)
    @content += raw_conf
    params = SimpleConfig.new(raw_conf).params
    @params = @params.deep_merge(params)
    to_read = to_read.drop(1)
    # see if there is more stuff to include
    dir = File.dirname(cur_file)
    to_read += include_files(dir, raw_conf).find_all do |fp|
      not @files_contents.key? fp
    end
  end
  #
  @content
end

def read_file(path)

def read_file(path)
  @files_contents[path] ||= read_file_content(path)
end

def to_s

def to_s
  'MySQL Configuration'
end