class KVConfigParser

Class to parse configuration files in the format of “param = value”.

Attributes

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

Public Class Methods

new(config_file=nil, separator = '=') click to toggle source

Initialize the class with the path to the 'config_fil' 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/rack2aws/config.rb, line 14
def initialize(config_file=nil, separator = '=')
  @config_file = config_file
  @params = {}
  @groups = []
  @splitRegex = '\s*' + separator + '\s*'

  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/rack2aws/config.rb, line 95
def [](param)
  return self.params[param]
end
add(param_name, value, override = false) click to toggle source

Adds an element to the config object

# File lib/rack2aws/config.rb, line 110
def add(param_name, value, override = false)
  if value.class == Hash
    if self.params.has_key?(param_name)
      if self.params[param_name].class == Hash
        if override
          self.params[param_name] = value
        else
          self.params[param_name].merge!(value)
        end
      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. Parameters with the same name could be placed in different groups

# File lib/rack2aws/config.rb, line 137
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/rack2aws/config.rb, line 105
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/rack2aws/config.rb, line 100
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/rack2aws/config.rb, line 88
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/rack2aws/config.rb, line 35
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
  open(self.config_file) {
    |f|
    f.each_with_index do |line, i|
      line.strip!
      # force_encoding not available in all versions of ruby
      begin
        if i.eql? 0 and line.include?("\xef\xbb\xbf".force_encoding("UTF-8"))
          line.delete!("\xef\xbb\xbf".force_encoding("UTF-8"))
        end
      rescue NoMethodError
      end

      unless (/^\#/.match(line))
        if(/#{@splitRegex}/.match(line))
          param, value = line.split(/#{@splitRegex}/, 2)
          var_name = "#{param}".chomp.strip
          value = value.chomp.strip
          new_value = ''
          if (value)
            if value =~ /^['"](.*)['"]$/
              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(/^\[(.+)\]$/.match(line).to_a != [])
          group = /^\[(.+)\]$/.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/rack2aws/config.rb, line 27
def validate_config()
  unless File.readable?(self.config_file)
    raise Errno::EACCES, "#{self.config_file} is not readable"
  end
  # FIX ME: need to validate contents/structure?
end