configparser 0.1.6 → 0.1.7
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.
- checksums.yaml +4 -4
- data/lib/configparser.rb +62 -24
- data/lib/configparser/version.rb +1 -1
- data/test/test_configparser.rb +38 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb8bc149e5a58829a6df0e783ac6af630c27f44e
|
4
|
+
data.tar.gz: a3d86fc549c8b27e45f8a0a0e0efc5ee2cea2cb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5687f331eb4fe910ed142de3140db0a5b903876dd1adef3fdd0cc905ff8a8e7591dae8398336f252b4efd7eb760969013e70264e7aef1494598ee3e666698747
|
7
|
+
data.tar.gz: 19ba03f7b1ad9b6476a1a70631fccab8f398ec840a4d8bf3b2b6f8467c5efec4915adcd5456d56a47693137b45ec341ef6e6b0ae1b116e69a029d6546ffcc5f5
|
data/lib/configparser.rb
CHANGED
@@ -18,28 +18,56 @@ class ConfigParser < Hash
|
|
18
18
|
if section
|
19
19
|
self[section] = {} unless self[section]
|
20
20
|
key = $1
|
21
|
-
|
21
|
+
if self[section][key]
|
22
|
+
self[section][key] = [self[section][key]] unless self[section][key].is_a?(Array)
|
23
|
+
self[section][key] << $2
|
24
|
+
else
|
25
|
+
self[section][key] = $2
|
26
|
+
end
|
22
27
|
else
|
23
28
|
key = $1
|
24
|
-
|
29
|
+
if self[key]
|
30
|
+
self[key] = [self[key]] unless self[key].is_a?(Array)
|
31
|
+
self[key] << $2
|
32
|
+
else
|
33
|
+
self[key] = $2
|
34
|
+
end
|
25
35
|
end
|
26
36
|
elsif line =~ /^\s*\[(.+?)\]/ # handle new sections
|
27
37
|
section = $1
|
28
|
-
self[section] = {}
|
38
|
+
self[section] = {} unless self[section]
|
29
39
|
elsif line =~ /^\s+(.+?)$/ # handle continued lines
|
30
40
|
if section
|
31
|
-
|
41
|
+
if self[section][key].is_a?(Array)
|
42
|
+
self[section][key].last << " #{$1}";
|
43
|
+
else
|
44
|
+
self[section][key] << " #{$1}";
|
45
|
+
end
|
32
46
|
else
|
33
|
-
|
47
|
+
if self[key].is_a?(Array)
|
48
|
+
self[key].last << " #{$1}"
|
49
|
+
else
|
50
|
+
self[key] << " #{$1}"
|
51
|
+
end
|
34
52
|
end
|
35
53
|
elsif line =~ /^([\w\d\_\-]+)$/
|
36
54
|
if section
|
37
55
|
self[section] = {} unless self[section]
|
38
56
|
key = $1
|
39
|
-
|
57
|
+
if self[section][key]
|
58
|
+
self[section][key] = [self[section][key]] unless self[section][key].is_a?(Array)
|
59
|
+
self[section][key] << true
|
60
|
+
else
|
61
|
+
self[section][key] = true
|
62
|
+
end
|
40
63
|
else
|
41
64
|
key = $1
|
42
|
-
|
65
|
+
if self[key]
|
66
|
+
self[key] = [self[key]] unless self[key].is_a?(Array)
|
67
|
+
self[key] << true
|
68
|
+
else
|
69
|
+
self[key] = true
|
70
|
+
end
|
43
71
|
end
|
44
72
|
end
|
45
73
|
end
|
@@ -80,27 +108,37 @@ class ConfigParser < Hash
|
|
80
108
|
# print globals first
|
81
109
|
self.keys.sort.each do |k|
|
82
110
|
next if self[k].is_a? Hash
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
111
|
+
if not self[k].is_a?(Array)
|
112
|
+
self[k] = [self[k]]
|
113
|
+
end
|
114
|
+
self[k].each do |v|
|
115
|
+
if v === true
|
116
|
+
str << "#{k}\n"
|
117
|
+
elsif v == ""
|
118
|
+
str << "#{k}#{sep}\n"
|
119
|
+
else
|
120
|
+
str << "#{k}#{sep} #{v}\n"
|
121
|
+
end
|
122
|
+
end
|
90
123
|
end
|
91
124
|
|
92
125
|
# now print the sections
|
93
126
|
self.keys.sort.each do |k|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
127
|
+
next unless self[k].is_a? Hash
|
128
|
+
str << "[#{k}]\n"
|
129
|
+
self[k].sort.each do |j,v|
|
130
|
+
if not v.is_a?(Array)
|
131
|
+
v = [v]
|
132
|
+
end
|
133
|
+
v.each do |v2|
|
134
|
+
if v2 === true
|
135
|
+
str << "#{j}\n"
|
136
|
+
elsif v2 == ""
|
137
|
+
str << "#{j}#{sep}\n"
|
138
|
+
else
|
139
|
+
str << "#{j}#{sep} #{v2}\n"
|
140
|
+
end
|
141
|
+
end
|
104
142
|
end
|
105
143
|
end
|
106
144
|
str
|
data/lib/configparser/version.rb
CHANGED
data/test/test_configparser.rb
CHANGED
@@ -170,4 +170,42 @@ foo: bar
|
|
170
170
|
"
|
171
171
|
assert_equal(doc, cp.to_s)
|
172
172
|
end
|
173
|
+
|
174
|
+
def test_duplicate_sections
|
175
|
+
content = <<end_of_duplicate_section_example
|
176
|
+
[test1]
|
177
|
+
this=is a test
|
178
|
+
[test2]
|
179
|
+
pluto=is a dwarf planet
|
180
|
+
[test1]
|
181
|
+
redundant=am I repeating myself?
|
182
|
+
end_of_duplicate_section_example
|
183
|
+
answer = <<end_of_answer
|
184
|
+
[test1]
|
185
|
+
redundant: am I repeating myself?
|
186
|
+
this: is a test
|
187
|
+
[test2]
|
188
|
+
pluto: is a dwarf planet
|
189
|
+
end_of_answer
|
190
|
+
cp = ConfigParser.new()
|
191
|
+
cp.parse(content.each_line)
|
192
|
+
assert_equal(answer, cp.to_s)
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_duplicate_options
|
196
|
+
content = <<end_of_duplicate_options_example
|
197
|
+
[test1]
|
198
|
+
this=is a test
|
199
|
+
this=is another test
|
200
|
+
end_of_duplicate_options_example
|
201
|
+
answer = <<end_of_answer
|
202
|
+
[test1]
|
203
|
+
this: is a test
|
204
|
+
this: is another test
|
205
|
+
end_of_answer
|
206
|
+
cp = ConfigParser.new()
|
207
|
+
cp.parse(content.each_line)
|
208
|
+
assert_equal(answer, cp.to_s)
|
209
|
+
end
|
210
|
+
|
173
211
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chrislee35
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|