summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/parameter.rb16
-rw-r--r--lib/puppet/property.rb4
-rwxr-xr-xspec/unit/parameter.rb10
-rwxr-xr-xspec/unit/property.rb16
4 files changed, 43 insertions, 3 deletions
diff --git a/lib/puppet/parameter.rb b/lib/puppet/parameter.rb
index 04b3aec30..ae152de56 100644
--- a/lib/puppet/parameter.rb
+++ b/lib/puppet/parameter.rb
@@ -286,6 +286,13 @@ class Puppet::Parameter
define_method(:unsafe_munge, &block)
end
+ # Does the parameter supports reverse munge?
+ # This will be called when something wants to access the parameter
+ # in a canonical form different to what the storage form is.
+ def unmunge(&block)
+ define_method(:unmunge, &block)
+ end
+
# Mark whether we're the namevar.
def isnamevar
@isnamevar = true
@@ -446,6 +453,11 @@ class Puppet::Parameter
self.class.value_collection.munge(value)
end
+ # no unmunge by default
+ def unmunge(value)
+ value
+ end
+
# A wrapper around our munging that makes sure we raise useful exceptions.
def munge(value)
begin
@@ -482,7 +494,9 @@ class Puppet::Parameter
@resource = nil
end
- attr_reader :value
+ def value
+ unmunge(@value)
+ end
# Store the value provided. All of the checking should possibly be
# late-binding (e.g., users might not exist when the value is assigned
diff --git a/lib/puppet/property.rb b/lib/puppet/property.rb
index 3bb1a4f0c..a144f28d0 100644
--- a/lib/puppet/property.rb
+++ b/lib/puppet/property.rb
@@ -332,9 +332,9 @@ class Puppet::Property < Puppet::Parameter
[self.class.name, @resource.name]
end
if match_all?
- return @should
+ return @should.collect { |val| self.unmunge(val) }
else
- return @should[0]
+ return self.unmunge(@should[0])
end
else
return nil
diff --git a/spec/unit/parameter.rb b/spec/unit/parameter.rb
index 94f5cfd7b..42d3103bd 100755
--- a/spec/unit/parameter.rb
+++ b/spec/unit/parameter.rb
@@ -46,6 +46,16 @@ describe Puppet::Parameter do
@parameter.value.should == "bar"
end
+ it "should unmunge the value when accessing the actual value" do
+ @parameter.class.unmunge do |value| value.to_sym end
+ @parameter.value = "foo"
+ @parameter.value.should == :foo
+ end
+
+ it "should return the actual value by default when unmunging" do
+ @parameter.unmunge("bar").should == "bar"
+ end
+
it "should return any set value" do
@parameter.value = "foo"
@parameter.value.should == "foo"
diff --git a/spec/unit/property.rb b/spec/unit/property.rb
index e2ba83303..f09549ddc 100755
--- a/spec/unit/property.rb
+++ b/spec/unit/property.rb
@@ -129,6 +129,22 @@ describe Puppet::Property do
it "should default to :first array_matching" do
@class.array_matching.should == :first
end
+
+ it "should unmunge the returned value if :array_matching is set to :first" do
+ @property.class.unmunge do |v| v.to_sym end
+ @class.array_matching = :first
+ @property.should = %w{one two}
+
+ @property.should.must == :one
+ end
+
+ it "should unmunge all the returned values if :array_matching is set to :all" do
+ @property.class.unmunge do |v| v.to_sym end
+ @class.array_matching = :all
+ @property.should = %w{one two}
+
+ @property.should.must == [:one, :two]
+ end
end
describe "when validating values" do