Class: ZAML::Label

Inherits:
Object show all
Defined in:
lib/puppet/util/zaml.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(obj, indent) ⇒ Label

Returns a new instance of Label.



97
98
99
100
101
# File 'lib/puppet/util/zaml.rb', line 97

def initialize(obj,indent)
  @indent = indent
  @this_label_number = nil
  @obj = obj # prevent garbage collection so that object id isn't reused
end

Instance Attribute Details

#this_label_numberObject

YAML only wants objects in the datastream once; if the same object occurs more than once, we need to emit a label ("&idxxx") on the first occurrence and then emit a back reference (*idxxx") on any subsequent occurrence(s).

To accomplish this we keeps a hash (by object id) of the labels of the things we serialize as we begin to serialize them. The labels initially serialize as an empty string (since most objects are only going to be be encountered once), but can be changed to a valid (by assigning it a number) the first time it is subsequently used, if it ever is. Note that we need to do the label setup BEFORE we start to serialize the object so that circular structures (in which we will encounter a reference to the object as we serialize it can be handled).



95
96
97
# File 'lib/puppet/util/zaml.rb', line 95

def this_label_number
  @this_label_number
end

Instance Method Details

#referenceObject



107
108
109
# File 'lib/puppet/util/zaml.rb', line 107

def reference
  @reference         ||= '*id%03d' % @this_label_number
end

#to_sObject



103
104
105
# File 'lib/puppet/util/zaml.rb', line 103

def to_s
  @this_label_number ? ('&id%03d%s' % [@this_label_number, @indent]) : ''
end