Also working around a YAML bug in Ruby.

Signed-off-by: Luke Kanies <[email protected]>
---
 lib/puppet/node/catalog.rb              |   20 +++++++++++---------
 lib/puppet/parser/resource.rb           |    2 ++
 lib/puppet/parser/resource/param.rb     |    8 +++++---
 lib/puppet/parser/resource/reference.rb |    6 ++++++
 lib/puppet/parser/yaml_trimmer.rb       |   11 +++++++++++
 5 files changed, 35 insertions(+), 12 deletions(-)
 create mode 100644 lib/puppet/parser/yaml_trimmer.rb

diff --git a/lib/puppet/node/catalog.rb b/lib/puppet/node/catalog.rb
index 3473deb..ab80a97 100644
--- a/lib/puppet/node/catalog.rb
+++ b/lib/puppet/node/catalog.rb
@@ -432,16 +432,18 @@ class Puppet::Node::Catalog < Puppet::PGraph
         }
     end
 
-    # LAK:NOTE We cannot yaml-dump the class in the edgelist_class, because 
classes cannot be
-    # dumped by default, nor does yaml-dumping # the edge-labels work at this 
point (I don't
-    # know why).
-    #  Neither of these matters right now, but I suppose it could at some 
point.
-    # We also have to have the vertex_dict dumped after the resource table, 
because yaml can't
-    # seem to handle the output of yaml-dumping the vertex_dict.
     def to_yaml_properties
-        props = instance_variables.reject { |v| %...@edgelist_class 
@edge_labels @vertex_dict}.include?(v) }
-        props << "@vertex_dict"
-        props
+        result = instance_variables
+
+        # There's a ruby bug that hits us without this:
+        # 
http://rubyforge.org/tracker/?group_id=426&atid=1698&func=detail&aid=8886
+        # We need our resources to show up in as values in a hash
+        # before they show up as keys, because otherwise
+        # the loading fails.
+        result.delete "@resource_table"
+        result.unshift "@resource_table"
+
+        result
     end
 
     private
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index 893d5ba..9f496c7 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -5,6 +5,7 @@ class Puppet::Parser::Resource
     require 'puppet/parser/resource/reference'
     require 'puppet/util/tagging'
     require 'puppet/file_collection/lookup'
+    require 'puppet/parser/yaml_trimmer'
 
     include Puppet::FileCollection::Lookup
 
@@ -13,6 +14,7 @@ class Puppet::Parser::Resource
     include Puppet::Util::Errors
     include Puppet::Util::Logging
     include Puppet::Util::Tagging
+    include Puppet::Parser::YamlTrimmer
 
     attr_accessor :source, :scope, :rails_id
     attr_accessor :virtual, :override, :translated
diff --git a/lib/puppet/parser/resource/param.rb 
b/lib/puppet/parser/resource/param.rb
index 6e22d3e..3fbc596 100644
--- a/lib/puppet/parser/resource/param.rb
+++ b/lib/puppet/parser/resource/param.rb
@@ -1,4 +1,5 @@
 require 'puppet/file_collection/lookup'
+require 'puppet/parser/yaml_trimmer'
 
  # The parameters we stick in Resources.
 class Puppet::Parser::Resource::Param
@@ -8,6 +9,7 @@ class Puppet::Parser::Resource::Param
     include Puppet::Util::MethodHelper
 
     include Puppet::FileCollection::Lookup
+    include Puppet::Parser::YamlTrimmer
 
     def initialize(hash)
         set_options(hash)
@@ -15,9 +17,9 @@ class Puppet::Parser::Resource::Param
         @name = symbolize(@name)
     end
 
-    def inspect
-        "#<#{self.class} @name => #{name}, @value => #{value}, @source => 
#{source.name}, @line => #{line}>"
-    end
+    #def inspect
+    #    "#<#{self.class} @name => #{name}, @value => #{value}, @source => 
#{source.name if source}, @line => #{line}>"
+    #end
 
     def line_to_i
         return line ? Integer(line) : nil
diff --git a/lib/puppet/parser/resource/reference.rb 
b/lib/puppet/parser/resource/reference.rb
index bffc037..4a003f6 100644
--- a/lib/puppet/parser/resource/reference.rb
+++ b/lib/puppet/parser/resource/reference.rb
@@ -1,8 +1,10 @@
 require 'puppet/resource_reference'
 require 'puppet/file_collection/lookup'
+require 'puppet/parser/yaml_trimmer'
 
 # A reference to a resource.  Mostly just the type and title.
 class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
+    include Puppet::Parser::YamlTrimmer
     include Puppet::FileCollection::Lookup
     include Puppet::Util::MethodHelper
     include Puppet::Util::Errors
@@ -68,6 +70,10 @@ class Puppet::Parser::Resource::Reference < 
Puppet::ResourceReference
         requiredopts(:type, :title)
     end
 
+    def skip_for_yaml
+        %...@typeclass @definedtype}
+    end
+
     def to_ref
         # We have to return different cases to provide backward compatibility
         # from 0.24.x to 0.23.x.
diff --git a/lib/puppet/parser/yaml_trimmer.rb 
b/lib/puppet/parser/yaml_trimmer.rb
new file mode 100644
index 0000000..14064c8
--- /dev/null
+++ b/lib/puppet/parser/yaml_trimmer.rb
@@ -0,0 +1,11 @@
+module Puppet::Parser::YamlTrimmer
+    REMOVE = %...@scope @source}
+
+    def to_yaml_properties
+        r = instance_variables - REMOVE
+        if respond_to?(:skip_for_yaml)
+            r -= skip_for_yaml()
+        end
+        r
+    end
+end
-- 
1.6.1


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to