Class: Cicada::Serialization
- Inherits:
-
Object
- Object
- Cicada::Serialization
- Defined in:
- lib/cicada/file_interaction.rb
Overview
Handles the serialization of the ImageObjects for storing them in a file.
The serialized output will consist of an XML file describing the objects in human-readable form and including a binary data sectiobn containing the serialized object. This binary section is the only thing read back in, so changing the XML human-readable portion of the file manually will not affect the data read back in.
Class Method Summary collapse
-
.image_object_from_bytes(bin_data) ⇒ ImageObject
Restores an image object from a byte string.
-
.serialize_image_objects(image_objects) ⇒ String
Converts an array of ImageObjects to an XML-formatted string containing the serialized data.
-
.unserialize_image_objects(data) ⇒ Array<ImageObject>
Restores image objects from an XML string containing their serialized representation.
Class Method Details
.image_object_from_bytes(bin_data) ⇒ ImageObject
Restores an image object from a byte string.
81 82 83 |
# File 'lib/cicada/file_interaction.rb', line 81 def self.image_object_from_bytes(bin_data) Marshal.load(bin_data) end |
.serialize_image_objects(image_objects) ⇒ String
Converts an array of ImageObjects to an XML-formatted string containing the serialized data.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/cicada/file_interaction.rb', line 57 def self.serialize_image_objects(image_objects) doc = REXML::Document.new doc.add_element "root" image_objects.each do |iobj| in_doc = REXML::Document.new iobj.writeToXMLString in_doc.root.elements[1, "serialized_form"].text = Base64.encode64(Marshal.dump(iobj)) doc.root.add in_doc.elements[1,"image_object"] end output = "" doc.write(output, 2) output end |
.unserialize_image_objects(data) ⇒ Array<ImageObject>
Restores image objects from an XML string containing their serialized representation. (This uses the base64 encoded binary information in the XML file, not the human readable portion.)
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/cicada/file_interaction.rb', line 93 def self.unserialize_image_objects(data) objs = [] doc = REXML::Document.new data doc.elements.each("*/image_object/serialized_form") do |el| bin_data = Base64.decode64(el.text) objs << image_object_from_bytes(bin_data) end objs end |