Merge pull request #255 from mckern/enhancement/master/camelcasedembools
(MODULES-905) Add bool2str() and camelcase() for string manipulation
This commit is contained in:
commit
430d821ad3
4 changed files with 121 additions and 0 deletions
30
lib/puppet/parser/functions/bool2str.rb
Normal file
30
lib/puppet/parser/functions/bool2str.rb
Normal 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 :
|
33
lib/puppet/parser/functions/camelcase.rb
Normal file
33
lib/puppet/parser/functions/camelcase.rb
Normal 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 :
|
34
spec/unit/puppet/parser/functions/bool2str_spec.rb
Executable file
34
spec/unit/puppet/parser/functions/bool2str_spec.rb
Executable 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
|
24
spec/unit/puppet/parser/functions/camelcase_spec.rb
Executable file
24
spec/unit/puppet/parser/functions/camelcase_spec.rb
Executable 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
|
Loading…
Reference in a new issue