class Puppet::Pops::Binder::Producers::DeepCloningProducer

Produces a deep clone of its value on each production. @api public

Protected Instance Methods

internal_produce(scope) click to toggle source

@api private

# File lib/puppet/pops/binder/producers.rb, line 159
def internal_produce(scope)
  case value
  when Integer, Float, TrueClass, FalseClass, Symbol
    # These are immutable
    return value
  when String
    # ok if frozen, else fall through to default
    return value() if value.frozen?
  end
  # The default: serialize/deserialize to get a deep copy
  Marshal.load(Marshal.dump(value()))
end