Skip to content

Commit

Permalink
Merge pull request #26 from nathanielksmith/hc-31-single-array
Browse files Browse the repository at this point in the history
(HC-31) Handle type change from scalar -> array
  • Loading branch information
jpinsonault committed Dec 10, 2015
2 parents d06c364 + bfae298 commit 7c49628
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 11 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ group :development, :test do
gem 'beaker', :require => false
gem 'beaker-rspec', '>= 2.2', :require => false
gem 'pry', :require => false
gem 'pry-nav', :require => false
gem 'simplecov', :require => false
gem 'beaker-puppet_install_helper', :require => false
end
Expand Down
32 changes: 21 additions & 11 deletions lib/puppet/provider/hocon_setting/ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,31 @@ def self.namevar(section_name, setting)
end

def exists?
ret_value = false
unless conf_file.has_value?(setting)
return false
end

if conf_file.has_value?(setting)
if resource[:type] == 'array_element'
Array(@resource[:value]).each do |v|
if value.flatten.include?(v)
return true
end
end
else
ret_value = true
type = @resource[:type]
conf_value = conf_object.get_value(setting).value

if type == 'array'
unless conf_value.is_a?(Array)
return false
end
end

return ret_value
if type == nil &&
conf_value.is_a?(Array) &&
conf_value.length == 1

return false
end

if type == 'array_element'
return Array(@resource[:value]).any? { |v| value.flatten.include?(v) }
end

return true
end

def create
Expand Down
2 changes: 2 additions & 0 deletions lib/puppet/type/hocon_setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@
end

def insync?(is)
# TODO this doesn't appear to get called, and according to Puppet's source
# it may be deprecated.
if @resource[:type] == 'array_element'
# make sure all passed values are in the file
Array(@resource[:value]).each do |v|
Expand Down
43 changes: 43 additions & 0 deletions spec/unit/puppet/provider/conf_setting/ruby_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,49 @@ def validate_file(expected_content,tmpfile = tmpfile)
EOS
)
end

it "should convert a scalar key to a single element array when type is set" do
File.open(tmpfile, 'w') do |fh|
fh.write('ennui: yes')
end
resource = Puppet::Type::Hocon_setting.new(
common_params.merge(:setting => 'ennui',
:ensure => 'present',
:value => ['yes'],
:type => 'array'))
provider = described_class.new(resource)
expect(provider.exists?).to be false
provider.create
expect(provider.exists?).to be true
validate_file(
<<-EOS
ennui: [
"yes"
]
EOS
)
end

it "should convert to a scalar from single element array when type is unset" do
content = <<-EOS
ennui: [
"yes"
]
EOS
File.open(tmpfile, 'w') do |fh|
fh.write(content)
end
resource = Puppet::Type::Hocon_setting.new(
common_params.merge(:setting => 'ennui',
:ensure => 'present',
:value => ['yes'],))
provider = described_class.new(resource)
expect(provider.exists?).to be false
provider.create
expect(provider.exists?).to be true
validate_file("ennui: \"yes\"\n")
end

end

context "when ensuring that a setting is present" do
Expand Down

0 comments on commit 7c49628

Please sign in to comment.