Class: IniParse::Document
- Inherits:
-
Object
- Object
- IniParse::Document
- Includes:
- Enumerable
- Defined in:
- lib/iniparse/document.rb
Overview
Represents an INI document.
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
-
#path ⇒ Object
Returns the value of attribute path.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Returns the section identified by
key
. -
#delete(*args) ⇒ Object
Deletes the section whose name matches the given
key
. -
#each(*args, &blk) ⇒ Object
Enumerates through each Section in this document.
-
#has_section?(key) ⇒ Boolean
Returns true if a section with the given
key
exists in this document. -
#initialize(path = nil) ⇒ Document
constructor
Creates a new Document instance.
-
#inspect ⇒ Object
A human-readable version of the document, for debugging.
-
#save(path = nil) ⇒ Object
Saves a copy of this Document to disk.
-
#section(key) ⇒ Object
Returns the section identified by
key
. -
#to_hash ⇒ Object
(also: #to_h)
Returns a has representation of the INI with multi-line options as an array.
-
#to_ini ⇒ Object
(also: #to_s)
Returns this document as a string suitable for saving to a file.
Constructor Details
#initialize(path = nil) ⇒ Document
Creates a new Document instance.
10 11 12 13 |
# File 'lib/iniparse/document.rb', line 10 def initialize(path = nil) @path = path @lines = IniParse::SectionCollection.new end |
Instance Attribute Details
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
6 7 8 |
# File 'lib/iniparse/document.rb', line 6 def lines @lines end |
#path ⇒ Object
Returns the value of attribute path.
7 8 9 |
# File 'lib/iniparse/document.rb', line 7 def path @path end |
Instance Method Details
#[](key) ⇒ Object
Returns the section identified by key
.
Returns nil if there is no Section with the given key.
31 32 33 |
# File 'lib/iniparse/document.rb', line 31 def [](key) @lines[key.to_s] end |
#delete(*args) ⇒ Object
Deletes the section whose name matches the given key
.
Returns the document.
47 48 49 50 |
# File 'lib/iniparse/document.rb', line 47 def delete(*args) @lines.delete(*args) self end |
#each(*args, &blk) ⇒ Object
Enumerates through each Section in this document.
Does not yield blank and comment lines by default; if you want all lines to be yielded, pass true.
Parameters
- include_blank<Boolean>
-
Include blank/comment lines?
23 24 25 |
# File 'lib/iniparse/document.rb', line 23 def each(*args, &blk) @lines.each(*args, &blk) end |
#has_section?(key) ⇒ Boolean
Returns true if a section with the given key
exists in this document.
87 88 89 |
# File 'lib/iniparse/document.rb', line 87 def has_section?(key) @lines.has_key?(key.to_s) end |
#inspect ⇒ Object
A human-readable version of the document, for debugging.
81 82 83 84 |
# File 'lib/iniparse/document.rb', line 81 def inspect sections = @lines.select { |l| l.is_a?(IniParse::Lines::Section) } "#<IniParse::Document {#{ sections.map(&:key).join(', ') }}>" end |
#save(path = nil) ⇒ Object
Saves a copy of this Document to disk.
If a path was supplied when the Document was initialized then nothing needs to be given to Document#save. If Document was not given a file path, or you wish to save the document elsewhere, supply a path when calling Document#save.
Parameters
- path<String>
-
A path to which this document will be saved.
Raises
- IniParseError
-
If your document couldn’t be saved.
104 105 106 107 108 |
# File 'lib/iniparse/document.rb', line 104 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 |
#section(key) ⇒ Object
Returns the section identified by key
.
If there is no Section with the given key it will be created.
39 40 41 |
# File 'lib/iniparse/document.rb', line 39 def section(key) @lines[key.to_s] ||= Lines::Section.new(key.to_s) end |
#to_hash ⇒ Object Also known as: to_h
Returns a has representation of the INI with multi-line options as an array
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/iniparse/document.rb', line 64 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 |
#to_ini ⇒ Object Also known as: to_s
Returns this document as a string suitable for saving to a file.
53 54 55 56 57 58 |
# File 'lib/iniparse/document.rb', line 53 def to_ini string = @lines.to_a.map { |line| line.to_ini }.join($/) string = "#{ string }\n" unless string[-1] == "\n" string end |