class RHC::Vendor::ParseConfig

Constants

Version

Attributes

config_file[RW]
groups[RW]
params[RW]

Public Class Methods

new(config_file=nil) click to toggle source

Initialize the class with the path to the '#config_file' The class objects are dynamically generated by the name of the 'param' in the config file. Therefore, if the config file is 'param = value' then the itializer will eval "@param = value"

# File lib/rhc/vendor/parseconfig.rb, line 34
def initialize(config_file=nil)
  @config_file = config_file
  @params = {}
  @groups = []

  if(self.config_file)
    self.validate_config()
    self.import_config()
  end
end

Public Instance Methods

[](param) click to toggle source

This method is a shortcut to accessing the @params variable

# File lib/rhc/vendor/parseconfig.rb, line 105
def [](param)
  return self.params[param]
end
add(param_name, value) click to toggle source

This method adds an element to the config object (not the config file) By adding a Hash, you create a new group

# File lib/rhc/vendor/parseconfig.rb, line 121
def add(param_name, value)
  if value.class == Hash
    if self.params.has_key?(param_name)
      if self.params[param_name].class == Hash
        self.params[param_name].merge!(value)
      elsif self.params.has_key?(param_name)
        if self.params[param_name].class != value.class
          raise ArgumentError, "#{param_name} already exists, and is of different type!"
        end
      end
    else
      self.params[param_name] = value
    end
    if ! self.groups.include?(param_name)
      self.groups.push(param_name)
    end
  else
    self.params[param_name] = value
  end
end
add_to_group(group, param_name, value) click to toggle source

Add parameters to a group. Note that parameters with the same name could be placed in different groups

# File lib/rhc/vendor/parseconfig.rb, line 144
def add_to_group(group, param_name, value)
  if ! self.groups.include?(group)
    self.add(group, {})
  end
  self.params[group][param_name] = value
end
get_groups() click to toggle source

List available sub-groups of the config.

# File lib/rhc/vendor/parseconfig.rb, line 115
def get_groups()
  return self.groups
end
get_params() click to toggle source

This method returns all parameters/groups defined in a config file.

# File lib/rhc/vendor/parseconfig.rb, line 110
def get_params()
  return self.params.keys
end
get_value(param) click to toggle source

This method will provide the value held by the object "@param" where "@param" is actually the name of the param in the config file.

DEPRECATED - will be removed in future versions

# File lib/rhc/vendor/parseconfig.rb, line 98
def get_value(param)
  puts "ParseConfig Deprecation Warning: get_value() is deprecated. Use " +               "config['param'] or config['group']['param'] instead."
  return self.params[param]
end
import_config() click to toggle source

Import data from the config to our config object.

# File lib/rhc/vendor/parseconfig.rb, line 55
def import_config()
  # The config is top down.. anything after a [group] gets added as part
  # of that group until a new [group] is found.
  group = nil
  File.open(self.config_file) { |f| f.each do |line|
    line.strip!
    unless (%r^\#/.match(line))
      if(%r\s*=\s*/.match(line))
        param, value = line.split(%r\s*=\s*/, 2)
        var_name = "#{param}".chomp.strip
        value = value.chomp.strip
        new_value = ''
        if (value)
          if value =~ %r^['"](.*)['"]$/
            new_value = $1
          else
            new_value = value
          end
        else
          new_value = ''
        end

        if group
          self.add_to_group(group, var_name, new_value)
        else
          self.add(var_name, new_value)
        end

      elsif(%r^\[(.+)\]$/.match(line).to_a != [])
        group = %r^\[(.+)\]$/.match(line).to_a[1]
        self.add(group, {})

      end
    end
  end }
end
validate_config() click to toggle source

Validate the config file, and contents

# File lib/rhc/vendor/parseconfig.rb, line 46
def validate_config()
  if !File.readable?(self.config_file)
    raise Errno::EACCES, "#{self.config_file} is not readable"
  end

  # FIX ME: need to validate contents/structure?
end
write(output_stream=STDOUT) click to toggle source

Writes out the config file to output_stream

# File lib/rhc/vendor/parseconfig.rb, line 152
def write(output_stream=STDOUT)
  self.params.each do |name,value| 
    if value.class.to_s != 'Hash'
      if value.scan(%r\w+/).length > 1
        output_stream.puts "#{name} = \"#{value}\""
      else
        output_stream.puts "#{name} = #{value}"
      end
    end
  end
  output_stream.puts "\n"

  self.groups.each do |group|
    output_stream.puts "[#{group}]"
    self.params[group].each do |param, value| 
      if value.scan(%r\w+/).length > 1
        output_stream.puts "#{param} = \"#{value}\""
      else
        output_stream.puts "#{param} = #{value}"
      end
    end
    output_stream.puts "\n"
  end
end