Class: IniParse::Generator
- Inherits:
-
Object
- Object
- IniParse::Generator
- Defined in:
- lib/iniparse/generator.rb
Overview
Generator provides a means for easily creating new INI documents.
Rather than trying to hack together new INI documents by manually creating Document, Section and Option instances, it is preferable to use Generator which will handle it all for you.
The Generator is exposed through IniParse.gen.
IniParse.gen do |doc|
doc.section("vehicle") do |vehicle|
vehicle.option("road_side", "left")
vehicle.option("realistic_acceleration", true)
vehicle.option("max_trains", 500)
end
doc.section("construction") do |construction|
construction.option("build_on_slopes", true)
construction.option("autoslope", true)
end
end
# => IniParse::Document
This can be simplified further if you don’t mind the small overhead which comes with method_missing
:
IniParse.gen do |doc|
doc.vehicle do |vehicle|
vehicle.road_side = "left"
vehicle.realistic_acceleration = true
vehicle.max_trains = 500
end
doc.construction do |construction|
construction.build_on_slopes = true
construction.autoslope = true
end
end
# => IniParse::Document
If you want to add slightly more complicated formatting to your document, each line type (except blanks) takes a number of optional parameters:
- :comment
-
Adds an inline comment at the end of the line.
- :comment_offset
-
Indent the comment. Measured in characters from beginning of the line. See String#ljust.
- :indent
-
Adds the supplied text to the beginning of the line.
If you supply :indent
, :comment_sep
, or :comment_offset
options when adding a section, the same options will be inherited by all of the options which belong to it.
IniParse.gen do |doc|
doc.section("vehicle",
:comment => "Options for vehicles", :indent => " "
) do |vehicle|
vehicle.option("road_side", "left")
vehicle.option("realistic_acceleration", true)
vehicle.option("max_trains", 500, :comment => "More = slower")
end
end.to_ini
[vehicle] ; Options for vehicles
road_side = left
realistic_acceleration = true
max_trains = 500 ; More = slower
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#document ⇒ Object
readonly
Returns the value of attribute document.
Class Method Summary collapse
-
.gen(opts = {}, &blk) ⇒ Object
Creates a new IniParse::Document with the given sections and options.
Instance Method Summary collapse
-
#blank ⇒ Object
Adds a new blank line to the document.
-
#comment(comment, opts = {}) ⇒ Object
Adds a new comment line to the document.
-
#gen {|_self| ... } ⇒ Object
:nodoc:.
-
#initialize(opts = {}) ⇒ Generator
constructor
:nodoc:.
-
#method_missing(name, *args, &blk) ⇒ Object
:nodoc:.
-
#option(key, value, opts = {}) ⇒ Object
Adds a new option to the current section.
-
#section(name, opts = {}) ⇒ Object
Creates a new section with the given name and adds it to the document.
-
#with_options(opts = {}) {|_self| ... } ⇒ Object
Wraps lines, setting default options for each.
Constructor Details
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &blk) ⇒ Object
:nodoc:
183 184 185 186 187 188 189 |
# File 'lib/iniparse/generator.rb', line 183 def method_missing(name, *args, &blk) # :nodoc: if m = name.to_s.match(/(.*)=$/) option(m[1], *args) else section(name.to_s, *args, &blk) end end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
74 75 76 |
# File 'lib/iniparse/generator.rb', line 74 def context @context end |
#document ⇒ Object (readonly)
Returns the value of attribute document.
75 76 77 |
# File 'lib/iniparse/generator.rb', line 75 def document @document end |
Class Method Details
.gen(opts = {}, &blk) ⇒ Object
Creates a new IniParse::Document with the given sections and options.
Returns
IniParse::Document
95 96 97 |
# File 'lib/iniparse/generator.rb', line 95 def self.gen(opts = {}, &blk) new(opts).gen(&blk) end |
Instance Method Details
#blank ⇒ Object
Adds a new blank line to the document.
170 171 172 |
# File 'lib/iniparse/generator.rb', line 170 def blank @context.lines << Lines::Blank.new end |
#comment(comment, opts = {}) ⇒ Object
Adds a new comment line to the document.
Parameters
- comment<String>
-
The text for the comment line.
163 164 165 166 167 |
# File 'lib/iniparse/generator.rb', line 163 def comment(comment, opts = {}) @context.lines << Lines::Comment.new( (opts.merge(:comment => comment)) ) end |
#gen {|_self| ... } ⇒ Object
:nodoc:
85 86 87 88 |
# File 'lib/iniparse/generator.rb', line 85 def gen # :nodoc: yield self @document end |
#option(key, value, opts = {}) ⇒ Object
Adds a new option to the current section.
Can only be called as part of a section block, or after at least one section has been added to the document.
Parameters
- key<String>
-
The key (name) for this option.
- value
-
The option’s value.
- opts<Hash>
-
Extra options for the line (formatting, etc).
Raises
- IniParse::NoSectionError
-
If no section has been added to the document yet.
147 148 149 150 151 152 153 154 155 156 |
# File 'lib/iniparse/generator.rb', line 147 def option(key, value, opts = {}) @context.lines << Lines::Option.new( key, value, (opts) ) rescue LineNotAllowed # Tried to add an Option to a Document. raise NoSectionError, 'Your INI document contains an option before the first section is ' \ 'declared which is not allowed.' end |
#section(name, opts = {}) ⇒ Object
Creates a new section with the given name and adds it to the document.
You can optionally supply a block (as detailed in the documentation for Generator#gen) in order to add options to the section.
Parameters
- name<String>
-
A name for the given section.
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 |
# File 'lib/iniparse/generator.rb', line 107 def section(name, opts = {}) if @in_section # Nesting sections is bad, mmmkay? raise LineNotAllowed, "You can't nest sections in INI files." end # Add to a section if it already exists if @document.has_section?(name.to_s()) @context = @document[name.to_s()] else @context = Lines::Section.new(name, (opts)) @document.lines << @context end if block_given? begin @in_section = true (opts) { yield self } @context = @document blank() ensure @in_section = false end end end |
#with_options(opts = {}) {|_self| ... } ⇒ Object
Wraps lines, setting default options for each.
175 176 177 178 179 180 181 |
# File 'lib/iniparse/generator.rb', line 175 def (opts = {}) # :nodoc: opts = opts.dup opts.delete(:comment) @opt_stack.push( @opt_stack.last.merge(opts)) yield self @opt_stack.pop end |