Class: KVConfigParser

Inherits:
Object
  • Object
show all
Defined in:
lib/rack2aws/config.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_file = nil, separator = '=') ⇒ KVConfigParser

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”



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rack2aws/config.rb', line 15

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

Instance Attribute Details

#config_fileObject

Returns the value of attribute config_file.



7
8
9
# File 'lib/rack2aws/config.rb', line 7

def config_file
  @config_file
end

#groupsObject

Returns the value of attribute groups.



7
8
9
# File 'lib/rack2aws/config.rb', line 7

def groups
  @groups
end

#paramsObject

Returns the value of attribute params.



7
8
9
# File 'lib/rack2aws/config.rb', line 7

def params
  @params
end

Instance Method Details

#[](param) ⇒ Object

This method is a shortcut to accessing the @params variable



96
97
98
# File 'lib/rack2aws/config.rb', line 96

def [](param)
  return self.params[param]
end

#add(param_name, value, override = false) ⇒ Object

Adds an element to the config object



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/rack2aws/config.rb', line 111

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) ⇒ Object

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



138
139
140
141
142
143
# File 'lib/rack2aws/config.rb', line 138

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_groupsObject

List available sub-groups of the config.



106
107
108
# File 'lib/rack2aws/config.rb', line 106

def get_groups()
  return self.groups
end

#get_paramsObject

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



101
102
103
# File 'lib/rack2aws/config.rb', line 101

def get_params()
  return self.params.keys
end

#get_value(param) ⇒ Object

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



89
90
91
92
93
# File 'lib/rack2aws/config.rb', line 89

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_configObject

Import data from the config to our config object.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/rack2aws/config.rb', line 36

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_configObject

Validate the config file, and contents



28
29
30
31
32
33
# File 'lib/rack2aws/config.rb', line 28

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