inifile 2.0.2 → 3.0.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/README.md +23 -1
- data/Rakefile +1 -1
- data/inifile.gemspec +24 -0
- data/lib/inifile.rb +277 -201
- data/test/data/bad_2.ini +11 -0
- data/test/data/comment.ini +1 -1
- data/test/data/continuation.ini +6 -0
- data/test/data/good.ini +4 -4
- data/test/data/section.ini +4 -0
- data/test/test_inifile.rb +132 -63
- metadata +65 -41
data/test/data/bad_2.ini
ADDED
data/test/data/comment.ini
CHANGED
data/test/data/good.ini
CHANGED
@@ -3,15 +3,15 @@ one = 1
|
|
3
3
|
two = 2
|
4
4
|
|
5
5
|
[section_two]
|
6
|
-
three = 3
|
6
|
+
three = -3
|
7
7
|
multi = multiline \
|
8
8
|
support
|
9
9
|
|
10
10
|
; comments should be ignored
|
11
11
|
[section three]
|
12
|
-
four =
|
13
|
-
five=
|
14
|
-
six =6
|
12
|
+
four =true
|
13
|
+
five=false # comments can go here
|
14
|
+
six =6.0 ; and here, too
|
15
15
|
|
16
16
|
[section_four]
|
17
17
|
[section_five]
|
data/test/test_inifile.rb
CHANGED
@@ -11,13 +11,13 @@ class TestIniFile < Test::Unit::TestCase
|
|
11
11
|
def setup
|
12
12
|
@ini_file = IniFile.new(:filename => 'test/data/good.ini')
|
13
13
|
@contents = [
|
14
|
-
['section_one', 'one',
|
15
|
-
['section_one', 'two',
|
16
|
-
['section_two', 'three',
|
14
|
+
['section_one', 'one', 1],
|
15
|
+
['section_one', 'two', 2],
|
16
|
+
['section_two', 'three', -3],
|
17
17
|
['section_two', 'multi', "multiline support"],
|
18
|
-
['section three', 'four',
|
19
|
-
['section three', 'five',
|
20
|
-
['section three', 'six',
|
18
|
+
['section three', 'four', true],
|
19
|
+
['section three', 'five', false],
|
20
|
+
['section three', 'six', 6.0],
|
21
21
|
['section_five', 'seven and eight', '7 & 8']
|
22
22
|
].sort
|
23
23
|
|
@@ -84,7 +84,7 @@ class TestIniFile < Test::Unit::TestCase
|
|
84
84
|
def test_delete_section
|
85
85
|
assert_nil @ini_file.delete_section('section_nil')
|
86
86
|
|
87
|
-
h = {'one' =>
|
87
|
+
h = {'one' => 1, 'two' => 2}
|
88
88
|
assert_equal true, @ini_file.has_section?('section_one')
|
89
89
|
assert_equal h, @ini_file.delete_section('section_one')
|
90
90
|
assert_equal false, @ini_file.has_section?('section_one')
|
@@ -148,7 +148,7 @@ class TestIniFile < Test::Unit::TestCase
|
|
148
148
|
assert @ini_file.eql?(@ini_file)
|
149
149
|
assert @ini_file.eql?(@ini_file.clone)
|
150
150
|
assert !@ini_file.eql?('string')
|
151
|
-
assert !@ini_file.eql?(IniFile.new(''))
|
151
|
+
assert !@ini_file.eql?(IniFile.new(:content => ''))
|
152
152
|
end
|
153
153
|
|
154
154
|
def test_freeze
|
@@ -179,18 +179,18 @@ class TestIniFile < Test::Unit::TestCase
|
|
179
179
|
|
180
180
|
def test_index
|
181
181
|
expected = {
|
182
|
-
'one' =>
|
183
|
-
'two' =>
|
182
|
+
'one' => 1,
|
183
|
+
'two' => 2
|
184
184
|
}
|
185
185
|
assert_equal expected, @ini_file[:section_one]
|
186
186
|
|
187
|
-
expected = {'three' =>
|
187
|
+
expected = {'three' => -3, 'multi' => "multiline support"}
|
188
188
|
assert_equal expected, @ini_file['section_two']
|
189
189
|
|
190
190
|
expected = {
|
191
|
-
'four' =>
|
192
|
-
'five' =>
|
193
|
-
'six' =>
|
191
|
+
'four' => true,
|
192
|
+
'five' => false,
|
193
|
+
'six' => 6.0,
|
194
194
|
}
|
195
195
|
assert_equal expected, @ini_file['section three']
|
196
196
|
|
@@ -214,13 +214,11 @@ class TestIniFile < Test::Unit::TestCase
|
|
214
214
|
|
215
215
|
def test_match
|
216
216
|
expected = {
|
217
|
-
"section_two" =>
|
218
|
-
|
219
|
-
"three"=>"3", "multi"=>"multiline support"
|
217
|
+
"section_two" => {
|
218
|
+
"three" => -3, "multi" => "multiline support"
|
220
219
|
},
|
221
|
-
|
222
|
-
|
223
|
-
"four"=>"4", "five"=>"5", "six"=>"6"
|
220
|
+
"section three" => {
|
221
|
+
"four" => true, "five"=> false, "six" => 6.0
|
224
222
|
}
|
225
223
|
}
|
226
224
|
assert_equal expected, @ini_file.match(/(two|three)/)
|
@@ -245,8 +243,8 @@ class TestIniFile < Test::Unit::TestCase
|
|
245
243
|
|
246
244
|
ini_file = IniFile.new(:filename => 'test/data/param.ini', :parameter => ':')
|
247
245
|
assert ini_file.has_section?('section_one')
|
248
|
-
assert_equal
|
249
|
-
assert_equal
|
246
|
+
assert_equal 1, ini_file['section_one']['one']
|
247
|
+
assert_equal 2, ini_file['section_one']['two']
|
250
248
|
|
251
249
|
# make sure we error out on files with bad lines
|
252
250
|
assert_raise(IniFile::Error) {IniFile.new :filename => 'test/data/bad_1.ini'}
|
@@ -254,7 +252,7 @@ class TestIniFile < Test::Unit::TestCase
|
|
254
252
|
|
255
253
|
def test_initialize_from_string_without_ending_newline
|
256
254
|
content = "[section_one]\n foo=bar"
|
257
|
-
ini_file = IniFile.new(content)
|
255
|
+
ini_file = IniFile.new(:content => content)
|
258
256
|
assert ini_file.has_section?('section_one')
|
259
257
|
assert_equal 'bar', ini_file['section_one']['foo']
|
260
258
|
end
|
@@ -262,7 +260,7 @@ class TestIniFile < Test::Unit::TestCase
|
|
262
260
|
def test_initialize_from_string
|
263
261
|
content = File.read('test/data/good.ini')
|
264
262
|
|
265
|
-
ini_file = IniFile.new(content, :comment => ';')
|
263
|
+
ini_file = IniFile.new(:content => content, :comment => ';')
|
266
264
|
assert ini_file.has_section?('section_one')
|
267
265
|
assert ini_file.has_section?('section_two')
|
268
266
|
assert ini_file.has_section?('section three')
|
@@ -272,6 +270,35 @@ class TestIniFile < Test::Unit::TestCase
|
|
272
270
|
assert_equal '7 & 8', ini_file['section_five']['seven and eight']
|
273
271
|
end
|
274
272
|
|
273
|
+
def test_initialize_from_hash
|
274
|
+
hash = {
|
275
|
+
'section one' => {
|
276
|
+
'foo' => 'bar',
|
277
|
+
'baz' => 'buz'
|
278
|
+
},
|
279
|
+
'colors' => {
|
280
|
+
'perrywinkle' => '7e6ff3',
|
281
|
+
'steelblue' => '4682b4'
|
282
|
+
},
|
283
|
+
'empty' => nil
|
284
|
+
}
|
285
|
+
|
286
|
+
ini_file = IniFile.new(:content => hash)
|
287
|
+
assert ini_file.has_section?('section one')
|
288
|
+
assert ini_file.has_section?('colors')
|
289
|
+
assert ini_file.has_section?('empty')
|
290
|
+
|
291
|
+
assert_equal %w[baz foo], ini_file['section one'].keys.sort
|
292
|
+
assert_equal 'bar', ini_file['section one']['foo']
|
293
|
+
assert_equal 'buz', ini_file['section one']['baz']
|
294
|
+
|
295
|
+
assert_equal %w[perrywinkle steelblue], ini_file['colors'].keys.sort
|
296
|
+
assert_equal '7e6ff3', ini_file['colors']['perrywinkle']
|
297
|
+
assert_equal '4682b4', ini_file['colors']['steelblue']
|
298
|
+
|
299
|
+
assert_empty ini_file['empty']
|
300
|
+
end
|
301
|
+
|
275
302
|
def test_sections
|
276
303
|
expected = [
|
277
304
|
'section_one', 'section_two', 'section three',
|
@@ -323,8 +350,8 @@ class TestIniFile < Test::Unit::TestCase
|
|
323
350
|
assert_equal 42, @ini_file['section_one']['two']
|
324
351
|
|
325
352
|
@ini_file.read
|
326
|
-
assert_equal
|
327
|
-
assert_equal
|
353
|
+
assert_equal 1, @ini_file['section_one']['one']
|
354
|
+
assert_equal 2, @ini_file['section_one']['two']
|
328
355
|
|
329
356
|
@ini_file.read(:filename => 'test/data/mixed_comment.ini')
|
330
357
|
assert_equal false, @ini_file.has_section?('section_two')
|
@@ -392,61 +419,73 @@ class TestIniFile < Test::Unit::TestCase
|
|
392
419
|
assert_equal expected, multiple
|
393
420
|
|
394
421
|
multiple = ini_file['empty_lines']
|
395
|
-
expected = {'empty' =>
|
422
|
+
expected = {'empty' => nil, 'not_empty' => 'full'}
|
396
423
|
assert_equal expected, multiple
|
397
424
|
end
|
398
425
|
|
399
426
|
def test_merge
|
400
427
|
ini_file = @ini_file.merge(IniFile.load("test/data/merge.ini"))
|
401
|
-
assert_equal
|
402
|
-
assert_equal
|
428
|
+
assert_equal 3, ini_file['section_one']['one']
|
429
|
+
assert_equal 2, ini_file['section_one']['two']
|
403
430
|
|
404
431
|
# make sure that the rest haven't changed
|
405
|
-
assert_equal
|
432
|
+
assert_equal(-3, ini_file['section_two']['three'])
|
406
433
|
|
407
434
|
# and that we got any additional sections too
|
408
|
-
assert_equal
|
435
|
+
assert_equal 5, ini_file['section_five']['five']
|
409
436
|
|
410
437
|
# original object is unchanged
|
411
|
-
assert_equal
|
438
|
+
assert_equal 1, @ini_file['section_one']['one']
|
412
439
|
end
|
413
440
|
|
414
441
|
def test_merge_hash
|
415
442
|
ini_file = @ini_file.merge({
|
416
|
-
'section_one' => { 'one' =>
|
417
|
-
'section_five' => { 'five' =>
|
443
|
+
'section_one' => { 'one' => 3 },
|
444
|
+
'section_five' => { 'five' => 5 }
|
418
445
|
})
|
419
|
-
assert_equal
|
420
|
-
assert_equal
|
446
|
+
assert_equal 3, ini_file['section_one']['one']
|
447
|
+
assert_equal 2, ini_file['section_one']['two']
|
421
448
|
|
422
449
|
# make sure that the rest haven't changed
|
423
|
-
assert_equal
|
450
|
+
assert_equal(-3, ini_file['section_two']['three'])
|
424
451
|
|
425
452
|
# and that we got any additional sections too
|
426
|
-
assert_equal
|
453
|
+
assert_equal 5, ini_file['section_five']['five']
|
427
454
|
|
428
455
|
# original object is unchanged
|
429
|
-
assert_equal
|
456
|
+
assert_equal 1, @ini_file['section_one']['one']
|
430
457
|
end
|
431
458
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
assert_equal ini_file['www.substancia.com AutoHTTPAgent (ver *)']['Browser'], "Subst\xE2ncia".force_encoding('ISO-8859-1')
|
436
|
-
end
|
459
|
+
def test_merge_invalid_hash
|
460
|
+
bad_hash = { 'section_one' => [1, 2, 3, 4] }
|
461
|
+
assert_raise(IniFile::Error) { @ini_file.merge(bad_hash) }
|
437
462
|
|
438
|
-
|
439
|
-
|
440
|
-
File.delete tmp if Kernel.test(?f, tmp)
|
463
|
+
bad_hash = { 'foo' => 'bar' }
|
464
|
+
assert_raise(IniFile::Error) { @ini_file.merge(bad_hash) }
|
441
465
|
|
442
|
-
|
443
|
-
|
466
|
+
not_a_hash = [['section_one', ['foo','bar'], ['baz', 'buz']]]
|
467
|
+
assert_raise(IniFile::Error) { @ini_file.merge(not_a_hash) }
|
444
468
|
|
445
|
-
|
469
|
+
ini_file = @ini_file.merge nil
|
470
|
+
assert ini_file.eql?(@ini_file)
|
471
|
+
end
|
446
472
|
|
447
|
-
|
448
|
-
|
449
|
-
|
473
|
+
def test_parse_encoding
|
474
|
+
ini_file = IniFile.new(:filename => "test/data/browscap.ini", :encoding => 'ISO-8859-1')
|
475
|
+
assert_equal ini_file['www.substancia.com AutoHTTPAgent (ver *)']['Browser'], "Subst\xE2ncia".force_encoding('ISO-8859-1')
|
476
|
+
end
|
477
|
+
|
478
|
+
def test_write_encoding
|
479
|
+
tmp = 'test/data/tmp.ini'
|
480
|
+
File.delete tmp if Kernel.test(?f, tmp)
|
481
|
+
|
482
|
+
@ini_file = IniFile.new(:filename => tmp, :encoding => 'UTF-8')
|
483
|
+
@ini_file['testutf-8'] = {"utf-8" => "appr\u20accier"}
|
484
|
+
|
485
|
+
@ini_file.save(:filename => tmp)
|
486
|
+
|
487
|
+
test = File.open(tmp)
|
488
|
+
assert_equal test.external_encoding.to_s, 'UTF-8'
|
450
489
|
end
|
451
490
|
|
452
491
|
def test_value_escaping
|
@@ -461,32 +500,62 @@ class TestIniFile < Test::Unit::TestCase
|
|
461
500
|
assert_equal %Q{Escaping works\tinside quoted strings!}, escaped['quoted']
|
462
501
|
end
|
463
502
|
|
503
|
+
# disabling escaping is no longer supported
|
464
504
|
def test_value_escaping_disabled
|
465
505
|
ini_file = IniFile.load('test/data/escape.ini', :escape => false)
|
466
506
|
escaped = ini_file['escaped']
|
467
507
|
|
468
|
-
assert_equal %
|
469
|
-
assert_equal %
|
470
|
-
assert_equal %
|
471
|
-
assert_equal %Q{Who'd be silly enough to put
|
472
|
-
assert_equal %q{This string
|
473
|
-
assert_equal %
|
508
|
+
assert_equal %Q{There is a tab\tcharacter in here somewhere}, escaped['tabs']
|
509
|
+
assert_equal %Q{Who uses these anyways?\r}, escaped['carriage return']
|
510
|
+
assert_equal %Q{Trust newline!\nAlways there when you need him.\nSplittin' those lines.}, escaped['newline']
|
511
|
+
assert_equal %Q{Who'd be silly enough to put\0 a null character in the middle of a string? Stroustrup would not approve!}, escaped['null']
|
512
|
+
assert_equal %q{This string \t contains \n no \r special \0 characters!}, escaped['backslash']
|
513
|
+
assert_equal %Q{Escaping works\tinside quoted strings!}, escaped['quoted']
|
474
514
|
end
|
475
515
|
|
476
516
|
def test_global_section
|
477
517
|
ini_file = IniFile.load('test/data/global.ini')
|
478
518
|
|
479
519
|
assert_equal %w[global], ini_file.sections
|
480
|
-
assert_equal
|
481
|
-
assert_equal
|
520
|
+
assert_equal 1, ini_file['global']['one']
|
521
|
+
assert_equal 2, ini_file['global']['two']
|
482
522
|
end
|
483
523
|
|
484
524
|
def test_default_global_section
|
485
525
|
ini_file = IniFile.load('test/data/global.ini', :default => 'nonce')
|
486
526
|
|
487
527
|
assert_equal %w[nonce], ini_file.sections
|
488
|
-
assert_equal
|
489
|
-
assert_equal
|
528
|
+
assert_equal 1, ini_file['nonce']['one']
|
529
|
+
assert_equal 2, ini_file['nonce']['two']
|
530
|
+
end
|
531
|
+
|
532
|
+
def test_unescaped_section_header_as_value
|
533
|
+
ini_file = IniFile.load('test/data/section.ini')
|
534
|
+
|
535
|
+
assert_equal %w[section_one], ini_file.sections
|
536
|
+
assert_equal '[value]', ini_file['section_one']['one']
|
537
|
+
assert_equal 2, ini_file['section_one']['two']
|
538
|
+
end
|
539
|
+
|
540
|
+
def test_unmatched_quotes
|
541
|
+
# missing a closing quote should raise an error
|
542
|
+
assert_raise(IniFile::Error) { IniFile.load 'test/data/bad_2.ini' }
|
543
|
+
end
|
544
|
+
|
545
|
+
def test_continuation_at_end_of_file
|
546
|
+
ini_file = IniFile.load('test/data/continuation.ini')
|
547
|
+
|
548
|
+
assert_equal 1, ini_file['section_one']['one']
|
549
|
+
assert_equal 2, ini_file['section_one']['two']
|
550
|
+
|
551
|
+
assert_equal 'here is the last value', ini_file['section_two']['end-of-file']
|
552
|
+
end
|
553
|
+
|
554
|
+
def test_empty_comment_string
|
555
|
+
ini_file = IniFile.load('test/data/merge.ini', :comment => nil)
|
556
|
+
|
557
|
+
assert_equal 3, ini_file['section_one']['one']
|
558
|
+
assert_equal 5, ini_file['section_five']['five']
|
490
559
|
end
|
491
560
|
end
|
492
561
|
|
metadata
CHANGED
@@ -1,80 +1,104 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inifile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tim Pease
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-08-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bones-git
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '1.3'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '1.3'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: bones
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3.8.
|
33
|
+
version: 3.8.1
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: 3.8.
|
46
|
-
description:
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
40
|
+
version: 3.8.1
|
41
|
+
description: |-
|
42
|
+
Although made popular by Windows, INI files can be used on any system thanks
|
43
|
+
to their flexibility. They allow a program to store configuration data, which
|
44
|
+
can then be easily parsed and changed. Two notable systems that use the INI
|
45
|
+
format are Samba and Trac.
|
46
|
+
|
47
|
+
More information about INI files can be found on the [Wikipedia Page](http://en.wikipedia.org/wiki/INI_file).
|
48
|
+
|
49
|
+
### Properties
|
50
|
+
|
51
|
+
The basic element contained in an INI file is the property. Every property has
|
52
|
+
a name and a value, delimited by an equals sign *=*. The name appears to the
|
53
|
+
left of the equals sign and the value to the right.
|
54
|
+
|
55
|
+
name=value
|
56
|
+
|
57
|
+
### Sections
|
58
|
+
|
59
|
+
Section declarations start with *[* and end with *]* as in `[section1]` and
|
60
|
+
`[section2]` shown in the example below. The section declaration marks the
|
61
|
+
beginning of a section. All properties after the section declaration will be
|
62
|
+
associated with that section.
|
63
|
+
|
64
|
+
### Comments
|
65
|
+
|
66
|
+
All lines beginning with a semicolon *;* or a number sign *#* are considered
|
67
|
+
to be comments. Comment lines are ignored when parsing INI files.
|
68
|
+
|
69
|
+
### Example File Format
|
70
|
+
|
71
|
+
A typical INI file might look like this:
|
72
|
+
|
73
|
+
[section1]
|
74
|
+
; some comment on section1
|
75
|
+
var1 = foo
|
76
|
+
var2 = doodle
|
77
|
+
var3 = multiline values \
|
78
|
+
are also possible
|
79
|
+
|
80
|
+
[section2]
|
81
|
+
# another comment
|
82
|
+
var1 = baz
|
83
|
+
var2 = shoodle
|
63
84
|
email: tim.pease@gmail.com
|
64
85
|
executables: []
|
65
86
|
extensions: []
|
66
87
|
extra_rdoc_files:
|
67
88
|
- History.txt
|
68
89
|
files:
|
69
|
-
- .gitignore
|
70
|
-
- .travis.yml
|
90
|
+
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
71
92
|
- History.txt
|
72
93
|
- README.md
|
73
94
|
- Rakefile
|
95
|
+
- inifile.gemspec
|
74
96
|
- lib/inifile.rb
|
75
97
|
- test/data/bad_1.ini
|
98
|
+
- test/data/bad_2.ini
|
76
99
|
- test/data/browscap.ini
|
77
100
|
- test/data/comment.ini
|
101
|
+
- test/data/continuation.ini
|
78
102
|
- test/data/escape.ini
|
79
103
|
- test/data/global.ini
|
80
104
|
- test/data/good.ini
|
@@ -82,32 +106,32 @@ files:
|
|
82
106
|
- test/data/mixed_comment.ini
|
83
107
|
- test/data/multiline.ini
|
84
108
|
- test/data/param.ini
|
109
|
+
- test/data/section.ini
|
85
110
|
- test/test_inifile.rb
|
86
111
|
homepage: http://rubygems.org/gems/inifile
|
87
112
|
licenses: []
|
113
|
+
metadata: {}
|
88
114
|
post_install_message:
|
89
115
|
rdoc_options:
|
90
|
-
- --main
|
116
|
+
- "--main"
|
91
117
|
- README.md
|
92
118
|
require_paths:
|
93
119
|
- lib
|
94
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
121
|
requirements:
|
97
|
-
- -
|
122
|
+
- - ">="
|
98
123
|
- !ruby/object:Gem::Version
|
99
124
|
version: '0'
|
100
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
126
|
requirements:
|
103
|
-
- -
|
127
|
+
- - ">="
|
104
128
|
- !ruby/object:Gem::Version
|
105
129
|
version: '0'
|
106
130
|
requirements: []
|
107
131
|
rubyforge_project: inifile
|
108
|
-
rubygems_version:
|
132
|
+
rubygems_version: 2.2.2
|
109
133
|
signing_key:
|
110
|
-
specification_version:
|
134
|
+
specification_version: 4
|
111
135
|
summary: INI file reader and writer
|
112
136
|
test_files:
|
113
137
|
- test/test_inifile.rb
|