[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35

test branch puppet-dev at googlegroups.com
Wed Jul 14 10:31:32 UTC 2010


The following commit has been merged in the upstream branch:
commit 33b565a0d76b07f354e2e145e7e03e5a5db69e48
Author: Markus Roberts <Markus at reality.com>
Date:   Thu Mar 25 15:54:33 2010 -0700

    Fix for #3424 and tests to prove it.
    
    The original pure ruby yaml patch missed some edge cases; specifically, classes
    that were modified by the syck version to directly call it and thus never
    reached the pure ruby version.  This adds monkey patches to all of those case
    which we might reasonably care about (omitting, for example, calls within the
    syck version to itself) and tests which show that the monkey patch works.

diff --git a/lib/puppet/util/monkey_patches.rb b/lib/puppet/util/monkey_patches.rb
index 05d3193..53ae1b9 100644
--- a/lib/puppet/util/monkey_patches.rb
+++ b/lib/puppet/util/monkey_patches.rb
@@ -20,11 +20,13 @@ class Symbol
     end
 end
 
-class Object
-    def to_yaml
-        ZAML.dump(self)
+[Object, Exception, Integer, Struct, Date, Time, Range, Regexp, Hash, Array, Float, String, FalseClass, TrueClass, Symbol, NilClass, Class].each { |cls|
+    cls.class_eval do
+        def to_yaml
+            ZAML.dump(self)
+        end
     end
-end
+}
 
 def YAML.dump(*args)
     ZAML.dump(*args)
diff --git a/spec/unit/util/zaml.rb b/spec/unit/util/zaml.rb
new file mode 100644
index 0000000..1f21c4e
--- /dev/null
+++ b/spec/unit/util/zaml.rb
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+require 'puppet/util/monkey_patches'
+
+describe "Pure ruby yaml implementation" do
+    {
+    7            => "--- 7",
+    3.14159      => "--- 3.14159",
+    'test'       => "--- test",
+    []           => "--- []",
+    :symbol      => "--- !ruby/sym symbol",
+    {:a => "A"}  => "--- \n  !ruby/sym a: A"
+    }.each { |o,y| 
+        it "should convert the #{o.class} #{o.inspect} to yaml" do
+            o.to_yaml.should == y
+        end
+        it "should produce yaml for the #{o.class} #{o.inspect} that can be reconstituted" do
+            YAML.load(o.to_yaml).should == o
+        end
+    }
+    #
+    # Can't test for equality on raw objects
+    {
+    Object.new                   => "--- !ruby/object {}",
+    [Object.new]                 => "--- \n  - !ruby/object {}",
+    {Object.new => Object.new}   => "--- \n  ? !ruby/object {}\n  : !ruby/object {}"
+    }.each { |o,y| 
+        it "should convert the #{o.class} #{o.inspect} to yaml" do
+            o.to_yaml.should == y
+        end
+        it "should produce yaml for the #{o.class} #{o.inspect} that can be reconstituted" do
+            lambda { YAML.load(o.to_yaml) }.should_not raise_error
+        end
+    }
+end
+

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list