Class: Puppet::Util::IniConfig::File
- Defined in:
- lib/vendor/puppet/util/inifile.rb
Overview
A logical .ini-file that can be spread across several physical files. For each physical file, call #read with the filename
Instance Method Summary collapse
-
#[](name) ⇒ Object
Return the Section with the given name or nil.
-
#add_section(name, file) ⇒ Object
Add a section to be stored in FILE when store is called.
-
#each_file(&block) ⇒ Object
Execute BLOCK, passing each file constituting this inifile as an argument.
-
#each_section(&block) ⇒ Object
Execute BLOCK, passing each section in this file as an argument.
-
#include?(name) ⇒ Boolean
Return true if the file contains a section with name NAME.
-
#initialize ⇒ File
constructor
A new instance of File.
-
#read(file) ⇒ Object
Add the contents of the file with name FILE to the already existing sections.
-
#store ⇒ Object
Store all modifications made to sections in this file back to the physical files.
Constructor Details
#initialize ⇒ File
Returns a new instance of File.
90 91 92 |
# File 'lib/vendor/puppet/util/inifile.rb', line 90 def initialize @files = {} end |
Instance Method Details
#[](name) ⇒ Object
Return the Section with the given name or nil
180 181 182 183 184 185 186 |
# File 'lib/vendor/puppet/util/inifile.rb', line 180 def [](name) name = name.to_s each_section do |section| return section if section.name == name end nil end |
#add_section(name, file) ⇒ Object
Add a section to be stored in FILE when store is called
194 195 196 197 198 199 200 |
# File 'lib/vendor/puppet/util/inifile.rb', line 194 def add_section(name, file) raise "A section with name #{name} already exists" if include?(name) result = Section.new(name, file) @files[file] ||= [] @files[file] << result result end |
#each_file(&block) ⇒ Object
Execute BLOCK, passing each file constituting this inifile as an argument
173 174 175 176 177 |
# File 'lib/vendor/puppet/util/inifile.rb', line 173 def each_file(&block) @files.keys.each do |file| yield(file) end end |
#each_section(&block) ⇒ Object
Execute BLOCK, passing each section in this file as an argument
163 164 165 166 167 168 169 |
# File 'lib/vendor/puppet/util/inifile.rb', line 163 def each_section(&block) @files.each do |file, list| list.each do |entry| yield(entry) if entry.is_a?(Section) end end end |
#include?(name) ⇒ Boolean
Return true if the file contains a section with name NAME
189 190 191 |
# File 'lib/vendor/puppet/util/inifile.rb', line 189 def include?(name) ! self[name].nil? end |
#read(file) ⇒ Object
Add the contents of the file with name FILE to the already existing sections
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/vendor/puppet/util/inifile.rb', line 96 def read(file) text = Puppet::Util::FileType.filetype(:flat).new(file).read raise "Could not find #{file}" if text.nil? section = nil # The name of the current section optname = nil # The name of the last option in section line = 0 @files[file] = [] text.each_line do |l| line += 1 if l.strip.empty? || "#;".include?(l[0,1]) || (l.split(nil, 2)[0].downcase == "rem" && l[0,1].downcase == "r") # Whitespace or comment if section.nil? @files[file] << l else section.add_line(l) end elsif " \t\r\n\f".include?(l[0,1]) && section && optname # continuation line section[optname] += "\n#{l.chomp}" elsif l =~ /^\[([^\]]+)\]/ # section heading section.mark_clean unless section.nil? section = add_section($1, file) optname = nil elsif l =~ /^\s*([^\s=]+)\s*\=(.*)$/ # We allow space around the keys, but not the values # For the values, we don't know if space is significant if section.nil? raise "#{file}:#{line}:Key/value pair outside of a section for key #{$1}" else section[$1] = $2 optname = $1 end else raise "#{file}:#{line}: Can't parse '#{l.chomp}'" end end section.mark_clean unless section.nil? end |
#store ⇒ Object
Store all modifications made to sections in this file back to the physical files. If no modifications were made to a physical file, nothing is written
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/vendor/puppet/util/inifile.rb', line 141 def store @files.each do |file, lines| text = "" dirty = false lines.each do |l| if l.is_a?(Section) dirty ||= l.dirty? text << l.format l.mark_clean else text << l end end if dirty Puppet::Util::FileType.filetype(:flat).new(file).write(text) return file end end end |