diff options
| -rw-r--r-- | lib/puppet/util/monkey_patches.rb | 10 | ||||
| -rw-r--r-- | spec/unit/util/zaml.rb | 38 |
2 files changed, 44 insertions, 4 deletions
diff --git a/lib/puppet/util/monkey_patches.rb b/lib/puppet/util/monkey_patches.rb index 05d319356..53ae1b9c0 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 000000000..1f21c4e29 --- /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 + |
