# File lib/puppet/transportable.rb, line 187
187:         def to_catalog(clear_on_failure = true)
188:             catalog = Puppet::Resource::Catalog.new(Facter.value("hostname"))
189: 
190:             # This should really use the 'delve' method, but this
191:             # whole class is going away relatively soon, hopefully,
192:             # so it's not worth it.
193:             delver = proc do |obj|
194:                 obj.catalog = catalog
195:                 unless container = catalog.resource(obj.to_ref)
196:                     container = obj.to_ral
197:                     catalog.add_resource container
198:                 end
199:                 obj.each do |child|
200:                     child.catalog = catalog
201:                     unless resource = catalog.resource(child.to_ref)
202:                         resource = child.to_ral
203:                         catalog.add_resource resource
204:                     end
205: 
206:                     catalog.add_edge(container, resource)
207:                     if child.is_a?(self.class)
208:                         delver.call(child)
209:                     end
210:                 end
211:             end
212: 
213:             begin
214:                 delver.call(self)
215:                 catalog.finalize
216:             rescue => detail
217:                 # This is important until we lose the global resource references.
218:                 catalog.clear if (clear_on_failure)
219:                 raise
220:             end
221: 
222:             return catalog
223:         end