class IniParse::Document

Represents an INI document.

def [](key)


Returns nil if there is no Section with the given key.

Returns the section identified by +key+.
def [](key)
  @lines[key.to_s]
end

def delete(*args)


Returns the document.

Deletes the section whose name matches the given +key+.
def delete(*args)
  @lines.delete(*args)
  self
end

def each(*args, &blk)


include_blank:: Include blank/comment lines?
==== Parameters

lines to be yielded, pass true.
Does not yield blank and comment lines by default; if you want _all_

Enumerates through each Section in this document.
def each(*args, &blk)
  @lines.each(*args, &blk)
end

def has_section?(key)

Returns true if a section with the given +key+ exists in this document.
def has_section?(key)
  @lines.has_key?(key.to_s)
end

def initialize(path = nil)

Creates a new Document instance.
def initialize(path = nil)
  @path  = path
  @lines = IniParse::SectionCollection.new
end

def inspect

A human-readable version of the document, for debugging.
def inspect
  sections = @lines.select { |l| l.is_a?(IniParse::Lines::Section) }
  "#<IniParse::Document {#{ sections.map(&:key).join(', ') }}>"
end

def save(path = nil)


IniParseError:: If your document couldn't be saved.
==== Raises

path:: A path to which this document will be saved.
==== Parameters

calling Document#save.
path, or you wish to save the document elsewhere, supply a path when
needs to be given to Document#save. If Document was not given a file
If a path was supplied when the Document was initialized then nothing

Saves a copy of this Document to disk.
def save(path = nil)
  @path = path if path
  raise IniParseError, 'No path given to Document#save' if @path !~ /\S/
  File.open(@path, 'w') { |f| f.write(self.to_ini) }
end

def section(key)


If there is no Section with the given key it will be created.

Returns the section identified by +key+.
def section(key)
  @lines[key.to_s] ||= Lines::Section.new(key.to_s)
end

def to_hash

as an array
Returns a has representation of the INI with multi-line options
def to_hash
  result = {}
  @lines.entries.each do |section|
    result[section.key] ||= {}
    section.entries.each do |option|
      opts = Array(option)
      val = opts.map { |o| o.respond_to?(:value) ? o.value : o }
      val = val.size > 1 ? val : val.first
      result[section.key][opts.first.key] = val
    end
  end
  result
end

def to_ini

Returns this document as a string suitable for saving to a file.
def to_ini
  string = @lines.to_a.map { |line| line.to_ini }.join($/)
  string = "#{ string }\n" unless string[-1] == "\n"
  string
end