Skip to content

Commit

Permalink
(MODULES-905) Add bool2str() and camelcase() for string manipulation
Browse files Browse the repository at this point in the history
Python likes to have its constants Capitalized, and the capitalize
function only understands strings... so I shave a yak.

bool2str will convert a boolean to its equivalent string value,
and camelcase extends on uppercase & downcase to convert an underscore
delimited string into a camelcased string.
  • Loading branch information
mckern committed May 13, 2014
1 parent 62e8c1d commit 4274361
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
30 changes: 30 additions & 0 deletions lib/puppet/parser/functions/bool2str.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#
# bool2str.rb
#

module Puppet::Parser::Functions
newfunction(:bool2str, :type => :rvalue, :doc => <<-EOS
Converts a boolean to a string.
Requires a single boolean or string as an input.
EOS
) do |arguments|

raise(Puppet::ParseError, "bool2str(): Wrong number of arguments " +
"given (#{arguments.size} for 1)") if arguments.size < 1

value = arguments[0]
klass = value.class

# We can have either true or false, or string which resembles boolean ...
unless [FalseClass, TrueClass, String].include?(klass)
raise(Puppet::ParseError, 'bool2str(): Requires either ' +
'boolean or string to work with')
end

result = value.is_a?(String) ? value : value.to_s

return result
end
end

# vim: set ts=2 sw=2 et :
33 changes: 33 additions & 0 deletions lib/puppet/parser/functions/camelcase.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#
# camelcase.rb
#

module Puppet::Parser::Functions
newfunction(:camelcase, :type => :rvalue, :doc => <<-EOS
Converts the case of a string or all strings in an array to camel case.
EOS
) do |arguments|

raise(Puppet::ParseError, "camelcase(): Wrong number of arguments " +
"given (#{arguments.size} for 1)") if arguments.size < 1

value = arguments[0]
klass = value.class

unless [Array, String].include?(klass)
raise(Puppet::ParseError, 'camelcase(): Requires either ' +
'array or string to work with')
end

if value.is_a?(Array)
# Numbers in Puppet are often string-encoded which is troublesome ...
result = value.collect { |i| i.is_a?(String) ? i.split('_').map{|e| e.capitalize}.join : i }
else
result = value.split('_').map{|e| e.capitalize}.join
end

return result
end
end

# vim: set ts=2 sw=2 et :

0 comments on commit 4274361

Please sign in to comment.