Module: Puppet::Util::PsychSupport
- Included in:
- Indirector::Request, Node, Node::Facts, Resource::Status, Log
- 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 |