parseconfig 1.0.2 → 1.0.4

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 (5) hide show
  1. data/Changelog +25 -21
  2. data/LICENSE +1 -1
  3. data/README.md +24 -17
  4. data/lib/parseconfig.rb +51 -30
  5. metadata +25 -41
data/Changelog CHANGED
@@ -1,7 +1,11 @@
1
+ Thu Dec 19, 2013 - v1.0.4
2
+ - Add fix for config files with Byte Order Marker (BOM)
3
+ - Add support for .eql? function.
4
+
1
5
  Tue Jun 12, 2012 - v1.0.2
2
- - Re-enable get_value() as it seems some projects are still using it.
6
+ - Re-enable get_value() as it seems some projects are still using it.
3
7
  That said, get_value() *will* be removed in the future at some point.
4
-
8
+
5
9
  Tue Jun 12, 2012 - v1.0.0
6
10
  - Resolved Issue #3, Config files not closed properly.
7
11
  - Resolved Issue #7, Added basic rspec testing
@@ -11,26 +15,26 @@ Tue Jun 12, 2012 - v1.0.0
11
15
  Sat Feb 27, 2010 - v0.5.2
12
16
  - Re-releasing under MIT License.
13
17
  - 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
18
+ of the import_config() method, the group would not be properly added to
15
19
  self.groups[].
16
- - Added feature that if you attempt to add a group that already exists, the
20
+ - Added feature that if you attempt to add a group that already exists, the
17
21
  groups will be merged together. Any existing params in the original
18
22
  group will be overwritten by the new ones.
19
23
  - Fully deprecated override_value() and nil_value(). Anything using
20
24
  'instance_variable*' has been removed as well as it wasn't working properly
21
25
  anyway.
22
- - If you attempt to add_to_group() to a group that doesn't exist, the group
26
+ - If you attempt to add_to_group() to a group that doesn't exist, the group
23
27
  is added automatically.
24
-
28
+
25
29
  Mon Aug 31, 2009 - v0.5
