Muriel-Salvan/ruby-serial

View on GitHub
lib/ruby-serial/deserializer.rb

Summary

Maintainability
A
0 mins
Test Coverage
module RubySerial

  # Deserialize data previously serialized using Serializer
  class Deserializer

    # Constructor
    #
    # Parameters::
    # * *data* (_String_): Serialized data (should be BINARY encoding only)
    def initialize(data)
      @data = data
    end

    # Load the serialized object
    #
    # Result::
    # * _Object_: The deserialized object
    def load
      # Find the version
      idx_data_separator = @data.index("\x00")
      raise 'Unknown format of data. It appears this data has not been serialized using RubySerial.' if idx_data_separator.nil?
      version = @data[0..(idx_data_separator - 1)]
      data = @data[(idx_data_separator + 1)..-1]

      deserializer = nil
      begin
        require "ruby-serial/versions/#{version}/deserializer"
        deserializer = RubySerial::Deserializer::Versions.const_get("Version#{version}")::Deserializer.new
      rescue
        raise "Unknown deserializer version #{version}. Please use a most recent version of RubySerial to decode your data. #{$ERROR_INFO}"
      end

      deserializer.unpack_data(data)
    end

  end

end