Class: Hashery::IniHash
Overview
Hash class with methods to read from and write into ini files.
A ini file is a text file in a specific format, it may include several fields which are sparated by field headlines which are enclosured by "[]". Each field may include several key-value pairs.
Each key-value pair is represented by one line and the value is sparated from the key by a "=".
Examples
Example ini file
# this is the first comment which will be saved in the comment attribute
mail=info@example.com
domain=example.com # this is a comment which will not be saved
[database]
db=example
user=john
passwd=very-secure
host=localhost
# this is another comment
[filepaths]
tmp=/tmp/example
lib=/home/john/projects/example/lib
htdocs=/home/john/projects/example/htdocs
[ texts ]
wellcome=Wellcome on my new website!
Website description = This is only a example. # and another comment
Example object
Ini#comment stores:
"this is the first comment which will be saved in the comment attribute"
Ini's internal hash stores:
{
"mail" => "info@example.com",
"domain" => "example.com",
"database" => {
"db" => "example",
"user" => "john",
"passwd" => "very-secure",
"host" => "localhost"
},
"filepaths" => {
"tmp" => "/tmp/example",
"lib" => "/home/john/projects/example/lib",
"htdocs" => "/home/john/projects/example/htdocs"
}
"texts" => {
"wellcome" => "Wellcome on my new website!",
"Website description" => "This is only a example."
}
}
As you can see this module gets rid of all comments, linebreaks and unnecessary spaces at the beginning and the end of each field headline, key or value.
Using the object
Using the object is stright forward:
ini = IniHash.new("path/settings.ini")
ini["mail"] = "info@example.com"
ini["filepaths"] = { "tmp" => "/tmp/example" }
ini.comment = "This is\na comment"
puts ini["filepaths"]["tmp"]
# => /tmp/example
ini.write()
Acknowlegements
IniHash is based on ini.rb.
Copyright (C) 2007 Jeena Paradies <info@jeenaparadies.net>
Instance Attribute Summary (collapse)
-
- (Object) comment
:inihash is a hash which holds all ini data :comment is a string which holds the comments on the top of the file.
-
- (Object) inihash
:inihash is a hash which holds all ini data :comment is a string which holds the comments on the top of the file.
Class Method Summary (collapse)
-
+ (Object) read_comment_from_file(path)
Reading comments from file.
-
+ (Object) read_from_file(path)
Reading data from file.
-
+ (Object) to_s(inihash = {})
Turn a hash (up to 2 levels deepness) into a ini string.
-
+ (Object) write_to_file(path, inihash = {}, comment = nil)
Writing a ini hash into a file.
Instance Method Summary (collapse)
-
- (Object) [](key)
Retrive the ini data for the key key.
-
- (Object) []=(key, value)
Set the ini data for the key key.
-
- (IniHash) initialize(path, load = nil)
constructor
Creating a new Ini object.
- - (Object) method_missing(s, *a, &b)
-
- (Object) restore
Restores the data from file into the object.
- - (Object) to_h
-
- (Object) update
Store data from the object in the file.
Constructor Details
- (IniHash) initialize(path, load = nil)
Creating a new Ini object
path is a path to the ini file load if nil restores the data if possible
if true restores the data, if not possible raises an error
if false does not resotre the data
102 103 104 105 106 107 108 109 |
# File 'lib/hashery/ini_hash.rb', line 102 def initialize(path, load=nil) @path = path @inihash = {} if load or ( load.nil? and FileTest.readable_real? @path ) restore() end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (Object) method_missing(s, *a, &b)
149 150 151 |
# File 'lib/hashery/ini_hash.rb', line 149 def method_missing(s,*a,&b) @inihash.send(s, *a, &b) if @inihash.respond_to?(s) end |
Instance Attribute Details
- (Object) comment
:inihash is a hash which holds all ini data :comment is a string which holds the comments on the top of the file
92 93 94 |
# File 'lib/hashery/ini_hash.rb', line 92 def comment @comment end |
- (Object) inihash
:inihash is a hash which holds all ini data :comment is a string which holds the comments on the top of the file
92 93 94 |
# File 'lib/hashery/ini_hash.rb', line 92 def inihash @inihash end |
Class Method Details
+ (Object) read_comment_from_file(path)
Reading comments from file
path is a path to the ini file
Returns a string with comments from the beginning of the ini file.
205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/hashery/ini_hash.rb', line 205 def self.read_comment_from_file(path) comment = "" IO.foreach(path) do |line| line.strip! break unless line[0,1] == "#" or line == "" comment << "#{line[1, line.length ].strip}\n" end comment end |
+ (Object) read_from_file(path)
Reading data from file
path is a path to the ini file
returns a hash which represents the data from the file
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/hashery/ini_hash.rb', line 160 def self.read_from_file(path) inihash = {} headline = nil IO.foreach(path) do |line| line = line.strip.split(/#/)[0] # read it only if the line doesn't begin with a "=" and is long enough unless line.length < 2 and line[0,1] == "=" # it's a headline if the line begins with a "[" and ends with a "]" if line[0,1] == "[" and line[line.length - 1, line.length] == "]" # get rid of the [] and unnecessary spaces headline = line[1, line.length - 2 ].strip inihash[headline] = {} else key, value = line.split(/=/, 2) key = key.strip unless key.nil? value = value.strip unless value.nil? unless headline.nil? inihash[headline][key] = value else inihash[key] = value unless key.nil? end end end end inihash end |
+ (Object) to_s(inihash = {})
Turn a hash (up to 2 levels deepness) into a ini string
inihash is a hash representing the ini File. Default is a empty hash.
Returns a string in the ini file format.
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/hashery/ini_hash.rb', line 250 def self.to_s(inihash={}) str = "" inihash.each do |key, value| if value.is_a? Hash str << "[#{key.to_s}]\n" value.each do |under_key, under_value| str << "#{under_key.to_s}=#{under_value.to_s unless under_value.nil?}\n" end else str << "#{key.to_s}=#{value.to_s unless value2.nil?}\n" end end str end |
+ (Object) write_to_file(path, inihash = {}, comment = nil)
Writing a ini hash into a file
path is a path to the ini file inihash is a hash representing the ini File. Default is a empty hash. comment is a string with comments which appear on the
top of the file. Each line will get a "#" before.
Default is no comment.
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/hashery/ini_hash.rb', line 227 def self.write_to_file(path, inihash={}, comment=nil) raise TypeError, "String expected" unless comment.is_a? String or comment.nil? raise TypeError, "Hash expected" unless inihash.is_a? Hash File.open(path, "w") { |file| unless comment.nil? comment.each do |line| file << "# #{line}" end end file << IniHash.to_s(inihash) } end |
Instance Method Details
- (Object) [](key)
Retrive the ini data for the key key
114 115 116 |
# File 'lib/hashery/ini_hash.rb', line 114 def [](key) @inihash[key] end |
- (Object) []=(key, value)
Set the ini data for the key key
121 122 123 124 125 126 |
# File 'lib/hashery/ini_hash.rb', line 121 def []=(key, value) raise TypeError, "String expected" unless key.is_a? String raise TypeError, "String or Hash expected" unless value.is_a? String or value.is_a? Hash @inihash[key] = value end |
- (Object) restore
Restores the data from file into the object
131 132 133 134 |
# File 'lib/hashery/ini_hash.rb', line 131 def restore() @inihash = Ini.read_from_file(@path) @comment = Ini.read_comment_from_file(@path) end |
- (Object) to_h
144 145 146 |
# File 'lib/hashery/ini_hash.rb', line 144 def to_h @inihash.dup end |
- (Object) update
Store data from the object in the file
139 140 141 |
# File 'lib/hashery/ini_hash.rb', line 139 def update() IniHash.write_to_file(@path, @inihash, @comment) end |