]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/inifile/lib/puppet/util/ini_file/section.rb
add puppetlabs/inifile to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / inifile / lib / puppet / util / ini_file / section.rb
diff --git a/3rdparty/modules/inifile/lib/puppet/util/ini_file/section.rb b/3rdparty/modules/inifile/lib/puppet/util/ini_file/section.rb
new file mode 100644 (file)
index 0000000..9682d7f
--- /dev/null
@@ -0,0 +1,103 @@
+module Puppet
+module Util
+class IniFile
+  class Section
+    # Some implementation details:
+    #
+    #  * `name` will be set to the empty string for the 'global' section.
+    #  * there will always be a 'global' section, with a `start_line` of 0,
+    #    but if the file actually begins with a real section header on
+    #    the first line, then the 'global' section will have an
+    #    `end_line` of `nil`.
+    #  * `start_line` and `end_line` will be set to `nil` for a new non-global
+    #    section.
+    def initialize(name, start_line, end_line, settings, indentation)
+      @name = name
+      @start_line = start_line
+      @end_line = end_line
+      @existing_settings = settings.nil? ? {} : settings
+      @additional_settings = {}
+      @indentation = indentation
+    end
+
+    attr_reader :name, :start_line, :end_line, :additional_settings, :indentation
+
+    def is_global?()
+      @name == ''
+    end
+
+    def is_new_section?()
+      # a new section (global or named) will always have `end_line`
+      # set to `nil`
+      @end_line.nil?
+    end
+
+    def setting_names
+      @existing_settings.keys | @additional_settings.keys
+    end
+
+    def get_value(setting_name)
+      @existing_settings[setting_name] || @additional_settings[setting_name]
+    end
+
+    def has_existing_setting?(setting_name)
+      @existing_settings.has_key?(setting_name)
+    end
+
+    def update_existing_setting(setting_name, value)
+      @existing_settings[setting_name] = value
+    end
+
+    def remove_existing_setting(setting_name)
+      if (@existing_settings.delete(setting_name))
+        if @end_line
+          @end_line = @end_line - 1
+        end
+      end
+    end
+
+    # This is a hacky method; it's basically called when we need to insert
+    # a new setting but we don't want it to appear at the very end of the
+    # section.  Instead we hack it into the existing settings list and
+    # increment our end_line number--this assumes that the caller (`ini_file`)
+    # is doing some babysitting w/rt the other sections and the actual data
+    # of the lines.
+    def insert_inline_setting(setting_name, value)
+      @existing_settings[setting_name] = value
+      if @end_line
+        @end_line = @end_line + 1
+      end
+    end
+
+    def set_additional_setting(setting_name, value)
+      @additional_settings[setting_name] = value
+    end
+
+    # Decrement the start and end line numbers for the section (if they are
+    # defined); this is intended to be called when a setting is removed
+    # from a section that comes before this section in the ini file.
+    def decrement_line_nums()
+      if @start_line
+        @start_line = @start_line - 1
+      end
+      if @end_line
+        @end_line = @end_line - 1
+      end
+    end
+
+    # Increment the start and end line numbers for the section (if they are
+    # defined); this is intended to be called when an inline setting is added
+    # to a section that comes before this section in the ini file.
+    def increment_line_nums()
+      if @start_line
+        @start_line = @start_line + 1
+      end
+      if @end_line
+        @end_line = @end_line + 1
+      end
+    end
+
+  end
+end
+end
+end