Skip to content

Commit

Permalink
Merge pull request redhat-openstack#255 from mckern/enhancement/maste…
Browse files Browse the repository at this point in the history
…r/camelcasedembools

(MODULES-905) Add bool2str() and camelcase() for string manipulation
  • Loading branch information
Ashley Penney committed May 15, 2014
2 parents 8499ebd + 0761fcf commit 430d821
Show file tree
Hide file tree
Showing 4 changed files with 121 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 :
34 changes: 34 additions & 0 deletions spec/unit/puppet/parser/functions/bool2str_spec.rb
Original file line number Diff line number Diff line change
@@ -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 changes: 24 additions & 0 deletions spec/unit/puppet/parser/functions/camelcase_spec.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 430d821

Please sign in to comment.