end
end
+ def remove_setting(section_name, setting)
+ section = @sections_hash[section_name]
+ if (section.has_existing_setting?(setting))
+ remove_line(section, setting)
+ section.remove_existing_setting(setting)
+ end
+ end
+
def save
File.open(@path, 'w') do |fh|
@section_names.each do |name|
+
section = @sections_hash[name]
if section.start_line.nil?
fh.puts("\n[#{section.name}]")
elsif ! section.end_line.nil?
(section.start_line..section.end_line).each do |line_num|
- fh.puts(lines[line_num])
+ if lines[line_num]
+ fh.puts(lines[line_num])
+ end
end
end
end
end
+ def remove_line(section, setting)
+ (section.start_line..section.end_line).each do |line_num|
+ if (match = SETTING_REGEX.match(lines[line_num]))
+ if (match[1] == setting)
+ lines.delete_at(line_num)
+ end
+ end
+ end
+ end
+
def create_line_iter
ExternalIterator.new(lines)
end
@existing_settings[setting_name] = value
end
+ def remove_existing_setting(setting_name)
+ @existing_settings.delete(setting_name)
+ end
+
def set_additional_setting(setting_name, value)
@additional_settings[setting_name] = value
end
end
end
end
-end
\ No newline at end of file
+end
)
end
+ end
+
+ context "when ensuring that a setting is absent" do
+ let(:orig_content) {
+ <<-EOS
+[section1]
+; This is also a comment
+foo=foovalue
+
+bar = barvalue
+master = true
+[section2]
+
+foo= foovalue2
+baz=bazvalue
+url = http://192.168.1.1:8080
+[section:sub]
+subby=bar
+ #another comment
+ ; yet another comment
+EOS
+ }
+
+ it "should remove a setting that exists" do
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :section => 'section1', :setting => 'foo', :ensure => 'absent'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_true
+ provider.destroy
+ validate_file(<<-EOS
+[section1]
+; This is also a comment
+bar = barvalue
+master = true
+[section2]
+
+foo= foovalue2
+baz=bazvalue
+url = http://192.168.1.1:8080
+[section:sub]
+subby=bar
+ #another comment
+ ; yet another comment
+EOS
+ )
+ end
end
end