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:
commit
34b9cb8b94
4 changed files with 64 additions and 1 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
36
lib/puppet/parser/functions/uriescape.rb
Normal file
36
lib/puppet/parser/functions/uriescape.rb
Normal 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 :
|
24
spec/unit/puppet/parser/functions/uriescape_spec.rb
Normal file
24
spec/unit/puppet/parser/functions/uriescape_spec.rb
Normal 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
|
Loading…
Reference in a new issue