inireader 0.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.
- data/.autotest +2 -0
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/inireader.gemspec +22 -0
- data/lib/ini_reader.rb +5 -0
- data/lib/inireader/base.rb +39 -0
- data/lib/inireader/version.rb +3 -0
- data/spec/ini_reader_spec.rb +9 -0
- data/spec/inireader/base_spec.rb +124 -0
- data/spec/spec_helper.rb +1 -0
- data/string +9 -0
- metadata +138 -0
data/.autotest
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color --format doc
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
inireader
|
2
|
+
=========
|
3
|
+
|
4
|
+
Because, sadly, not every configuration file is in yml.
|
5
|
+
|
6
|
+
Seriously barebones ini reader. It doesn't do much and is not robust or that trustworthy.
|
7
|
+
That having been said, nothing else was really suiting my needs.
|
8
|
+
|
9
|
+
Reads from:
|
10
|
+
|
11
|
+
[section]
|
12
|
+
key1=val1
|
13
|
+
key2=val2
|
14
|
+
key1=val3
|
15
|
+
|
16
|
+
[section2]
|
17
|
+
;I am a comment. I can do anything here
|
18
|
+
key1=key2=val1
|
19
|
+
key3=val2
|
20
|
+
|
21
|
+
To:
|
22
|
+
|
23
|
+
{
|
24
|
+
section: {
|
25
|
+
key1: 'val3',
|
26
|
+
key2: 'val2'
|
27
|
+
},
|
28
|
+
section2: {
|
29
|
+
key1: 'key2-val1'
|
30
|
+
key3: 'val2'
|
31
|
+
}
|
32
|
+
}
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/inireader.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'inireader/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "inireader"
|
8
|
+
s.version = IniReader::VERSION
|
9
|
+
s.author = "Joel Jackson"
|
10
|
+
s.email = "jackson.joel@gmail.com"
|
11
|
+
s.homepage = "http://github.com/joeljackson/inireader"
|
12
|
+
s.summary = "Simple ruby ini reader"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split($/)
|
15
|
+
s.require_path = "lib"
|
16
|
+
|
17
|
+
s.add_development_dependency 'rspec'
|
18
|
+
s.add_development_dependency 'autotest'
|
19
|
+
s.add_development_dependency 'autotest-fsevent'
|
20
|
+
s.add_development_dependency 'autotest-growl'
|
21
|
+
s.add_development_dependency 'debbugger'
|
22
|
+
end
|
data/lib/ini_reader.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module IniReader
|
2
|
+
class Base
|
3
|
+
def initialize( string = '')
|
4
|
+
@section_hash = {}
|
5
|
+
parse(StringIO.new(string))
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.parse(filename)
|
9
|
+
reader = IniReader::Base.new
|
10
|
+
reader.send(:parse, File.open(filename, "r"))
|
11
|
+
return reader
|
12
|
+
end
|
13
|
+
|
14
|
+
#returns the hash for a section of the inifile
|
15
|
+
def []( section_name )
|
16
|
+
return @section_hash[section_name]
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def parse(io)
|
21
|
+
current_section = nil
|
22
|
+
io.each do |line|
|
23
|
+
if line[0] == ';'
|
24
|
+
next
|
25
|
+
elsif ( matchdata = line.match(/^\[(.+)\]$/) ) != nil
|
26
|
+
current_section = @section_hash[matchdata[1].to_sym] || {}
|
27
|
+
@section_hash[matchdata[1].to_sym] = current_section
|
28
|
+
elsif ( matchdata = line.match(/^([^=]*)=(.*)$/) )
|
29
|
+
current_section[matchdata[1].to_sym] = matchdata[2].to_s
|
30
|
+
elsif line.strip == ""
|
31
|
+
next
|
32
|
+
else
|
33
|
+
raise Exception("Could not parse line: #{line}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
describe IniReader::Base do
|
2
|
+
it "should exist" do
|
3
|
+
lambda do
|
4
|
+
reader = IniReader::Base.new
|
5
|
+
end.should_not raise_error
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return nil if looking for a section that doesn't exist" do
|
9
|
+
reader = IniReader::Base.new
|
10
|
+
reader[:section_name].should == nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should fail on bad lines" do
|
14
|
+
section_string = "[section_name]\n" +
|
15
|
+
"blah blah blah\n" +
|
16
|
+
"key1=val1\n"
|
17
|
+
lambda do
|
18
|
+
reader = IniReader::Base.new(section_string)
|
19
|
+
end.should raise_error
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should ignore lines starting with ';'" do
|
23
|
+
section_string = "[section_name]\n" +
|
24
|
+
";blah blah blah\n" +
|
25
|
+
"key1=val1\n"
|
26
|
+
lambda do
|
27
|
+
reader = IniReader::Base.new(section_string)
|
28
|
+
end.should_not raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should allow empty lines" do
|
32
|
+
section_string = "[section_name]\n" +
|
33
|
+
"\n" +
|
34
|
+
"key1=val1\n"
|
35
|
+
lambda do
|
36
|
+
reader = IniReader::Base.new(section_string)
|
37
|
+
end.should_not raise_error
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "sections" do
|
41
|
+
it "should add a section when it sees a section header" do
|
42
|
+
section_string = "[section_name]\n"
|
43
|
+
reader = IniReader::Base.new(section_string)
|
44
|
+
reader[:section_name].should_not == nil
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow for different section names" do
|
48
|
+
section_string = "[section_name]\n" +
|
49
|
+
"[section_name_2]\n"
|
50
|
+
reader = IniReader::Base.new(section_string)
|
51
|
+
reader[:section_name].should_not == nil
|
52
|
+
reader[:section_name_2].should_not == nil
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should force the section to have a name" do
|
56
|
+
section_string = "[]\n"
|
57
|
+
lambda do
|
58
|
+
reader = IniReader::Base.new(section_string)
|
59
|
+
end.should raise_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "pairs" do
|
64
|
+
it "should not crash when assigning a pair" do
|
65
|
+
section_string = "[section_name]\n" +
|
66
|
+
"key1=val1\n"
|
67
|
+
lambda do
|
68
|
+
reader = IniReader::Base.new(section_string)
|
69
|
+
end.should_not raise_error
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should add a pair to the associated section" do
|
73
|
+
section_string = "[section_name]\n" +
|
74
|
+
"key1=val1\n"
|
75
|
+
reader = IniReader::Base.new(section_string)
|
76
|
+
reader[:section_name].class.should == Hash
|
77
|
+
reader[:section_name][:key1].should == "val1"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should not be added to any other section" do
|
81
|
+
section_string = "[section_name]\n" +
|
82
|
+
"[section_name2]\n" +
|
83
|
+
"key1=val1\n"
|
84
|
+
reader = IniReader::Base.new(section_string)
|
85
|
+
reader[:section_name][:key1].should == nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should add keys in repeated sections with previous sections" do
|
89
|
+
section_string = "[section_name]\n" +
|
90
|
+
"key1=val1\n" +
|
91
|
+
"[section_name]\n" +
|
92
|
+
"key3=val3\n"
|
93
|
+
reader = IniReader::Base.new(section_string)
|
94
|
+
reader[:section_name][:key3].should == "val3"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not overwrite previous sections when they are repeated" do
|
98
|
+
section_string = "[section_name]\n" +
|
99
|
+
"key1=val1\n" +
|
100
|
+
"[section_name]\n" +
|
101
|
+
"key3=val3\n"
|
102
|
+
reader = IniReader::Base.new(section_string)
|
103
|
+
reader[:section_name][:key1].should == "val1"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should parse files" do
|
108
|
+
string = "[section]\n" +
|
109
|
+
"key1=val1\n" +
|
110
|
+
"key2=val2\n" +
|
111
|
+
"key1=val3\n" +
|
112
|
+
"\n" +
|
113
|
+
"[section2]\n" +
|
114
|
+
";I am a comment. I can do anything here\n" +
|
115
|
+
"key1=key2=val1\n" +
|
116
|
+
"key3=val2\n"
|
117
|
+
outfile = File.new("./string", "w")
|
118
|
+
outfile.write(string)
|
119
|
+
outfile.close
|
120
|
+
reader = IniReader::Base.parse("./string")
|
121
|
+
reader[:section].should == {key1: "val3", key2: "val2"}
|
122
|
+
reader[:section2].should == {key1:"key2=val1", key3:"val2"}
|
123
|
+
end
|
124
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'ini_reader'
|
data/string
ADDED
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inireader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joel Jackson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
prerelease: false
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
none: false
|
23
|
+
type: :development
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ! '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: autotest
|
32
|
+
prerelease: false
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
none: false
|
39
|
+
type: :development
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: autotest-fsevent
|
48
|
+
prerelease: false
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
none: false
|
55
|
+
type: :development
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
none: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: autotest-growl
|
64
|
+
prerelease: false
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
none: false
|
71
|
+
type: :development
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
none: false
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: debbugger
|
80
|
+
prerelease: false
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
none: false
|
87
|
+
type: :development
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
none: false
|
94
|
+
description:
|
95
|
+
email: jackson.joel@gmail.com
|
96
|
+
executables: []
|
97
|
+
extensions: []
|
98
|
+
extra_rdoc_files: []
|
99
|
+
files:
|
100
|
+
- .autotest
|
101
|
+
- .gitignore
|
102
|
+
- .rspec
|
103
|
+
- Gemfile
|
104
|
+
- README.md
|
105
|
+
- Rakefile
|
106
|
+
- inireader.gemspec
|
107
|
+
- lib/ini_reader.rb
|
108
|
+
- lib/inireader/base.rb
|
109
|
+
- lib/inireader/version.rb
|
110
|
+
- spec/ini_reader_spec.rb
|
111
|
+
- spec/inireader/base_spec.rb
|
112
|
+
- spec/spec_helper.rb
|
113
|
+
- string
|
114
|
+
homepage: http://github.com/joeljackson/inireader
|
115
|
+
licenses: []
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
none: false
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
none: false
|
132
|
+
requirements: []
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 1.8.24
|
135
|
+
signing_key:
|
136
|
+
specification_version: 3
|
137
|
+
summary: Simple ruby ini reader
|
138
|
+
test_files: []
|