From 258f885bc4877cb1e78bcdf4555f475ab59b5343 Mon Sep 17 00:00:00 2001 From: Ben Ford Date: Sat, 4 Jan 2020 13:02:22 -0800 Subject: [PATCH] Porting functions to the modern Puppet 4.x API --- lib/puppet/functions/supervisord/array2csv.rb | 63 +++++++++++++++++ lib/puppet/functions/supervisord/hash2csv.rb | 67 +++++++++++++++++++ spec/functions/supervisord_array2csv_spec.rb | 41 ++++++++++++ spec/functions/supervisord_hash2csv_spec.rb | 41 ++++++++++++ 4 files changed, 212 insertions(+) create mode 100644 lib/puppet/functions/supervisord/array2csv.rb create mode 100644 lib/puppet/functions/supervisord/hash2csv.rb create mode 100644 spec/functions/supervisord_array2csv_spec.rb create mode 100644 spec/functions/supervisord_hash2csv_spec.rb diff --git a/lib/puppet/functions/supervisord/array2csv.rb b/lib/puppet/functions/supervisord/array2csv.rb new file mode 100644 index 0000000..cf5de00 --- /dev/null +++ b/lib/puppet/functions/supervisord/array2csv.rb @@ -0,0 +1,63 @@ +# This is an autogenerated function, ported from the original legacy version. +# It /should work/ as is, but will not have all the benefits of the modern +# function API. You should see the function docs to learn how to add function +# signatures for type safety and to document this function using puppet-strings. +# +# https://puppet.com/docs/puppet/latest/custom_functions_ruby.html +# +# ---- original file header ---- +# +# Converts the array to a csv string +# +# $array = [ 'string1', 'string2', 'string3' ] +# +# becomes: +# +# $string = "string1,string2,string3" +# +# ---- original file header ---- +# +# @summary +# Returns a sorted csv formatted string from an array in the form +# VALUE1,VALUE2,VALUE3 +# +# +Puppet::Functions.create_function(:'supervisord::array2csv') do + # @param args + # The original array of arguments. Port this to individually managed params + # to get the full benefit of the modern function API. + # + # @return [Data type] + # Describe what the function returns here + # + dispatch :default_impl do + # Call the method named 'default_impl' when this is matched + # Port this to match individual params for better type safety + repeated_param 'Any', :args + end + + + def default_impl(*args) + + + raise(Puppet::ParseError, "array2csv(): Wrong number of arguments " + + "given (#{args.size} of 1)") if args.size < 1 + + array = args[0] + + unless array.is_a?(Array) + raise(Puppet::ParseError, 'array2csv(): Requires an Array') + end + + sorted_array = array.sort + result = '' + + sorted_array.each {|value| + result += "#{value}," + } + + return result.chop! + + + end +end diff --git a/lib/puppet/functions/supervisord/hash2csv.rb b/lib/puppet/functions/supervisord/hash2csv.rb new file mode 100644 index 0000000..bceee08 --- /dev/null +++ b/lib/puppet/functions/supervisord/hash2csv.rb @@ -0,0 +1,67 @@ +# This is an autogenerated function, ported from the original legacy version. +# It /should work/ as is, but will not have all the benefits of the modern +# function API. You should see the function docs to learn how to add function +# signatures for type safety and to document this function using puppet-strings. +# +# https://puppet.com/docs/puppet/latest/custom_functions_ruby.html +# +# ---- original file header ---- +# +# Converts the hash to a csv string +# +# $hash = { +# HOME => '/home/user', +# ENV1 => 'env1', +# SECRET => 'secret' +# } +# +# becomes: +# +# $string = "HOME='/home/user',ENV1='env1',SECRET='secret'" +# +# ---- original file header ---- +# +# @summary +# Returns a csv formatted string from an hash in the form +# KEY=VALUE,KEY2=VALUE2,KEY3=VALUE3 ordered by key +# +# +Puppet::Functions.create_function(:'supervisord::hash2csv') do + # @param args + # The original array of arguments. Port this to individually managed params + # to get the full benefit of the modern function API. + # + # @return [Data type] + # Describe what the function returns here + # + dispatch :default_impl do + # Call the method named 'default_impl' when this is matched + # Port this to match individual params for better type safety + repeated_param 'Any', :args + end + + + def default_impl(*args) + + + raise(Puppet::ParseError, "hash2csv(): Wrong number of arguments " + + "given (#{args.size} of 1)") if args.size < 1 + + hash = args[0] + + unless hash.is_a?(Hash) + raise(Puppet::ParseError, 'hash2csv(): Requires an Hash') + end + + sorted_hash = hash.sort + result = '' + + sorted_hash.each {|key, value| + result += "#{key}='#{value}'," + } + + return result.chop! + + + end +end diff --git a/spec/functions/supervisord_array2csv_spec.rb b/spec/functions/supervisord_array2csv_spec.rb new file mode 100644 index 0000000..e99dce6 --- /dev/null +++ b/spec/functions/supervisord_array2csv_spec.rb @@ -0,0 +1,41 @@ +require 'spec_helper' + +describe 'supervisord::array2csv' do + # without knowing details about the implementation, this is the only test + # case that we can autogenerate. You should add more examples below! + it { is_expected.not_to eq(nil) } + +################################# +# Below are some example test cases. You may uncomment and modify them to match +# your needs. Notice that they all expect the base error class of `StandardError`. +# This is because the autogenerated function uses an untyped array for parameters +# and relies on your implementation to do the validation. As you convert your +# function to proper dispatches and typed signatures, you should change the +# expected error of the argument validation examples to `ArgumentError`. +# +# Other error types you might encounter include +# +# * StandardError +# * ArgumentError +# * Puppet::ParseError +# +# Read more about writing function unit tests at https://rspec-puppet.com/documentation/functions/ +# +# it 'raises an error if called with no argument' do +# is_expected.to run.with_params.and_raise_error(StandardError) +# end +# +# it 'raises an error if there is more than 1 arguments' do +# is_expected.to run.with_params({ 'foo' => 1 }, 'bar' => 2).and_raise_error(StandardError) +# end +# +# it 'raises an error if argument is not the proper type' do +# is_expected.to run.with_params('foo').and_raise_error(StandardError) +# end +# +# it 'returns the proper output' do +# is_expected.to run.with_params(123).and_return('the expected output') +# end +################################# + +end diff --git a/spec/functions/supervisord_hash2csv_spec.rb b/spec/functions/supervisord_hash2csv_spec.rb new file mode 100644 index 0000000..587170e --- /dev/null +++ b/spec/functions/supervisord_hash2csv_spec.rb @@ -0,0 +1,41 @@ +require 'spec_helper' + +describe 'supervisord::hash2csv' do + # without knowing details about the implementation, this is the only test + # case that we can autogenerate. You should add more examples below! + it { is_expected.not_to eq(nil) } + +################################# +# Below are some example test cases. You may uncomment and modify them to match +# your needs. Notice that they all expect the base error class of `StandardError`. +# This is because the autogenerated function uses an untyped array for parameters +# and relies on your implementation to do the validation. As you convert your +# function to proper dispatches and typed signatures, you should change the +# expected error of the argument validation examples to `ArgumentError`. +# +# Other error types you might encounter include +# +# * StandardError +# * ArgumentError +# * Puppet::ParseError +# +# Read more about writing function unit tests at https://rspec-puppet.com/documentation/functions/ +# +# it 'raises an error if called with no argument' do +# is_expected.to run.with_params.and_raise_error(StandardError) +# end +# +# it 'raises an error if there is more than 1 arguments' do +# is_expected.to run.with_params({ 'foo' => 1 }, 'bar' => 2).and_raise_error(StandardError) +# end +# +# it 'raises an error if argument is not the proper type' do +# is_expected.to run.with_params('foo').and_raise_error(StandardError) +# end +# +# it 'returns the proper output' do +# is_expected.to run.with_params(123).and_return('the expected output') +# end +################################# + +end