iniparser 1.0.0 → 1.0.1
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/README.md +46 -3
- data/Rakefile +1 -1
- data/lib/iniparser/parser.rb +3 -1
- data/lib/iniparser/version.rb +1 -1
- data/test/test_parser.rb +119 -25
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 864d2c269a38ca9efb21af2a1e8710c963edf9dc
|
4
|
+
data.tar.gz: 94e3fcd5157e7e8ab9a86e4be678e1eb5250d3d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b481907b4e2aac189c6a9fb12460ae8c5a7c0e286b822d68350a70465e53dc64e37e8743537d4a5e45b5a6aa330114ba8fe0ff2d8cabbaf51992b38782bb9a1
|
7
|
+
data.tar.gz: f6a5abb22e3baa710f7f3b4ffdab56957dbd1163bd8187bb24e61e0c0f1522345ea1f46b9f3f1d29f454d60895e9ee33bfea332489dfd71a4a906635620ef79f
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# iniparser - read / parse INI configuration, settings and data files into a hash
|
1
|
+
# iniparser - read / parse INI configuration, settings and data files into a hash (incl. named subsections)
|
2
2
|
|
3
3
|
|
4
4
|
* home :: [github.com/datatxt/iniparser](https://github.com/datatxt/iniparser)
|
@@ -168,7 +168,7 @@ file=payroll.dat
|
|
168
168
|
|
169
169
|
resulting in:
|
170
170
|
|
171
|
-
```
|
171
|
+
``` ruby
|
172
172
|
{"owner"=>{"name"=>"John Doe", "organization"=>"Acme Widgets Inc."},
|
173
173
|
"database"=>{"server"=>"192.0.2.62", "port"=>"143", "file"=>"payroll.dat"}}
|
174
174
|
```
|
@@ -217,6 +217,49 @@ resulting in:
|
|
217
217
|
"location"=>"Krak\u00F3w \u203A Poland"}}
|
218
218
|
```
|
219
219
|
|
220
|
+
**Rosetta Stone - Read A Configuration File**
|
221
|
+
|
222
|
+
```
|
223
|
+
# This is a configuration file in standard configuration file format
|
224
|
+
#
|
225
|
+
# Lines beginning with a hash or a semicolon are ignored by the application
|
226
|
+
# program. Blank lines are also ignored by the application program.
|
227
|
+
|
228
|
+
# This is the fullname parameter
|
229
|
+
FULLNAME Foo Barber
|
230
|
+
|
231
|
+
# This is a favourite fruit
|
232
|
+
FAVOURITEFRUIT banana
|
233
|
+
|
234
|
+
# This is a boolean that should be set
|
235
|
+
NEEDSPEELING
|
236
|
+
|
237
|
+
# This boolean is commented out
|
238
|
+
; SEEDSREMOVED
|
239
|
+
|
240
|
+
# Configuration option names are not case sensitive, but configuration parameter
|
241
|
+
# data is case sensitive and may be preserved by the application program.
|
242
|
+
|
243
|
+
# An optional equals sign can be used to separate configuration parameter data
|
244
|
+
# from the option name. This is dropped by the parser.
|
245
|
+
|
246
|
+
# A configuration option may take multiple parameters separated by commas.
|
247
|
+
# Leading and trailing whitespace around parameter names and parameter data fields
|
248
|
+
# are ignored by the application program.
|
249
|
+
|
250
|
+
OTHERFAMILY Rhu Barber, Harry Barber
|
251
|
+
```
|
252
|
+
|
253
|
+
resulting in:
|
254
|
+
|
255
|
+
``` ruby
|
256
|
+
{"FULLNAME"=>"Foo Barber",
|
257
|
+
"FAVOURITEFRUIT"=>"banana",
|
258
|
+
"NEEDSPEELING"=>"",
|
259
|
+
"OTHERFAMILY"=>"Rhu Barber, Harry Barber"}
|
260
|
+
```
|
261
|
+
|
262
|
+
|
220
263
|
|
221
264
|
## Frequently Asked Questions (FAQ) and Answers
|
222
265
|
|
@@ -284,7 +327,7 @@ and NOT resulting in:
|
|
284
327
|
``` ruby
|
285
328
|
{"http"=>
|
286
329
|
{"https://weak.example.com"=>
|
287
|
-
{"sslVerify"=>
|
330
|
+
{"sslVerify"=>false, "cookieFile"=>"/tmp/cookie.txt"}}}
|
288
331
|
```
|
289
332
|
|
290
333
|
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Hoe.spec 'iniparser' do
|
|
5
5
|
|
6
6
|
self.version = IniParser::VERSION
|
7
7
|
|
8
|
-
self.summary = 'iniparser - read / parse INI configuration, settings and data files into a hash'
|
8
|
+
self.summary = 'iniparser - read / parse INI configuration, settings and data files into a hash (incl. named subsections)'
|
9
9
|
self.description = summary
|
10
10
|
|
11
11
|
self.urls = ['https://github.com/datatxt/iniparser']
|
data/lib/iniparser/parser.rb
CHANGED
@@ -41,7 +41,9 @@ module IniParser
|
|
41
41
|
|
42
42
|
COMMENT_CLASS = '[#;]' # note: for now support # and ; - why? why not?
|
43
43
|
|
44
|
-
SEP_CLASS = '[=]' # note: name/value separator
|
44
|
+
SEP_CLASS = '[= ]' # note: name/value separator
|
45
|
+
# - for now support = AND yes, space!!
|
46
|
+
# (note: no longer support :) - why? why not?
|
45
47
|
|
46
48
|
|
47
49
|
# note: for now do NOT support dot (.) - keep reserved for hierarchy latter
|
data/lib/iniparser/version.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -31,11 +31,21 @@ class TestParser < MiniTest::Test
|
|
31
31
|
# comment here
|
32
32
|
title = A rose is a rose is a rose, eh?
|
33
33
|
; another comment here
|
34
|
-
title2 = A rose is a rose is a rose, eh?
|
34
|
+
title2 = A rose is a rose is a rose, eh?
|
35
35
|
TXT
|
36
36
|
|
37
37
|
hash = INI.load( text )
|
38
|
-
|
38
|
+
|
39
|
+
exp = {"key1"=>"hello",
|
40
|
+
"key2"=>"hi!",
|
41
|
+
"section1"=>{"key3"=>"salut"},
|
42
|
+
"section2"=>{"key4"=>"hola", "blank"=>"", "blank2"=>""},
|
43
|
+
"section3"=>
|
44
|
+
{"http://example.com"=>
|
45
|
+
{"title"=>"A rose is a rose is a rose, eh?",
|
46
|
+
"title2"=>"A rose is a rose is a rose, eh?"}}}
|
47
|
+
|
48
|
+
assert_equal exp, hash
|
39
49
|
|
40
50
|
assert_equal 'hello', hash['key1']
|
41
51
|
assert_equal 'hi!', hash['key2']
|
@@ -54,22 +64,22 @@ TXT
|
|
54
64
|
# a '#' or ';' character indicates
|
55
65
|
# a comment
|
56
66
|
#
|
57
|
-
|
67
|
+
|
58
68
|
; core variables
|
59
69
|
[core]
|
60
70
|
; Don't trust file modes
|
61
71
|
filemode = false
|
62
|
-
|
72
|
+
|
63
73
|
; Our diff algorithm
|
64
74
|
[diff]
|
65
75
|
external = /usr/local/bin/diff-wrapper
|
66
76
|
renames = true
|
67
|
-
|
77
|
+
|
68
78
|
; Proxy settings
|
69
79
|
[core]
|
70
80
|
gitproxy=proxy-command for kernel.org
|
71
81
|
gitproxy=default-proxy ; for all the rest
|
72
|
-
|
82
|
+
|
73
83
|
; HTTP
|
74
84
|
[http]
|
75
85
|
sslVerify
|
@@ -79,41 +89,64 @@ TXT
|
|
79
89
|
TXT
|
80
90
|
|
81
91
|
hash = INI.load( text )
|
82
|
-
pp hash
|
83
92
|
|
93
|
+
exp = {"core"=>{"filemode"=>"false", "gitproxy"=>"default-proxy"},
|
94
|
+
"diff"=>{"external"=>"/usr/local/bin/diff-wrapper", "renames"=>"true"},
|
95
|
+
"http"=>
|
96
|
+
{"sslVerify"=>"",
|
97
|
+
"https://weak.example.com"=>
|
98
|
+
{"sslVerify"=>"false", "cookieFile"=>"/tmp/cookie.txt"}}}
|
99
|
+
|
100
|
+
assert_equal exp, hash
|
84
101
|
|
85
102
|
assert_equal 'default-proxy', hash['core']['gitproxy']
|
86
103
|
|
87
104
|
assert_equal '', hash['http']['sslVerify']
|
88
|
-
assert_equal 'false', hash['http']['https://weak.example.com']['sslVerify']
|
105
|
+
assert_equal 'false', hash['http']['https://weak.example.com']['sslVerify']
|
89
106
|
end
|
90
107
|
|
91
108
|
def test_planet
|
92
109
|
text =<<TXT
|
93
110
|
title = Planet Ruby
|
94
|
-
|
111
|
+
|
95
112
|
[Ruby Lang News]
|
96
113
|
feed = http://www.ruby-lang.org/en/feeds/news.rss
|
97
|
-
|
114
|
+
|
98
115
|
[Rails Girls Summer of Code News]
|
99
116
|
feed = https://railsgirlssummerofcode.org/blog.xml
|
100
|
-
|
101
|
-
|
117
|
+
|
118
|
+
|
102
119
|
[Benoit Daloze]
|
103
120
|
feed = https://eregon.me/blog/feed.xml
|
104
121
|
location = Zürich › Switzerland
|
105
|
-
|
122
|
+
|
106
123
|
[Thomas Leitner]
|
107
124
|
feed = https://gettalong.org/posts.atom
|
108
125
|
location = Vienna • Wien › Austria
|
109
|
-
|
126
|
+
|
110
127
|
[Paweł Świątkowski]
|
111
128
|
feed = https://rubytuesday.katafrakt.me/feed.xml
|
112
129
|
location = Kraków › Poland
|
113
130
|
TXT
|
114
131
|
|
115
132
|
hash = INI.load( text )
|
116
|
-
|
133
|
+
|
134
|
+
exp = {"title"=>"Planet Ruby",
|
135
|
+
"Ruby Lang News"=>
|
136
|
+
{"feed"=>"http://www.ruby-lang.org/en/feeds/news.rss"},
|
137
|
+
"Rails Girls Summer of Code News"=>
|
138
|
+
{"feed"=>"https://railsgirlssummerofcode.org/blog.xml"},
|
139
|
+
"Benoit Daloze"=>
|
140
|
+
{"feed"=>"https://eregon.me/blog/feed.xml",
|
141
|
+
"location"=>"Zürich › Switzerland"},
|
142
|
+
"Thomas Leitner"=>
|
143
|
+
{"feed"=>"https://gettalong.org/posts.atom",
|
144
|
+
"location"=>"Vienna • Wien › Austria"},
|
145
|
+
"Paweł Świątkowski"=>
|
146
|
+
{"feed"=>"https://rubytuesday.katafrakt.me/feed.xml",
|
147
|
+
"location"=>"Kraków › Poland"}}
|
148
|
+
|
149
|
+
assert_equal exp, hash
|
117
150
|
|
118
151
|
assert_equal 'Kraków › Poland', hash['Paweł Świątkowski']['location']
|
119
152
|
end
|
@@ -123,22 +156,28 @@ TXT
|
|
123
156
|
[database "development"]
|
124
157
|
adapter = sqlite3
|
125
158
|
database = db/development.sqlite3
|
126
|
-
|
159
|
+
|
127
160
|
[database "test"]
|
128
161
|
adapter = sqlite3
|
129
162
|
database = db/test.sqlite3
|
130
|
-
|
163
|
+
|
131
164
|
[database "production"]
|
132
165
|
adapter = sqlite3
|
133
166
|
database = db/production.sqlite3
|
134
167
|
TXT
|
135
168
|
|
136
169
|
hash = INI.load( text )
|
137
|
-
|
170
|
+
|
171
|
+
exp = {"database"=>
|
172
|
+
{"development"=>{"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"},
|
173
|
+
"test"=>{"adapter"=>"sqlite3", "database"=>"db/test.sqlite3"},
|
174
|
+
"production"=>{"adapter"=>"sqlite3", "database"=>"db/production.sqlite3"}}}
|
175
|
+
|
176
|
+
assert_equal exp, hash
|
138
177
|
|
139
178
|
assert_equal 'db/development.sqlite3', hash['database']['development']['database']
|
140
179
|
assert_equal 'db/test.sqlite3', hash['database']['test']['database']
|
141
|
-
end
|
180
|
+
end
|
142
181
|
|
143
182
|
def test_windows
|
144
183
|
text =<<TXT
|
@@ -146,7 +185,7 @@ TXT
|
|
146
185
|
[owner]
|
147
186
|
name=John Doe
|
148
187
|
organization=Acme Widgets Inc.
|
149
|
-
|
188
|
+
|
150
189
|
[database]
|
151
190
|
; use IP address in case network name resolution is not working
|
152
191
|
server=192.0.2.62
|
@@ -155,10 +194,14 @@ TXT
|
|
155
194
|
TXT
|
156
195
|
|
157
196
|
hash = INI.load( text )
|
158
|
-
|
197
|
+
|
198
|
+
exp = {"owner"=>{"name"=>"John Doe", "organization"=>"Acme Widgets Inc."},
|
199
|
+
"database"=>{"server"=>"192.0.2.62", "port"=>"143", "file"=>"payroll.dat"}}
|
200
|
+
|
201
|
+
assert_equal exp, hash
|
159
202
|
|
160
203
|
assert_equal '192.0.2.62', hash['database']['server']
|
161
|
-
end
|
204
|
+
end
|
162
205
|
|
163
206
|
def test_quick
|
164
207
|
## from python's configparser
|
@@ -168,20 +211,71 @@ TXT
|
|
168
211
|
Compression = yes
|
169
212
|
CompressionLevel = 9
|
170
213
|
ForwardX11 = yes
|
171
|
-
|
214
|
+
|
172
215
|
[bitbucket.org]
|
173
216
|
User = hg
|
174
|
-
|
217
|
+
|
175
218
|
[topsecret.server.com]
|
176
219
|
Port = 50022
|
177
220
|
ForwardX11 = no
|
178
221
|
TXT
|
179
222
|
|
180
223
|
hash = INI.load( text )
|
181
|
-
|
224
|
+
|
225
|
+
exp = {"DEFAULT"=>
|
226
|
+
{"ServerAliveInterval"=>"45",
|
227
|
+
"Compression"=>"yes",
|
228
|
+
"CompressionLevel"=>"9",
|
229
|
+
"ForwardX11"=>"yes"},
|
230
|
+
"bitbucket.org"=>{"User"=>"hg"},
|
231
|
+
"topsecret.server.com"=>{"Port"=>"50022", "ForwardX11"=>"no"}}
|
232
|
+
|
233
|
+
assert_equal exp, hash
|
182
234
|
|
183
235
|
assert_equal 'yes', hash['DEFAULT']['ForwardX11']
|
184
236
|
assert_equal 'hg', hash['bitbucket.org']['User']
|
185
237
|
assert_equal 'no', hash['topsecret.server.com']['ForwardX11']
|
186
238
|
end
|
239
|
+
|
240
|
+
def test_rosetta_stone
|
241
|
+
text =<<TXT
|
242
|
+
# This is a configuration file in standard configuration file format
|
243
|
+
#
|
244
|
+
# Lines beginning with a hash or a semicolon are ignored by the application
|
245
|
+
# program. Blank lines are also ignored by the application program.
|
246
|
+
|
247
|
+
# This is the fullname parameter
|
248
|
+
FULLNAME Foo Barber
|
249
|
+
|
250
|
+
# This is a favourite fruit
|
251
|
+
FAVOURITEFRUIT banana
|
252
|
+
|
253
|
+
# This is a boolean that should be set
|
254
|
+
NEEDSPEELING
|
255
|
+
|
256
|
+
# This boolean is commented out
|
257
|
+
; SEEDSREMOVED
|
258
|
+
|
259
|
+
# Configuration option names are not case sensitive, but configuration parameter
|
260
|
+
# data is case sensitive and may be preserved by the application program.
|
261
|
+
|
262
|
+
# An optional equals sign can be used to separate configuration parameter data
|
263
|
+
# from the option name. This is dropped by the parser.
|
264
|
+
|
265
|
+
# A configuration option may take multiple parameters separated by commas.
|
266
|
+
# Leading and trailing whitespace around parameter names and parameter data fields
|
267
|
+
# are ignored by the application program.
|
268
|
+
|
269
|
+
OTHERFAMILY Rhu Barber, Harry Barber
|
270
|
+
TXT
|
271
|
+
|
272
|
+
hash = INI.load( text )
|
273
|
+
|
274
|
+
exp = {"FULLNAME"=>"Foo Barber",
|
275
|
+
"FAVOURITEFRUIT"=>"banana",
|
276
|
+
"NEEDSPEELING"=>"",
|
277
|
+
"OTHERFAMILY"=>"Rhu Barber, Harry Barber"}
|
278
|
+
|
279
|
+
assert_equal exp, hash
|
280
|
+
end
|
187
281
|
end # class TestParser
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iniparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.16'
|
41
41
|
description: iniparser - read / parse INI configuration, settings and data files into
|
42
|
-
a hash
|
42
|
+
a hash (incl. named subsections)
|
43
43
|
email: ruby-talk@ruby-lang.org
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
@@ -85,5 +85,5 @@ rubygems_version: 2.5.2
|
|
85
85
|
signing_key:
|
86
86
|
specification_version: 4
|
87
87
|
summary: iniparser - read / parse INI configuration, settings and data files into
|
88
|
-
a hash
|
88
|
+
a hash (incl. named subsections)
|
89
89
|
test_files: []
|