parseconfig 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (7) hide show
  1. checksums.yaml +7 -0
  2. data/Changelog +41 -21
  3. data/LICENSE +1 -1
  4. data/README.md +75 -59
  5. data/lib/parseconfig.rb +115 -83
  6. data/lib/version.rb +3 -0
  7. metadata +27 -45
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 79e32d975451b2b4cbf6ee3123e87b26a1fbf540066b3d44322c02d573a451af
4
+ data.tar.gz: 3a53181d9344b6b2ea790f968d7f33305709944bafd1c430a27601c411672fff
5
+ SHA512:
6
+ metadata.gz: d7b538e6e901837e6d6e479e072841ba6dd404ecc060cf417d98a40e714daabaf92fa54c3eeec137ff11d5df98e055f374c8f8f43917ce4d3d3ef4668a3d2efa
7
+ data.tar.gz: 634668d51266a54123d170652bb8bd03fcac5936c4a0deb0f388860ecad6cd84cd88c256b85be6d78a7155b766cbccbc2de0334d3b601e1b9304aaa8403118c9
data/Changelog CHANGED
@@ -1,7 +1,27 @@
1
+ Mon Sep 28, 2020 - v1.1.0
2
+ - Add non-value option support.
3
+ Resolves Issue #11
4
+
5
+ Mon Jan 25, 2016 - v1.0.8
6
+ - Use backward compatible positional arguments (not named keyword arguments)
7
+ Resolves Issue #31
8
+
9
+ Mon Jan 25, 2016 - v1.0.7
10
+ - Support alternative comment types (default: ['#', ';']) (@voobscout)
11
+ Resolves Issue #30
12
+
13
+ Mon Oct 06, 2014 - v1.0.6
14
+ - Fix where extraneous double quotes were getting wrapped around parameters
15
+ that have non-word characters (issue #19)
16
+
17
+ Thu Dec 19, 2013 - v1.0.4
18
+ - Add fix for config files with Byte Order Marker (BOM)
19
+ - Add support for .eql? function.
20
+
1
21
  Tue Jun 12, 2012 - v1.0.2
2
- - Re-enable get_value() as it seems some projects are still using it.
22
+ - Re-enable get_value() as it seems some projects are still using it.
3
23
  That said, get_value() *will* be removed in the future at some point.
4
-
24
+
5
25
  Tue Jun 12, 2012 - v1.0.0
6
26
  - Resolved Issue #3, Config files not closed properly.
7
27
  - Resolved Issue #7, Added basic rspec testing
@@ -11,26 +31,26 @@ Tue Jun 12, 2012 - v1.0.0
11
31
  Sat Feb 27, 2010 - v0.5.2
12
32
  - Re-releasing under MIT License.
13
33
  - Fixed issue with the add() method where if you added a group outside
14
- of the import_config() method, the group would not be properly added to
34
+ of the import_config() method, the group would not be properly added to
15
35
  self.groups[].
16
- - Added feature that if you attempt to add a group that already exists, the
36
+ - Added feature that if you attempt to add a group that already exists, the
17
37
  groups will be merged together. Any existing params in the original
18
38
  group will be overwritten by the new ones.
19
39
  - Fully deprecated override_value() and nil_value(). Anything using
20
40
  'instance_variable*' has been removed as well as it wasn't working properly
21
41
  anyway.
22
- - If you attempt to add_to_group() to a group that doesn't exist, the group
42
+ - If you attempt to add_to_group() to a group that doesn't exist, the group
23
43
  is added automatically.
24
-
44
+
25
45
  Mon Aug 31, 2009 - v0.5
26
46
  - Added sub-groups feature per RubyForge tracker [#27019]. Config files
27
47
  can now have [subgroups] whose values are added to a nested Hash object.
28
- - Added the write() function per RubyForge tracker [#27019]. Will print
48
+ - Added the write() function per RubyForge tracker [#27019]. Will print
29
49
  to STDOUT by default, or to a file object if passed.
30
50
  - Added the add(), and add_to_group() functions to support new features
31
51
  per RubyForge tracker [#27019].
32
52
  - Thank you to Titouan Christophe for the submissions listed above!
33
- - ParseConfig.get_params() returns all params including groups.
53
+ - ParseConfig.get_params() returns all params including groups.
34
54
  ParseConfig.get_groups() returns available sub-groups.
35
55
  - See the demo.rb and demo.conf files which have been updated to reflect
36
56
  this update.
@@ -39,44 +59,44 @@ Mon Aug 31, 2009 - v0.5
39
59
 
40
60
  Sat Mar 28, 2009 - v0.4.3
41
61
  - Added the self.params member that is a Hash holding all parameter/values.
42
- - Added the 'get_params' to return an array of all config parameters.
62
+ - Added the 'get_params' to return an array of all config parameters.
43
63
 
44
64
  Thu Feb 28, 2008 - v0.4.2
45
- - Fixed bug where if the value contains a '=' then the parameter
65
+ - Fixed bug where if the value contains a '=' then the parameter
46
66
  is not properly set. [bjd]
47
- - Fixed bug #13680 Unable to parse config options that contain
48
- single quotes. [bjd]
67
+ - Fixed bug #13680 Unable to parse config options that contain
68
+ single quotes. [bjd]
49
69
 
50
70
  Sun Sep 03, 2007 - v0.4.1
51
71
  - Now using 'instance_variable_set' and 'instance_variable_get'
52
- instead of 'eval' (yeah.. that was dirty). [bjd]
72
+ instead of 'eval' (yeah.. that was dirty). [bjd]
53
73
 
54
74
 
55
75
  Sat Aug 11, 2007 - v0.3.2
56
- - reorganizing files a bit. [bjd]
57
- - renamed methods .... no more uglyStyle... now new_style. [bjd]
76
+ - reorganizing files a bit. [bjd]
77
+ - renamed methods .... no more uglyStyle... now new_style. [bjd]
58
78
 
59
79
 
60
80
  Fri Feb 23, 2007 - v0.3.1
61
81
  - Added a bit of code to remove 'single' quotes... so, until I figure
62
- a better option, values can't contain single quotes. [bjd]
82
+ a better option, values can't contain single quotes. [bjd]
63
83
 
64
84
 
65
85
  Wed Feb 07, 2007 - v0.2.1
66
- - Renamed ParseConfig.class.rb to ParseConfig.rb. [bjd]
67
- - Add 'strip' to remove trailing white spaces from config file. [bjd]
86
+ - Renamed ParseConfig.class.rb to ParseConfig.rb. [bjd]
87
+ - Add 'strip' to remove trailing white spaces from config file. [bjd]
68
88
 
69
89
 
70
90
  Wed Dec 13, 2006 - v0.1.3
71
- - Added error check to ensure configFile is readable. [bjd]
91
+ - Added error check to ensure configFile is readable. [bjd]
72
92
 
73
93
 
74
94
  Sat Nov 25, 2006 - v0.1.2
75
95
  - Added regex to only read lines matching /\s*=\s*/ as
76
- The class would bork if you had say, and empty line. [bjd]
96
+ The class would bork if you had say, and empty line. [bjd]
77
97
 
78
98
 
79
99
  Fri Nov 24 2006 - v0.1.1
80
- - Built class, which is functional and fully usable. [bjd]
100
+ - Built class, which is functional and fully usable. [bjd]
81
101
 
82
102
 
data/LICENSE CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  The MIT License:
3
3
 
4
- Copyright (c) 2006-2012 BJ Dierkes
4
+ Copyright (c) 2006-2016 Data Folk Labs, LLC
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,75 +1,91 @@
1
- Ruby ParseConfig Library
2
- ========================
1
+ # Ruby ParseConfig Library
3
2
 
4
- ParseConfig provides simple parsing of standard configuration files in the
5
- form of 'param = value'. It also supports nested [group] sections.
3
+ ParseConfig provides simple parsing of standard configuration files in the
4
+ form of `param = value`. It also supports nested `[group]` sections.
6
5
 
7
- [![Continuous Integration Status](https://secure.travis-ci.org/derks/ruby-parseconfig.png)](http://travis-ci.org/derks/ruby-parseconfig)
6
+ [![Continuous Integration Status](https://secure.travis-ci.org/datafolklabs/ruby-parseconfig.png)](http://travis-ci.org/datafolklabs/ruby-parseconfig)
8
7
 
9
- Installation
10
- ------------
8
+ ## Installation
11
9
 
12
- $ sudo gem install parseconfig
10
+ ```
11
+ $ gem install parseconfig
12
+ ```
13
13
 
14
- Usage
15
- -----
14
+ Gemfile
15
+
16
+ ```
17
+ gem 'parseconfig'
18
+ ```
19
+
20
+ ## Usage
16
21
 
17
22
  An example configuration file might look like:
18
23
 
19
- # Example Config
20
- param1 = value1
21
- param2 = value2
22
-
23
- [group1]
24
- group1_param1 = group1_value1
25
- group1_param2 = group1_value2
26
-
27
- [group2]
28
- group2_param1 = group2_value1
29
- group2_param2 = group2_value2
30
-
24
+ ```
25
+ # Example Config
26
+ param1 = value1
27
+ param2 = value2
28
+
29
+ [group1]
30
+ group1_param1 = group1_value1
31
+ group1_param2 = group1_value2
32
+
33
+ [group2]
34
+ group2_param1 = group2_value1
35
+ group2_param2 = group2_value2
36
+ ```
31
37
 
32
38
  Access it with ParseConfig:
33
39
 
34
- >> require('parseconfig.rb')
35
- => true
36
-
37
- >> config = ParseConfig.new('/path/to/config/file')
38
- => #<ParseConfig:0x102410908
39
- @config_file="example.conf",
40
- @groups=["group1", "group2"],
41
- @params={
40
+ ```ruby
41
+ >> require 'parseconfig'
42
+ => true
43
+
44
+ >> config = ParseConfig.new('/path/to/config/example.conf')
45
+ => #<ParseConfig:0x102410908
46
+ @config_file="example.conf",
47
+ @groups=["group1", "group2"],
48
+ @params={
49
+ "param1"=>"value1"
50
+ "param2"=>"value2",
51
+ "group1"=>{
42
52
  "param1"=>"value1"
43
53
  "param2"=>"value2",
44
- "group1"=>{
45
- "param1"=>"value1"
46
- "param2"=>"value2",
47
- },
48
- "group2"=>{
49
- "param1"=>"value1"
50
- "param2"=>"value2",
51
- },
52
- }
53
- >
54
-
55
- >> config.get_params()
56
- => ["param1", "param2", "group1", "group2"]
57
-
58
- >> config['param1']
59
- => "value1"
60
-
61
- >> config.get_groups()
62
- => ["group1", "group2"]
63
-
64
- >> config['group1']
65
- => {"group1_param1"=>"group1_value1", "group1_param2"=>"group1_value2"}
66
-
67
- >> config['group1']['group1_param1']
68
- => "group1_value1"
69
-
70
-
71
- License
72
- -------
54
+ },
55
+ "group2"=>{
56
+ "param1"=>"value1"
57
+ "param2"=>"value2",
58
+ },
59
+ }>
60
+
61
+ >> config.get_params
62
+ => ["param1", "param2", "group1", "group2"]
63
+
64
+ >> config['param1']
65
+ => "value1"
66
+
67
+ >> config.get_groups
68
+ => ["group1", "group2"]
69
+
70
+ >> config['group1']
71
+ => {"group1_param1"=>"group1_value1", "group1_param2"=>"group1_value2"}
72
+
73
+ >> config['group1']['group1_param1']
74
+ => "group1_value1"
75
+
76
+ >> file = File.open('/path/to/config/file', 'w')
77
+ => #<File:file>
78
+
79
+ >> config.write(file)
80
+ => []
81
+
82
+ >> file.close
83
+ => nil
84
+
85
+ ```
86
+
87
+ ## License
73
88
 
74
89
  The ParseConfig library is Open Source and distributed under the MIT license.
75
90
  Please see the LICENSE file included with this software.
91
+
@@ -1,25 +1,22 @@
1
- #
2
- # Author:: BJ Dierkes <derks@bjdierkes.com>
3
- # Copyright:: Copyright (c) 2006,2012 BJ Dierkes
4
- # License:: MIT
5
- # URL:: https://github.com/derks/ruby-parseconfig
6
- #
1
+ #
2
+ # Author:: BJ Dierkes <derks@datafolklabs.com>
3
+ # Copyright:: Copyright (c) 2006,2016 Data Folk Labs, LLC
4
+ # License:: MIT
5
+ # URL:: https://github.com/datafolklabs/ruby-parseconfig
6
+ #
7
7
 
8
8
  # This class was written to simplify the parsing of configuration
9
- # files in the format of "param = value". Please review the
9
+ # files in the format of "param = value". Please review the
10
10
  # demo files included with this package.
11
11
  #
12
12
  # For further information please refer to the './doc' directory
13
13
  # as well as the ChangeLog and README files included.
14
14
  #
15
15
 
16
- # Note: A group is a set of parameters defined for a subpart of a
16
+ # Note: A group is a set of parameters defined for a subpart of a
17
17
  # config file
18
18
 
19
19
  class ParseConfig
20
-
21
- Version = '1.0.2'
22
-
23
20
  attr_accessor :config_file, :params, :groups
24
21
 
25
22
  # Initialize the class with the path to the 'config_file'
@@ -28,128 +25,151 @@ class ParseConfig
28
25
  # the config file is 'param = value' then the itializer
29
26
  # will eval "@param = value"
30
27
  #
31
- def initialize(config_file=nil)
28
+ def initialize(config_file = nil, separator = '=', comments = ['#', ';'])
32
29
  @config_file = config_file
33
30
  @params = {}
34
31
  @groups = []
35
-
36
- if(self.config_file)
37
- self.validate_config()
38
- self.import_config()
39
- end
32
+ @split_regex = '\s*' + separator + '\s*'
33
+ @comments = comments
34
+
35
+ return unless config_file
36
+
37
+ validate_config
38
+ import_config
40
39
  end
41
-
40
+
42
41
  # Validate the config file, and contents
43
- def validate_config()
44
- if !File.readable?(self.config_file)
45
- raise Errno::EACCES, "#{self.config_file} is not readable"
46
- end
47
-
42
+ def validate_config
43
+ return if File.readable?(config_file)
44
+
45
+ raise Errno::EACCES, "#{config_file} is not readable"
46
+
48
47
  # FIX ME: need to validate contents/structure?
49
- end
50
-
48
+ end
49
+
51
50
  # Import data from the config to our config object.
52
- def import_config()
51
+ def import_config
53
52
  # The config is top down.. anything after a [group] gets added as part
54
- # of that group until a new [group] is found.
53
+ # of that group until a new [group] is found.
55
54
  group = nil
56
- open(self.config_file) { |f| f.each do |line|
57
- line.strip!
58
- unless (/^\#/.match(line))
59
- if(/\s*=\s*/.match(line))
60
- param, value = line.split(/\s*=\s*/, 2)
61
- var_name = "#{param}".chomp.strip
62
- value = value.chomp.strip
63
- new_value = ''
64
- if (value)
65
- if value =~ /^['"](.*)['"]$/
66
- new_value = $1
55
+ open(config_file) do |f|
56
+ f.each_with_index do |line, i|
57
+ line.strip!
58
+
59
+ # force_encoding not available in all versions of ruby
60
+ begin
61
+ if i.eql? 0 && line.include?("\xef\xbb\xbf".force_encoding('UTF-8'))
62
+ line.delete!("\xef\xbb\xbf".force_encoding('UTF-8'))
63
+ end
64
+ rescue NoMethodError
65
+ end
66
+
67
+ is_comment = false
68
+ @comments.each do |comment|
69
+ if /^#{comment}/.match(line)
70
+ is_comment = true
71
+ break
72
+ end
73
+ end
74
+
75
+ unless is_comment
76
+ if /#{@split_regex}/.match(line)
77
+ param, value = line.split(/#{@split_regex}/, 2)
78
+ var_name = param.to_s.chomp.strip
79
+ value = value.chomp.strip
80
+ new_value = ''
81
+ if value
82
+ if value =~ /^['"](.*)['"]$/
83
+ new_value = Regexp.last_match(1)
84
+ else
85
+ new_value = value
86
+ end
67
87
  else
68
- new_value = value
88
+ new_value = ''
69
89
  end
70
- else
71
- new_value = ''
72
- end
73
90
 
74
- if group
75
- self.add_to_group(group, var_name, new_value)
76
- else
77
- self.add(var_name, new_value)
91
+ if group
92
+ add_to_group(group, var_name, new_value)
93
+ else
94
+ add(var_name, new_value)
95
+ end
96
+ elsif /^\[(.+)\]$/.match(line).to_a != []
97
+ group = /^\[(.+)\]$/.match(line).to_a[1]
98
+ add(group, {})
99
+ elsif /\w+/.match(line)
100
+ add(line.to_s.chomp.strip, true)
78
101
  end
79
-
80
- elsif(/^\[(.+)\]$/.match(line).to_a != [])
81
- group = /^\[(.+)\]$/.match(line).to_a[1]
82
- self.add(group, {})
83
-
84
102
  end
85
103
  end
86
- end }
104
+ end
87
105
  end
88
106
 
89
107
  # This method will provide the value held by the object "@param"
90
- # where "@param" is actually the name of the param in the config
91
- # file.
108
+ # where "@param" is actually the name of the param in the config
109
+ # file.
92
110
  #
93
111
  # DEPRECATED - will be removed in future versions
94
112
  #
95
113
  def get_value(param)
96
- puts "ParseConfig Deprecation Warning: get_value() is deprecated. Use " + \
114
+ puts 'ParseConfig Deprecation Warning: get_value() is deprecated. Use ' \
97
115
  "config['param'] or config['group']['param'] instead."
98
- return self.params[param]
116
+ params[param]
99
117
  end
100
118
 
101
119
  # This method is a shortcut to accessing the @params variable
102
120
  def [](param)
103
- return self.params[param]
121
+ params[param]
104
122
  end
105
123
 
106
124
  # This method returns all parameters/groups defined in a config file.
107
- def get_params()
108
- return self.params.keys
125
+ def get_params
126
+ params.keys
109
127
  end
110
-
128
+
111
129
  # List available sub-groups of the config.
112
- def get_groups()
113
- return self.groups
130
+ def get_groups
131
+ groups
114
132
  end
115
133
 
116
134
  # This method adds an element to the config object (not the config file)
117
135
  # By adding a Hash, you create a new group
118
- def add(param_name, value)
136
+ def add(param_name, value, override = false)
119
137
  if value.class == Hash
120
- if self.params.has_key?(param_name)
121
- if self.params[param_name].class == Hash
122
- self.params[param_name].merge!(value)
123
- elsif self.params.has_key?(param_name)
124
- if self.params[param_name].class != value.class
138
+ if params.key? param_name
139
+ if params[param_name].class == Hash
140
+ if override
141
+ params[param_name] = value
142
+ else
143
+ params[param_name].merge!(value)
144
+ end
145
+ elsif params.key? param_name
146
+ if params[param_name].class != value.class
125
147
  raise ArgumentError, "#{param_name} already exists, and is of different type!"
126
148
  end
127
149
  end
128
150
  else
129
- self.params[param_name] = value
151
+ params[param_name] = value
130
152
  end
131
- if ! self.groups.include?(param_name)
132
- self.groups.push(param_name)
153
+ unless groups.include?(param_name)
154
+ groups.push(param_name)
133
155
  end
134
156
  else
135
- self.params[param_name] = value
157
+ params[param_name] = value
136
158
  end
137
159
  end
138
160
 
139
161
  # Add parameters to a group. Note that parameters with the same name
140
162
  # could be placed in different groups
141
163
  def add_to_group(group, param_name, value)
142
- if ! self.groups.include?(group)
143
- self.add(group, {})
144
- end
145
- self.params[group][param_name] = value
164
+ add(group, {}) unless groups.include?(group)
165
+ params[group][param_name] = value
146
166
  end
147
167
 
148
168
  # Writes out the config file to output_stream
149
- def write(output_stream=STDOUT)
150
- self.params.each do |name,value|
169
+ def write(output_stream = STDOUT, quoted = true)
170
+ params.each do |name, value|
151
171
  if value.class.to_s != 'Hash'
152
- if value.scan(/\w+/).length > 1
172
+ if quoted == true
153
173
  output_stream.puts "#{name} = \"#{value}\""
154
174
  else
155
175
  output_stream.puts "#{name} = #{value}"
@@ -157,11 +177,11 @@ class ParseConfig
157
177
  end
158
178
  end
159
179
  output_stream.puts "\n"
160
-
161
- self.groups.each do |group|
180
+
181
+ groups.each do |group|
162
182
  output_stream.puts "[#{group}]"
163
- self.params[group].each do |param, value|
164
- if value.scan(/\w+/).length > 1
183
+ params[group].each do |param, value|
184
+ if quoted == true
165
185
  output_stream.puts "#{param} = \"#{value}\""
166
186
  else
167
187
  output_stream.puts "#{param} = #{value}"
@@ -170,4 +190,16 @@ class ParseConfig
170
190
  output_stream.puts "\n"
171
191
  end
172
192
  end
193
+
194
+ # Public: Compare this ParseConfig to some other ParseConfig. For two config to
195
+ # be equivalent, they must have the same sections with the same parameters
196
+ #
197
+ # other - The other ParseConfig.
198
+ #
199
+ # Returns true if ParseConfig are equivalent and false if they differ.
200
+
201
+ def eql?(other)
202
+ params == other.params && groups == other.groups
203
+ end
204
+ alias == eql?
173
205
  end
@@ -0,0 +1,3 @@
1
+ module ParseConfig
2
+ VERSION = '1.1.0'.freeze
3
+ end
metadata CHANGED
@@ -1,65 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: parseconfig
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 2
9
- version: 1.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - BJ Dierkes
13
- autorequire:
8
+ autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2012-06-12 00:00:00 -05:00
18
- default_executable:
11
+ date: 2020-09-28 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
- description: ParseConfig provides simple parsing of standard configuration files in the form of 'param = value'. It also supports nested [group] sections.
22
- email: derks@bjdierkes.com
13
+ description: ParseConfig provides simple parsing of standardconfiguration files in
14
+ the form of 'param = value'. It also supports nested [group] sections.
15
+ email: derks@datafolklabs.com
23
16
  executables: []
24
-
25
17
  extensions: []
26
-
27
18
  extra_rdoc_files: []
28
-
29
- files:
30
- - README.md
19
+ files:
31
20
  - Changelog
32
21
  - LICENSE
22
+ - README.md
33
23
  - lib/parseconfig.rb
34
- has_rdoc: true
35
- homepage: http://github.com/derks/ruby-parseconfig/
24
+ - lib/version.rb
25
+ homepage: http://github.com/datafolklabs/ruby-parseconfig/
36
26
  licenses: []
37
-
38
- post_install_message:
27
+ metadata: {}
28
+ post_install_message:
39
29
  rdoc_options: []
40
-
41
- require_paths:
30
+ require_paths:
42
31
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
44
- requirements:
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
45
34
  - - ">="
46
- - !ruby/object:Gem::Version
47
- segments:
48
- - 0
49
- version: "0"
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
- requirements:
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
52
39
  - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
57
42
  requirements: []
58
-
59
- rubyforge_project:
60
- rubygems_version: 1.3.6
61
- signing_key:
62
- specification_version: 3
43
+ rubygems_version: 3.0.6
44
+ signing_key:
45
+ specification_version: 4
63
46
  summary: Config File Parser for Standard Unix/Linux Type Config Files
64
47
  test_files: []
65
-