iniparser 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +2 -0
- data/README.md +76 -3
- data/Rakefile +1 -1
- data/lib/iniparser.rb +14 -0
- data/lib/iniparser/parser.rb +86 -0
- data/lib/iniparser/version.rb +2 -2
- data/test/test_parser.rb +51 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 361522b3234615dbc73ae63ecd9abbb9ed1df79a
|
4
|
+
data.tar.gz: 9c7d1909eb8a8c7d5616d9be5d8d2f9021ee2d1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd91875fcc709176b7a1da91264497c82aa954660debcc5b3a51083f5c521618cf728e382c66b1b09ddbc32b2bea11c304f1e815ea0995fc6ea4fc79577811c5
|
7
|
+
data.tar.gz: 34a3188526a16e62006c34d4a9406c2f5c256ea020ceea8def88c68d105fb14670782cf54a6d7bd8a47ac5c1db48342464b8f7de3e269e04f8d42b2e0e755983
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# iniparser
|
2
2
|
|
3
|
-
iniparser gem - read INI configuration, setttings and data files into a hash
|
3
|
+
iniparser gem - read / parse INI configuration, setttings and data files into a hash
|
4
4
|
|
5
5
|
|
6
6
|
* home :: [github.com/datatxt/iniparser](https://github.com/datatxt/iniparser)
|
@@ -9,12 +9,85 @@ iniparser gem - read INI configuration, setttings and data files into a hash
|
|
9
9
|
* rdoc :: [rubydoc.info/gems/iniparser](http://rubydoc.info/gems/iniparser)
|
10
10
|
|
11
11
|
|
12
|
-
## Usage
|
13
12
|
|
14
|
-
|
13
|
+
## Usage - `INI.load`, `INI.load_file`
|
14
|
+
|
15
|
+
Use `INI.load` or `INI.load_file`. Example:
|
16
|
+
|
17
|
+
|
18
|
+
``` ruby
|
19
|
+
require 'iniparser'
|
20
|
+
|
21
|
+
text = <<TXT
|
22
|
+
# comment
|
23
|
+
; another comment
|
24
|
+
|
25
|
+
key1 = hello
|
26
|
+
key2 : hi!
|
27
|
+
|
28
|
+
[section1]
|
29
|
+
key3 = salut # end of line comment here
|
30
|
+
|
31
|
+
[section2]
|
32
|
+
key4: hola
|
33
|
+
blank =
|
34
|
+
blank2:
|
35
|
+
|
36
|
+
[ http://example.com ]
|
37
|
+
title = A rose is a rose is a rose, eh?
|
38
|
+
title2: A rose is a rose is a rose, eh? # comment here
|
39
|
+
; another one here
|
40
|
+
title3 = A rose is a rose is a rose, eh?
|
41
|
+
TXT
|
42
|
+
|
43
|
+
hash = INI.load( text )
|
44
|
+
pp hash
|
45
|
+
```
|
46
|
+
|
47
|
+
resulting in:
|
48
|
+
|
49
|
+
``` ruby
|
50
|
+
{"key1"=>"hello",
|
51
|
+
"key2"=>"hi!",
|
52
|
+
"section1"=>{"key3"=>"salut"},
|
53
|
+
"section2"=>{"key4"=>"hola", "blank"=>"", "blank2"=>""},
|
54
|
+
"http://example.com"=>
|
55
|
+
{"title"=>"A rose is a rose is a rose, eh?",
|
56
|
+
"title2"=>"A rose is a rose is a rose, eh?",
|
57
|
+
"title3"=>"A rose is a rose is a rose, eh?"}}
|
58
|
+
```
|
59
|
+
|
60
|
+
to access use:
|
61
|
+
|
62
|
+
``` ruby
|
63
|
+
puts hash['key1']
|
64
|
+
# => 'hello'
|
65
|
+
puts hash['key2']
|
66
|
+
# => 'hi!'
|
67
|
+
puts hash['section1']['key3']
|
68
|
+
# => 'salut'
|
69
|
+
puts hash['section2']['key4']
|
70
|
+
# => 'hola'
|
71
|
+
puts hash['section2']['blank']
|
72
|
+
# => ''
|
73
|
+
puts hash['section2']['blank2']
|
74
|
+
# => ''
|
75
|
+
puts hash['http://example.com']['title']
|
76
|
+
# => 'A rose is a rose is a rose, eh?'
|
77
|
+
puts hash['http://example.com']['title2']
|
78
|
+
# => 'A rose is a rose is a rose, eh?'
|
79
|
+
puts hash['http://example.com']['title3']
|
80
|
+
# => 'A rose is a rose is a rose, eh?'
|
81
|
+
```
|
15
82
|
|
16
83
|
|
17
84
|
## License
|
18
85
|
|
86
|
+
![](https://publicdomainworks.github.io/buttons/zero88x31.png)
|
87
|
+
|
19
88
|
The `iniparser` scripts are dedicated to the public domain.
|
20
89
|
Use it as you please with no restrictions whatsoever.
|
90
|
+
|
91
|
+
## Questions? Comments?
|
92
|
+
|
93
|
+
Post them to the [wwwmake forum](http://groups.google.com/group/wwwmake). Thanks!
|
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 INI configuration, setttings and data files into a hash'
|
8
|
+
self.summary = 'iniparser - read / parse INI configuration, setttings and data files into a hash'
|
9
9
|
self.description = summary
|
10
10
|
|
11
11
|
self.urls = ['https://github.com/datatxt/iniparser']
|
data/lib/iniparser.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
|
4
|
+
require 'pp'
|
4
5
|
|
5
6
|
# our own code
|
6
7
|
require 'iniparser/version' # note: let version always go first
|
8
|
+
require 'iniparser/parser'
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
module INI
|
13
|
+
|
14
|
+
# returns a nested hash
|
15
|
+
# (compatible structure - works like YAML.load_file)
|
16
|
+
|
17
|
+
def self.load_file( path ) IniParser::IniParser.load_file( path ); end
|
18
|
+
def self.load( text ) IniParser::IniParser.load( text ); end
|
19
|
+
|
20
|
+
end # module INI
|
7
21
|
|
8
22
|
|
9
23
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module IniParser
|
5
|
+
|
6
|
+
|
7
|
+
class IniParser
|
8
|
+
|
9
|
+
# returns a nested hash
|
10
|
+
# (compatible structure - works like YAML.load_file)
|
11
|
+
|
12
|
+
def self.load_file( path )
|
13
|
+
text = File.open( path, 'r:bom|utf-8' ).read
|
14
|
+
self.load( text )
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.load( text )
|
18
|
+
self.new( text ).parse
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def initialize( text )
|
23
|
+
@text = text
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse
|
27
|
+
hash = top_hash = Hash.new
|
28
|
+
|
29
|
+
text = @text
|
30
|
+
text = text.gsub( "\t", ' ' ) # replace all tabs w/ spaces
|
31
|
+
|
32
|
+
text.each_line do |line|
|
33
|
+
|
34
|
+
### skip comments
|
35
|
+
# e.g. # this is a comment line
|
36
|
+
# or ; this too
|
37
|
+
# or -- haskell style
|
38
|
+
# or % text style
|
39
|
+
|
40
|
+
if line =~ /^\s*#/ || line =~ /^\s*;/ || line =~ /^\s*--/ || line =~ /^\s*%/
|
41
|
+
## logger.debug 'skipping comment line'
|
42
|
+
next
|
43
|
+
end
|
44
|
+
|
45
|
+
### skip blank lines
|
46
|
+
if line =~ /^\s*$/
|
47
|
+
## logger.debug 'skipping blank line'
|
48
|
+
next
|
49
|
+
end
|
50
|
+
|
51
|
+
# pass 1) remove possible trailing eol comment
|
52
|
+
## e.g -> New York # Sample EOL Comment Here (with or without commas,,,,)
|
53
|
+
## becomes -> New York
|
54
|
+
|
55
|
+
line = line.sub( /\s+#.*$/, '' )
|
56
|
+
|
57
|
+
# pass 2) remove leading and trailing whitespace
|
58
|
+
|
59
|
+
line = line.strip
|
60
|
+
|
61
|
+
## check for new section e.g. [planet012-xxx_bc]
|
62
|
+
|
63
|
+
### todo: allow _ or - in strict section key? why? why not??
|
64
|
+
### allow _ or - in value key? why why not??
|
65
|
+
if line =~ /^\s*\[\s*([a-z0-9_\-]+)\s*\]\s*$/ # strict section
|
66
|
+
key = $1.to_s.dup
|
67
|
+
hash = top_hash[ key ] = Hash.new
|
68
|
+
elsif line =~ /^\s*\[\s*([^ \]]+)\s*\]\s*$/ # liberal section; allow everything in key
|
69
|
+
key = $1.to_s.dup
|
70
|
+
hash = top_hash[ key ] = Hash.new
|
71
|
+
elsif line =~ /^\s*([a-z0-9_\-]+)\s*[:=](.*)$/
|
72
|
+
key = $1.to_s.dup
|
73
|
+
value = $2.to_s.strip.dup # check if it can be nil? if yes use blank string e.g. ''
|
74
|
+
### todo: strip quotes from value??? why? why not?
|
75
|
+
hash[ key ] = value
|
76
|
+
else
|
77
|
+
puts "*** warn: skipping unknown line type in ini >#{line}<"
|
78
|
+
end
|
79
|
+
end # each lines
|
80
|
+
|
81
|
+
top_hash
|
82
|
+
end
|
83
|
+
|
84
|
+
end # class IniParser
|
85
|
+
|
86
|
+
end # module IniParser
|
data/lib/iniparser/version.rb
CHANGED
data/test/test_parser.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_parser.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestParser < MiniTest::Test
|
12
|
+
|
13
|
+
def test_load
|
14
|
+
|
15
|
+
text = <<TXT
|
16
|
+
# comment
|
17
|
+
; another comment
|
18
|
+
|
19
|
+
key1 = hello
|
20
|
+
key2 : hi!
|
21
|
+
|
22
|
+
[section1]
|
23
|
+
key3 = salut # end of line comment here
|
24
|
+
|
25
|
+
[section2]
|
26
|
+
key4: hola
|
27
|
+
blank =
|
28
|
+
blank2:
|
29
|
+
|
30
|
+
[ http://example.com ]
|
31
|
+
title = A rose is a rose is a rose, eh?
|
32
|
+
title2: A rose is a rose is a rose, eh? # comment here
|
33
|
+
; another one here
|
34
|
+
title3 = A rose is a rose is a rose, eh?
|
35
|
+
TXT
|
36
|
+
|
37
|
+
hash = INI.load( text )
|
38
|
+
pp hash
|
39
|
+
|
40
|
+
assert_equal 'hello', hash['key1']
|
41
|
+
assert_equal 'hi!', hash['key2']
|
42
|
+
assert_equal 'salut', hash['section1']['key3']
|
43
|
+
assert_equal 'hola', hash['section2']['key4']
|
44
|
+
assert_equal '', hash['section2']['blank']
|
45
|
+
assert_equal '', hash['section2']['blank2']
|
46
|
+
assert_equal 'A rose is a rose is a rose, eh?', hash['http://example.com']['title']
|
47
|
+
assert_equal 'A rose is a rose is a rose, eh?', hash['http://example.com']['title2']
|
48
|
+
assert_equal 'A rose is a rose is a rose, eh?', hash['http://example.com']['title3']
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iniparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -38,7 +38,8 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.15'
|
41
|
-
description: iniparser - read INI configuration, setttings and data files
|
41
|
+
description: iniparser - read / parse INI configuration, setttings and data files
|
42
|
+
into a hash
|
42
43
|
email: ruby-talk@ruby-lang.org
|
43
44
|
executables: []
|
44
45
|
extensions: []
|
@@ -52,8 +53,10 @@ files:
|
|
52
53
|
- README.md
|
53
54
|
- Rakefile
|
54
55
|
- lib/iniparser.rb
|
56
|
+
- lib/iniparser/parser.rb
|
55
57
|
- lib/iniparser/version.rb
|
56
58
|
- test/helper.rb
|
59
|
+
- test/test_parser.rb
|
57
60
|
- test/test_version.rb
|
58
61
|
homepage: https://github.com/datatxt/iniparser
|
59
62
|
licenses:
|
@@ -80,5 +83,6 @@ rubyforge_project:
|
|
80
83
|
rubygems_version: 2.6.7
|
81
84
|
signing_key:
|
82
85
|
specification_version: 4
|
83
|
-
summary: iniparser - read INI configuration, setttings and data files into
|
86
|
+
summary: iniparser - read / parse INI configuration, setttings and data files into
|
87
|
+
a hash
|
84
88
|
test_files: []
|