]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Adding base64 function
authorfiddyspence <chris.spence@puppetlabs.com>
Fri, 24 May 2013 15:33:24 +0000 (16:33 +0100)
committerfiddyspence <chris.spence@puppetlabs.com>
Fri, 24 May 2013 15:33:24 +0000 (16:33 +0100)
Adding base64 function and spec test.  Included a bonus fix to
validate_slength_spec.rb to put the expectation message in the right
place.

README.markdown
lib/puppet/parser/functions/base64.rb [new file with mode: 0644]
spec/unit/puppet/parser/functions/base64_spec.rb [new file with mode: 0755]
spec/unit/puppet/parser/functions/validate_slength_spec.rb

index 8a53f319434d2d9ff990dcc53a7e2747b32f6fdd..0e40f51a8ad208a1ed218d83fe89cd8854ef1de9 100644 (file)
@@ -81,6 +81,15 @@ lists are converted to an empty array. Arrays are left untouched. Hashes are
 converted to arrays of alternating keys and values.
 
 
+- *Type*: rvalue
+
+base64
+--------
+Converts a string to and from base64 encoding.
+Requires an action ['encode','decode'] and either a plain or base64 encoded
+string
+
+
 - *Type*: rvalue
 
 bool2num
diff --git a/lib/puppet/parser/functions/base64.rb b/lib/puppet/parser/functions/base64.rb
new file mode 100644 (file)
index 0000000..d9a590a
--- /dev/null
@@ -0,0 +1,37 @@
+module Puppet::Parser::Functions
+  newfunction(:base64, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
+
+    Base64 encode or decode a string based on the command and the string submitted
+
+    Usage:
+
+      $encodestring = base64('encode','thestring')
+      $decodestring = base64('decode','dGhlc3RyaW5n')
+
+    ENDHEREDOC
+    require 'base64'
+    raise Puppet::ParseError, ("base64(): Wrong number of arguments (#{args.length}; must be = 2)") unless args.length == 2
+
+    actions = ['encode','decode']
+
+    unless actions.include?(args[0])
+      raise Puppet::ParseError, ("base64(): the first argument must be one of 'encode' or 'decode'")
+    end
+    unless args[1].is_a?(String)
+      raise Puppet::ParseError, ("base64(): the second argument must be a string to base64")
+    end
+    case args[0]
+      when 'encode'
+        result = Base64.encode64(args[1])
+      when 'decode'
+        result = Base64.decode64(args[1])
+    end
+    return result
+  end
+end
diff --git a/spec/unit/puppet/parser/functions/base64_spec.rb b/spec/unit/puppet/parser/functions/base64_spec.rb
new file mode 100755 (executable)
index 0000000..5faa5e6
--- /dev/null
@@ -0,0 +1,34 @@
+#! /usr/bin/env ruby -S rspec
+
+require 'spec_helper'
+
+describe "the base64 function" do
+  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
+
+  it "should exist" do
+    Puppet::Parser::Functions.function("base64").should == "function_base64"
+  end
+
+  it "should raise a ParseError if there are other than 2 arguments" do
+    expect { scope.function_base64([]) }.to(raise_error(Puppet::ParseError))
+    expect { scope.function_base64(["asdf"]) }.to(raise_error(Puppet::ParseError))
+    expect { scope.function_base64(["asdf","moo","cow"]) }.to(raise_error(Puppet::ParseError))
+  end
+
+  it "should raise a ParseError if argument 1 isn't 'encode' or 'decode'" do
+    expect { scope.function_base64(["bees","astring"]) }.to(raise_error(Puppet::ParseError, /first argument must be one of/))
+  end
+
+  it "should raise a ParseError if argument 2 isn't a string" do
+    expect { scope.function_base64(["encode",["2"]]) }.to(raise_error(Puppet::ParseError, /second argument must be a string/))
+  end
+
+  it "should encode a encoded string" do
+    result = scope.function_base64(["encode",'thestring'])
+    result.should =~ /\AdGhlc3RyaW5n\n\Z/
+  end
+  it "should decode a base64 encoded string" do
+    result = scope.function_base64(["decode",'dGhlc3RyaW5n'])
+    result.should == 'thestring'
+  end
+end
index eccf908de07202e8a1f6a0fc58adc0ab588c2baa..b363e7a50ff2de62366511cd03cbb9985faec9c3 100755 (executable)
@@ -35,7 +35,7 @@ describe "the validate_slength function" do
   end
 
   it "should fail if you pass something other than a string or array" do
-    expect { scope.function_validate_slength([Hash.new["moo" => "7"],6]) }.to(raise_error(Puppet::ParseError), /please pass a string, or an array of strings/)
+    expect { scope.function_validate_slength([Hash.new["moo" => "7"],6]) }.to(raise_error(Puppet::ParseError, /please pass a string, or an array of strings/))
   end
 
   it "should not fail if string is smaller or equal to size" do