diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2012-11-07 09:44:51 -0800 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-11-07 09:44:51 -0800 |
commit | 34b9cb8b94a43636a07ad13db0cc5417ee1cbe17 (patch) | |
tree | 611f21f881341b3ac8167111869e6f0c57f666a8 | |
parent | 23cf7d0ac19df403f05cf3fa93b674f56c2f8e89 (diff) | |
parent | 0b3e8f59a915fe4536a571234c1eea031b4ad6bb (diff) |
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
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | Modulefile | 2 | ||||
-rw-r--r-- | lib/puppet/parser/functions/uriescape.rb | 36 | ||||
-rw-r--r-- | spec/unit/puppet/parser/functions/uriescape_spec.rb | 24 |
4 files changed, 64 insertions, 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' diff --git a/lib/puppet/parser/functions/uriescape.rb b/lib/puppet/parser/functions/uriescape.rb new file mode 100644 index 0000000..67b93a6 --- /dev/null +++ b/lib/puppet/parser/functions/uriescape.rb @@ -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 : diff --git a/spec/unit/puppet/parser/functions/uriescape_spec.rb b/spec/unit/puppet/parser/functions/uriescape_spec.rb new file mode 100644 index 0000000..371de46 --- /dev/null +++ b/spec/unit/puppet/parser/functions/uriescape_spec.rb @@ -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 |