class KVConfigParser
Class to parse configuration files in the format of “param = value”.
Attributes
Public Class Methods
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
This method is a shortcut to accessing the @params variable
# File lib/rack2aws/config.rb, line 95 def [](param) return self.params[param] end
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 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
List available sub-groups of the config.
# File lib/rack2aws/config.rb, line 105 def get_groups() return self.groups end
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
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 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 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