\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /proc/self/root/opt/chef/embedded/lib/ruby/gems/2.7.0/gems/iniparse-1.5.0/lib/iniparse/

Viewing File: document.rb

module IniParse
  # Represents an INI document.
  class Document
    include Enumerable

    attr_reader   :lines
    attr_accessor :path

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

    # 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?
    #
    def each(*args, &blk)
      @lines.each(*args, &blk)
    end

    # Returns the section identified by +key+.
    #
    # Returns nil if there is no Section with the given key.
    #
    def [](key)
      @lines[key.to_s]
    end

    # Returns the section identified by +key+.
    #
    # If there is no Section with the given key it will be created.
    #
    def section(key)
      @lines[key.to_s] ||= Lines::Section.new(key.to_s)
    end

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

    # 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

    alias_method :to_s, :to_ini

    # Returns a has representation of the INI with multi-line options
    # as an array
    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

    alias_method :to_h, :to_hash

    # 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

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

    # 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.
    #
    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
  end
end