Merge pull request #255 from mckern/enhancement/master/camelcasedembools

(MODULES-905) Add bool2str() and camelcase() for string manipulation
This commit is contained in:
Ashley Penney 2014-05-15 17:03:18 -04:00
commit 430d821ad3
4 changed files with 121 additions and 0 deletions

View file

@ -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 :

View file

@ -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 :

View file

@ -0,0 +1,34 @@
#! /usr/bin/env ruby -S rspec
require 'spec_helper'
describe "the bool2str function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should exist" do
Puppet::Parser::Functions.function("bool2str").should == "function_bool2str"
end
it "should raise a ParseError if there is less than 1 arguments" do
lambda { scope.function_bool2str([]) }.should( raise_error(Puppet::ParseError))
end
it "should convert true to 'true'" do
result = scope.function_bool2str([true])
result.should(eq('true'))
end
it "should convert true to a string" do
result = scope.function_bool2str([true])
result.class.should(eq(String))
end
it "should convert false to 'false'" do
result = scope.function_bool2str([false])
result.should(eq('false'))
end
it "should convert false to a string" do
result = scope.function_bool2str([false])
result.class.should(eq(String))
end
end

View file

@ -0,0 +1,24 @@
#! /usr/bin/env ruby -S rspec
require 'spec_helper'
describe "the camelcase function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should exist" do
Puppet::Parser::Functions.function("camelcase").should == "function_camelcase"
end
it "should raise a ParseError if there is less than 1 arguments" do
lambda { scope.function_camelcase([]) }.should( raise_error(Puppet::ParseError))
end
it "should capitalize the beginning of a normal string" do
result = scope.function_camelcase(["abc"])
result.should(eq("Abc"))
end
it "should camelcase an underscore-delimited string" do
result = scope.function_camelcase(["aa_bb_cc"])
result.should(eq("AaBbCc"))
end
end