class IniParse::Generator
max_trains = 500 ; More = slower
realistic_acceleration = true
road_side = left<br> ; Options for vehicles
end.to_ini
end
vehicle.option(“max_trains”, 500, :comment => “More = slower”)
vehicle.option(“realistic_acceleration”, true)
vehicle.option(“road_side”, “left”)
) do |vehicle|
:comment => “Options for vehicles”, :indent => “ ”
doc.section(“vehicle”,
IniParse.gen do |doc|
which belong to it.
adding a section, the same options will be inherited by all of the options
If you supply :indent
, :comment_sep
, or :comment_offset
options when
Adds the supplied text to the beginning of the line.
:indent::
See String#ljust.
Indent the comment. Measured in characters from beginning of the line.
:comment_offset::
Adds an inline comment at the end of the line.
:comment::
each line type (except blanks) takes a number of optional parameters:
If you want to add slightly more complicated formatting to your document,
# => IniParse::Document
end
end
construction.autoslope = true
construction.build_on_slopes = true
doc.construction do |construction|
end
vehicle.max_trains = 500
vehicle.realistic_acceleration = true
vehicle.road_side = “left”
doc.vehicle do |vehicle|
IniParse.gen do |doc|
which comes with method_missing
:
This can be simplified further if you don’t mind the small overhead
# => IniParse::Document
end
end
construction.option(“autoslope”, true)
construction.option(“build_on_slopes”, true)
doc.section(“construction”) do |construction|
end
vehicle.option(“max_trains”, 500)
vehicle.option(“realistic_acceleration”, true)
vehicle.option(“road_side”, “left”)
doc.section(“vehicle”) do |vehicle|
IniParse.gen do |doc|
The Generator is exposed through IniParse.gen.
which will handle it all for you.
Document, Section and Option instances, it is preferable to use Generator
Rather than trying to hack together new INI documents by manually creating
Generator provides a means for easily creating new INI documents.
def self.gen(opts = {}, &blk)
IniParse::Document
==== Returns
Creates a new IniParse::Document with the given sections and options.
def self.gen(opts = {}, &blk) new(opts).gen(&blk) end
def blank
def blank @context.lines << Lines::Blank.new end
def comment(comment, opts = {})
comment
==== Parameters
Adds a new comment line to the document.
def comment(comment, opts = {}) @context.lines << Lines::Comment.new( line_options(opts.merge(:comment => comment)) ) end
def gen # :nodoc:
def gen # :nodoc: yield self @document end
def initialize(opts = {}) # :nodoc:
def initialize(opts = {}) # :nodoc: @document = IniParse::Document.new @context = @document @in_section = false @opt_stack = [opts] end
def line_options(given_opts) # :nodoc:
rather than the global defaults.
If the context is a section, we use the section options as a base,
Returns options for a line.
def line_options(given_opts) # :nodoc: @opt_stack.last.empty? ? given_opts : @opt_stack.last.merge(given_opts) end
def method_missing(name, *args, &blk) # :nodoc:
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
def option(key, value, opts = {})
If no section has been added to the document yet.
IniParse::NoSectionError::
==== Raises
opts
value:: The option's value.
key
==== Parameters
section has been added to the document.
Can only be called as part of a section block, or after at least one
Adds a new option to the current section.
def option(key, value, opts = {}) @context.lines << Lines::Option.new( key, value, line_options(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
def section(name, opts = {})
name
==== Parameters
Generator#gen) in order to add options to the section.
You can optionally supply a block (as detailed in the documentation for
Creates a new section with the given name and adds it to the document.
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, line_options(opts)) @document.lines << @context end if block_given? begin @in_section = true with_options(opts) { yield self } @context = @document blank() ensure @in_section = false end end end
def with_options(opts = {}) # :nodoc:
Wraps lines, setting default options for each.
def with_options(opts = {}) # :nodoc: opts = opts.dup opts.delete(:comment) @opt_stack.push( @opt_stack.last.merge(opts)) yield self @opt_stack.pop end