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 ADDED
@@ -0,0 +1,2 @@
1
+ require 'autotest/growl'
2
+ require 'autotest/fsevent'
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.sublime-*
2
+ .rvmrc
3
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format doc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in boib.gemspec
4
+ gemspec
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,5 @@
1
+ require "inireader/version"
2
+ require "inireader/base"
3
+
4
+ module IniReader
5
+ end
@@ -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,3 @@
1
+ module IniReader
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe IniReader do
4
+ it "Should exist" do
5
+ lambda do
6
+ IniReader.class == Module
7
+ end.should_not raise_error
8
+ end
9
+ 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
@@ -0,0 +1 @@
1
+ require 'ini_reader'
data/string ADDED
@@ -0,0 +1,9 @@
1
+ [section]
2
+ key1=val1
3
+ key2=val2
4
+ key1=val3
5
+
6
+ [section2]
7
+ ;I am a comment. I can do anything here
8
+ key1=key2=val1
9
+ key3=val2
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: []