class Rubikon::Config::IniProvider

A configuration provider loading configuration data from INI files

@author Sebastian Staudt @since 0.5.0

Public Class Methods

load_config(file) click to toggle source

Loads a configuration Hash from a INI file

This method is taken from code written by gdsx in ruby-lang (see snippets.dzone.com/posts/show/563).

@param [String] file The path of the file to load @return [Hash] The configuration data loaded from the file

# File lib/rubikon/config/ini_provider.rb, line 23
def self.load_config(file)
  content = File.new(file).readlines.map do |line|
    line.gsub(/(?:#|;).*/, '').strip
  end.join("\n")

  config = {}
  content = content.split(/\[([^\]]+)\]/)[1..-1]
  content.inject([]) do |temp, field|
    temp << field
    if temp.length == 2
      value = temp[1].sub(/^\s+/,'').sub(/\s+$/,'')
      if config[temp[0]].nil?
        config[temp[0]] = value
      else
        config[temp[0]] << "\n#{value}"
      end
      temp.clear
    end
    temp
  end

  config.dup.each do |key, value|
    value_list = value.split /[\r\n]+/
    config[key] = value_list.inject({}) do |hash, val|
      k, v = val.split /\s*=\s*/
      hash[k] = v
      hash
    end
  end

  config
end
save_config(config, file) click to toggle source

Saves a configuration Hash into a INI file

@param [Hash] config The configuration to write @param [String] file The path of the file to write @since 0.6.0

# File lib/rubikon/config/ini_provider.rb, line 61
def self.save_config(config, file)
  unless config.is_a? Hash
    raise ArgumentError.new('Configuration has to be a Hash')
  end

  file = File.new file, 'w'

  config.each do |key, value|
    if value.is_a? Hash
      file << "\n" if file.pos > 0
      file << "[#{key.to_s}]\n"

      value.each do |k, v|
        file << "  #{k.to_s} = #{v.to_s unless v.nil?}\n"
      end
    else
      file << "#{key.to_s} = #{value.to_s unless value.nil?}\n"
    end
  end

  file.close
end