# class ZAML::Label

### Attributes

this_label_number[RW]

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).

### Public Class Methods

new(obj,indent) click to toggle source

    # File lib/puppet/util/zaml.rb, line 96
    def initialize(obj,indent)
      @indent = indent
      @this_label_number = nil
      @obj = obj # prevent garbage collection so that object id isn't reused
    end

### Public Instance Methods

reference() click to toggle source

    # File lib/puppet/util/zaml.rb, line 106
    def reference
      @reference         ||= '*id%03d' % @this_label_number
    end

to_s() click to toggle source

    # File lib/puppet/util/zaml.rb, line 102
    def to_s
      @this_label_number ? ('&id%03d%s' % [@this_label_number, @indent]) : ''
    end