Merge pull request #9 from cprice-puppet/feature/master/allow-override-of-separator-str
Allow overriding separator string between key/val pairs
This commit is contained in:
commit
4ff4995d9e
5 changed files with 91 additions and 11 deletions
|
@ -14,6 +14,7 @@ Puppet::Type.type(:ini_setting).provide(:ruby) do
|
|||
|
||||
private
|
||||
def ini_file
|
||||
@ini_file ||= Puppet::Util::IniFile.new(resource[:path])
|
||||
@ini_file ||= Puppet::Util::IniFile.new(resource[:path],
|
||||
resource[:key_val_separator])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,4 +30,17 @@ Puppet::Type.newtype(:ini_setting) do
|
|||
end
|
||||
end
|
||||
|
||||
newparam(:key_val_separator) do
|
||||
desc 'The separator string to use between each setting name and value. ' +
|
||||
'Defaults to " = ", but you could use this to override e.g. whether ' +
|
||||
'or not the separator should include whitespace.'
|
||||
defaultto(" = ")
|
||||
|
||||
validate do |value|
|
||||
unless value.scan('=').size == 1
|
||||
raise Puppet::Error, ":key_val_separator must contain exactly one = character."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -8,8 +8,9 @@ module Util
|
|||
SECTION_REGEX = /^\s*\[([\w\d\.\\\/\-\:]+)\]\s*$/
|
||||
SETTING_REGEX = /^\s*([\w\d\.\\\/\-]+)\s*=\s*([\S]+)\s*$/
|
||||
|
||||
def initialize(path)
|
||||
def initialize(path, key_val_separator = ' = ')
|
||||
@path = path
|
||||
@key_val_separator = key_val_separator
|
||||
@section_names = []
|
||||
@sections_hash = {}
|
||||
if File.file?(@path)
|
||||
|
@ -56,7 +57,7 @@ module Util
|
|||
end
|
||||
|
||||
section.additional_settings.each_pair do |key, value|
|
||||
fh.puts("#{key} = #{value}")
|
||||
fh.puts("#{key}#{@key_val_separator}#{value}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -106,7 +107,7 @@ module Util
|
|||
(section.start_line..section.end_line).each do |line_num|
|
||||
if (match = SETTING_REGEX.match(lines[line_num]))
|
||||
if (match[1] == setting)
|
||||
lines[line_num] = "#{setting} = #{value}"
|
||||
lines[line_num] = "#{setting}#{@key_val_separator}#{value}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -392,4 +392,68 @@ bar = baz
|
|||
end
|
||||
end
|
||||
|
||||
context "when overriding the separator" do
|
||||
let(:orig_content) {
|
||||
<<-EOS
|
||||
[section2]
|
||||
foo=bar
|
||||
EOS
|
||||
}
|
||||
|
||||
it "should fail if the separator doesn't include an equals sign" do
|
||||
expect {
|
||||
Puppet::Type::Ini_setting.new(common_params.merge(
|
||||
:section => 'section2',
|
||||
:setting => 'foo',
|
||||
:value => 'yippee',
|
||||
:key_val_separator => '+'))
|
||||
}.to raise_error Puppet::Error, /must contain exactly one/
|
||||
end
|
||||
|
||||
it "should fail if the separator includes more than one equals sign" do
|
||||
expect {
|
||||
Puppet::Type::Ini_setting.new(common_params.merge(
|
||||
:section => 'section2',
|
||||
:setting => 'foo',
|
||||
:value => 'yippee',
|
||||
:key_val_separator => ' = foo = '))
|
||||
}.to raise_error Puppet::Error, /must contain exactly one/
|
||||
end
|
||||
|
||||
it "should modify an existing setting" do
|
||||
resource = Puppet::Type::Ini_setting.new(common_params.merge(
|
||||
:section => 'section2',
|
||||
:setting => 'foo',
|
||||
:value => 'yippee',
|
||||
:key_val_separator => '='))
|
||||
provider = described_class.new(resource)
|
||||
provider.exists?.should == false
|
||||
provider.create
|
||||
validate_file(<<-EOS
|
||||
[section2]
|
||||
foo=yippee
|
||||
EOS
|
||||
)
|
||||
end
|
||||
|
||||
it "should add a new setting" do
|
||||
resource = Puppet::Type::Ini_setting.new(common_params.merge(
|
||||
:section => 'section2',
|
||||
:setting => 'bar',
|
||||
:value => 'baz',
|
||||
:key_val_separator => '='))
|
||||
provider = described_class.new(resource)
|
||||
provider.exists?.should == false
|
||||
provider.create
|
||||
validate_file(<<-EOS
|
||||
[section2]
|
||||
foo=bar
|
||||
bar=baz
|
||||
EOS
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -11,6 +11,7 @@ ini_setting { "sample setting2":
|
|||
section => 'bar',
|
||||
setting => 'barsetting',
|
||||
value => 'BAR!',
|
||||
key_value_separator => '=',
|
||||
ensure => present,
|
||||
require => Ini_setting["sample setting"],
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue