Merge branch '4.x'

* 4.x:
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Update CHANGELOG, Modulefile for 3.1.1
This commit is contained in:
Jeff McCune 2012-11-07 09:44:51 -08:00
commit 34b9cb8b94
4 changed files with 64 additions and 1 deletions

View file

@ -1,3 +1,6 @@
2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1
* (maint) Fix spec failures resulting from Facter API changes (97f836f)
2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0
* Add PE facts to stdlib (cdf3b05)

View file

@ -1,5 +1,5 @@
name 'puppetlabs-stdlib'
version '3.1.0'
version '3.1.1'
source 'git://github.com/puppetlabs/puppetlabs-stdlib'
author 'puppetlabs'
license 'Apache 2.0'

View file

@ -0,0 +1,36 @@
#
# uriescape.rb
#
require 'uri'
module Puppet::Parser::Functions
newfunction(:uriescape, :type => :rvalue, :doc => <<-EOS
Urlencodes a string or array of strings.
Requires either a single string or an array as an input.
EOS
) do |arguments|
raise(Puppet::ParseError, "uriescape(): Wrong number of arguments " +
"given (#{arguments.size} for 1)") if arguments.size < 1
value = arguments[0]
klass = value.class
unsafe = ":/?#[]@!$&'()*+,;= "
unless [Array, String].include?(klass)
raise(Puppet::ParseError, 'uriescape(): 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) ? URI.escape(i,unsafe) : i }
else
result = URI.escape(value,unsafe)
end
return result
end
end
# vim: set ts=2 sw=2 et :

View file

@ -0,0 +1,24 @@
#! /usr/bin/env ruby -S rspec
require 'spec_helper'
describe "the uriescape function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should exist" do
Puppet::Parser::Functions.function("uriescape").should == "function_uriescape"
end
it "should raise a ParseError if there is less than 1 arguments" do
lambda { scope.function_uriescape([]) }.should( raise_error(Puppet::ParseError))
end
it "should uriescape a string" do
result = scope.function_uriescape([":/?#[]@!$&'()*+,;= "])
result.should(eq('%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%20'))
end
it "should do nothing if a string is already safe" do
result = scope.function_uriescape(["ABCdef"])
result.should(eq('ABCdef'))
end
end