26
30
  - Added sub-groups feature per RubyForge tracker [#27019]. Config files
27
31
  can now have [subgroups] whose values are added to a nested Hash object.
28
- - Added the write() function per RubyForge tracker [#27019]. Will print
32
+ - Added the write() function per RubyForge tracker [#27019]. Will print
29
33
  to STDOUT by default, or to a file object if passed.
30
34
  - Added the add(), and add_to_group() functions to support new features
31
35
  per RubyForge tracker [#27019].
32
36
  - Thank you to Titouan Christophe for the submissions listed above!
33
- - ParseConfig.get_params() returns all params including groups.
37
+ - ParseConfig.get_params() returns all params including groups.
34
38
  ParseConfig.get_groups() returns available sub-groups.
35
39
  - See the demo.rb and demo.conf files which have been updated to reflect
36
40
  this update.
@@ -39,44 +43,44 @@ Mon Aug 31, 2009 - v0.5
39
43
 
40
44
  Sat Mar 28, 2009 - v0.4.3
41
45
  - 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.
46
+ - Added the 'get_params' to return an array of all config parameters.
43
47
 
44
48
  Thu Feb 28, 2008 - v0.4.2
45
- - Fixed bug where if the value contains a '=' then the parameter
49
+ - Fixed bug where if the value contains a '=' then the parameter
46
50
  is not properly set. [bjd]
47
- - Fixed bug #13680 Unable to parse config options that contain
48
- single quotes. [bjd]
51
+ - Fixed bug #13680 Unable to parse config options that contain
52
+ single quotes. [bjd]
49
53
 
50
54
  Sun Sep 03, 2007 - v0.4.1
51
55
  - Now using 'instance_variable_set' and 'instance_variable_get'
52
- instead of 'eval' (yeah.. that was dirty). [bjd]
56
+ instead of 'eval' (yeah.. that was dirty). [bjd]
53
57
 
54
58
 
55
59
  Sat Aug 11, 2007 - v0.3.2
56
- - reorganizing files a bit. [bjd]
57
- - renamed methods .... no more uglyStyle... now new_style. [bjd]
60
+ - reorganizing files a bit. [bjd]
61
+ - renamed methods .... no more uglyStyle... now new_style. [bjd]
58
62
 
59
63
 
60
64
  Fri Feb 23, 2007 - v0.3.1
61
65
  - Added a bit of code to remove 'single' quotes... so, until I figure
62
- a better option, values can't contain single quotes. [bjd]
66
+ a better option, values can't contain single quotes. [bjd]
63
67
 
64
68
 
65
69
  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]
70
+ - Renamed ParseConfig.class.rb to ParseConfig.rb. [bjd]
71
+ - Add 'strip' to remove trailing white spaces from config file. [bjd]
68
72
 
69
73
 
70
74
  Wed Dec 13, 2006 - v0.1.3
71
- - Added error check to ensure configFile is readable. [bjd]
75
+ - Added error check to ensure configFile is readable. [bjd]
72
76
 
73
77
 
74
78
  Sat Nov 25, 2006 - v0.1.2
75
79
  - Added regex to only read lines matching /\s*=\s*/ as
76
- The class would bork if you had say, and empty line. [bjd]
80
+ The class would bork if you had say, and empty line. [bjd]
77
81
 
78
82
 
79
83
  Fri Nov 24 2006 - v0.1.1
80
- - Built class, which is functional and fully usable. [bjd]
84
+ - Built class, which is functional and fully usable. [bjd]
81
85
 
82
86
 
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-2013 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,10 +1,10 @@
1
1
  Ruby ParseConfig Library
2
2
  ========================
3
3
 
4
- ParseConfig provides simple parsing of standard configuration files in the
4
+ ParseConfig provides simple parsing of standard configuration files in the
5
5
  form of 'param = value'. It also supports nested [group] sections.
6
6
 
7
- [![Continuous Integration Status](https://secure.travis-ci.org/derks/ruby-parseconfig.png)](http://travis-ci.org/derks/ruby-parseconfig)
7
+ [![Continuous Integration Status](https://secure.travis-ci.org/datafolklabs/ruby-parseconfig.png)](http://travis-ci.org/datafolklabs/ruby-parseconfig)
8
8
 
9
9
  Installation
10
10
  ------------
@@ -19,54 +19,61 @@ An example configuration file might look like:
19
19
  # Example Config
20
20
  param1 = value1
21
21
  param2 = value2
22
-
23
- [group1]
22
+
23
+ [group1]
24
24
  group1_param1 = group1_value1
25
25
  group1_param2 = group1_value2
26
-
26
+
27
27
  [group2]
28
28
  group2_param1 = group2_value1
29
29
  group2_param2 = group2_value2
30
-
30
+
31
31
 
32
32
  Access it with ParseConfig:
33
33
 
34
34
  >> require('parseconfig.rb')
35
35
  => true
36
-
36
+
37
37
  >> config = ParseConfig.new('/path/to/config/file')
38
- => #<ParseConfig:0x102410908
39
- @config_file="example.conf",
40
- @groups=["group1", "group2"],
38
+ => #<ParseConfig:0x102410908
39
+ @config_file="example.conf",
40
+ @groups=["group1", "group2"],
41
41
  @params={
42
42
  "param1"=>"value1"
43
43
  "param2"=>"value2",
44
44
  "group1"=>{
45
45
  "param1"=>"value1"
46
- "param2"=>"value2",
47
- },
46
+ "param2"=>"value2",
47
+ },
48
48
  "group2"=>{
49
49
  "param1"=>"value1"
50
- "param2"=>"value2",
51
- },
50
+ "param2"=>"value2",
51
+ },
52
52
  }
53
53
  >
54
-
54
+
55
55
  >> config.get_params()
56
56
  => ["param1", "param2", "group1", "group2"]
57
57
 
58
58
  >> config['param1']
59
59
  => "value1"
60
-
60
+
61
61
  >> config.get_groups()
62
62
  => ["group1", "group2"]
63
-
63
+
64
64
  >> config['group1']
65
65
  => {"group1_param1"=>"group1_value1", "group1_param2"=>"group1_value2"}
66
66
 
67
67
  >> config['group1']['group1_param1']
68
68
  => "group1_value1"
69
69
 
70
+ >> file = File.open('/path/to/config/file', 'w')
71
+ => #<File:file>
72
+ >> config.write(file)
73
+ => []
74
+ >> file.close
75
+ => nil
76
+
70
77
 
71
78
  License
72
79
  -------
@@ -1,24 +1,24 @@
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,2013 BJ Dierkes
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'
20
+
21
+ Version = '1.0.4'
22
22
 
23
23
  attr_accessor :config_file, :params, :groups
24
24
 
@@ -32,32 +32,41 @@ class ParseConfig
32
32
  @config_file = config_file
33
33
  @params = {}
34
34
  @groups = []
35
-
35
+
36
36
  if(self.config_file)
37
37
  self.validate_config()
38
38
  self.import_config()
39
39
  end
40
40
  end
41
-
41
+
42
42
  # 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"
43
+ def validate_config()
44
+ unless File.readable?(self.config_file)
45
+ raise Errno::EACCES, "#{self.config_file} is not readable"
46
46
  end
47
-
47
+
48
48
  # FIX ME: need to validate contents/structure?
49
- end
50
-
49
+ end
50
+
51
51
  # Import data from the config to our config object.
52
52
  def import_config()
53
53
  # The config is top down.. anything after a [group] gets added as part
54
- # of that group until a new [group] is found.
54
+ # of that group until a new [group] is found.
55
55
  group = nil
56
- open(self.config_file) { |f| f.each do |line|
56
+ open(self.config_file) { |f| f.each_with_index do |line, i|
57
57
  line.strip!
58
+
59
+ # force_encoding not available in all versions of ruby
60
+ begin
61
+ if i.eql? 0 and 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
+
58
67
  unless (/^\#/.match(line))
59
68
  if(/\s*=\s*/.match(line))
60
- param, value = line.split(/\s*=\s*/, 2)
69
+ param, value = line.split(/\s*=\s*/, 2)
61
70
  var_name = "#{param}".chomp.strip
62
71
  value = value.chomp.strip
63
72
  new_value = ''
@@ -69,26 +78,26 @@ class ParseConfig
69
78
  end
70
79
  else
71
80
  new_value = ''
72
- end
81
+ end
73
82
 
74
83
  if group
75
84
  self.add_to_group(group, var_name, new_value)
76
85
  else
77
86
  self.add(var_name, new_value)
78
87
  end
79
-
88
+
80
89
  elsif(/^\[(.+)\]$/.match(line).to_a != [])
81
90
  group = /^\[(.+)\]$/.match(line).to_a[1]
82
91
  self.add(group, {})
83
-
92
+
84
93
  end
85
94
  end
86
95
  end }
87
96
  end
88
97
 
89
98
  # 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.
99
+ # where "@param" is actually the name of the param in the config
100
+ # file.
92
101
  #
93
102
  # DEPRECATED - will be removed in future versions
94
103
  #
@@ -107,7 +116,7 @@ class ParseConfig
107
116
  def get_params()
108
117
  return self.params.keys
109
118
  end
110
-
119
+
111
120
  # List available sub-groups of the config.
112
121
  def get_groups()
113
122
  return self.groups
@@ -147,7 +156,7 @@ class ParseConfig
147
156
 
148
157
  # Writes out the config file to output_stream
149
158
  def write(output_stream=STDOUT)
150
- self.params.each do |name,value|
159
+ self.params.each do |name,value|
151
160
  if value.class.to_s != 'Hash'
152
161
  if value.scan(/\w+/).length > 1
153
162
  output_stream.puts "#{name} = \"#{value}\""
@@ -157,10 +166,10 @@ class ParseConfig
157
166
  end
158
167
  end
159
168
  output_stream.puts "\n"
160
-
169
+
161
170
  self.groups.each do |group|
162
171
  output_stream.puts "[#{group}]"
163
- self.params[group].each do |param, value|
172
+ self.params[group].each do |param, value|
164
173
  if value.scan(/\w+/).length > 1
165
174
  output_stream.puts "#{param} = \"#{value}\""
166
175
  else
@@ -170,4 +179,16 @@ class ParseConfig
170
179
  output_stream.puts "\n"
171
180
  end
172
181
  end
182
+
183
+ # Public: Compare this ParseConfig to some other ParseConfig. For two config to
184
+ # be equivalent, they must have the same sections with the same parameters
185
+ #
186
+ # other - The other ParseConfig.
187
+ #
188
+ # Returns true if ParseConfig are equivalent and false if they differ.
189
+
190
+ def eql?(other)
191
+ self.params == other.params && self.groups == other.groups
192
+ end
193
+ alias == eql?
173
194
  end
metadata CHANGED
@@ -1,65 +1,49 @@
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.0.4
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - BJ Dierkes
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-06-12 00:00:00 -05:00
18
- default_executable:
12
+ date: 2013-12-19 00:00:00.000000000 Z
19
13
  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
14
+ description: ParseConfig provides simple parsing of standard configuration files in
15
+ the form of 'param = value'. It also supports nested [group] sections.
16
+ email: derks@datafolklabs.com
23
17
  executables: []
24
-
25
18
  extensions: []
26
-
27
19
  extra_rdoc_files: []
28
-
29
- files:
20
+ files:
30
21
  - README.md
31
22
  - Changelog
32
23
  - LICENSE
33
24
  - lib/parseconfig.rb
34
- has_rdoc: true
35
- homepage: http://github.com/derks/ruby-parseconfig/
25
+ homepage: http://github.com/datafolklabs/ruby-parseconfig/
36
26
  licenses: []
37
-
38
27
  post_install_message:
39
28
  rdoc_options: []
40
-
41
- require_paths:
29
+ require_paths:
42
30
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- segments:
48
- - 0
49
- version: "0"
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
57
43
  requirements: []
58
-
59
44
  rubyforge_project:
60
- rubygems_version: 1.3.6
45
+ rubygems_version: 1.8.23
61
46
  signing_key:
62
47
  specification_version: 3
63
48
  summary: Config File Parser for Standard Unix/Linux Type Config Files
64
49
  test_files: []
65
-