Class: Inspec::Resources::MysqlConf

Inherits:
Object
  • Object
show all
Includes:
FileReader, FindFiles
Defined in:
lib/inspec/resources/mysql_conf.rb

Constant Summary

Constants included from FindFiles

FindFiles::TYPES

Instance Method Summary collapse

Methods included from FileReader

#read_file_content

Methods included from FindFiles

#find_files, #find_files_or_warn

Constructor Details

#initialize(conf_path = nil) ⇒ MysqlConf

Returns a new instance of MysqlConf.



53
54
55
56
57
58
59
# File 'lib/inspec/resources/mysql_conf.rb', line 53

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name) ⇒ Object



74
75
76
77
# File 'lib/inspec/resources/mysql_conf.rb', line 74

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

Instance Method Details

#abs_path(dir, f) ⇒ Object



114
115
116
117
118
# File 'lib/inspec/resources/mysql_conf.rb', line 114

def abs_path(dir, f)
  return f if f.start_with? "/"

  File.join(dir, f)
end

#contentObject



61
62
63
# File 'lib/inspec/resources/mysql_conf.rb', line 61

def content
  @content ||= read_content
end

#include_files(reldir, conf) ⇒ Object



104
105
106
107
108
109
110
111
112
# File 'lib/inspec/resources/mysql_conf.rb', line 104

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

#params(*opts) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/inspec/resources/mysql_conf.rb', line 65

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

#read_contentObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/inspec/resources/mysql_conf.rb', line 79

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

#read_file(path) ⇒ Object



120
121
122
# File 'lib/inspec/resources/mysql_conf.rb', line 120

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

#to_sObject



124
125
126
# File 'lib/inspec/resources/mysql_conf.rb', line 124

def to_s
  "MySQL Configuration"
end