Module: Puppet::Util::PsychSupport
- Included in:
- Indirector::Request, Node, Node::Facts
- Defined in:
- lib/puppet/util/psych_support.rb
Overview
This module should be included when a class can be serialized to yaml and
needs to handle the deserialization from Psych with more control. Psych normall
pokes values directly into an instance using instance_variable_set which completely
bypasses encapsulation.
The class that includes this module must implement an instance method initialize_from_hash
that is given a hash with attribute to value mappings.
Instance Method Summary collapse
-
#encode_with(psych_encoder) ⇒ Object
This method is called from the Psych Yaml serializer The serializer will call this method to create a hash that will be serialized to YAML.
-
#init_with(psych_coder) ⇒ Object
This method is called from the Psych Yaml deserializer.
Instance Method Details
#encode_with(psych_encoder) ⇒ Object
This method is called from the Psych Yaml serializer
The serializer will call this method to create a hash that will be serialized to YAML.
Instead of using the object itself during the mapping process we use what is
returned by calling to_data_hash on the object itself since some of the
objects we manage have asymmetrical serialization and deserialization.
30 31 32 33 34 35 36 37 |
# File 'lib/puppet/util/psych_support.rb', line 30 def encode_with(psych_encoder) tag = Psych.[self.class] unless tag klass = self.class == Object ? nil : self.class.name tag = ['!ruby/object', klass].compact.join(':') end psych_encoder.represent_map(tag, to_data_hash) end |
#init_with(psych_coder) ⇒ Object
This method is called from the Psych Yaml deserializer.
The serializer calls this instead of doing the initialization itself using
instance_variable_set. The Status class requires this because it serializes its TagSet
as an Array in order to optimize the size of the serialized result.
When this array is later deserialized it must be reincarnated as a TagSet. The standard
Psych way of doing this via poking values into instance variables cannot do this.
17 18 19 20 21 22 |
# File 'lib/puppet/util/psych_support.rb', line 17 def init_with(psych_coder) # The PsychCoder has a hashmap of instance variable name (sans the @ symbol) to values # to set, and can thus directly be fed to initialize_from_hash. # initialize_from_hash(psych_coder.map) end |