module Announcer::Mixins::Serializable::ClassMethods
Public Instance Methods
_deserialize_arg(arg)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 39 def _deserialize_arg(arg) if _serializable_valid_package?(arg, false) _serializable_load_package(arg) else arg end end
_deserialize_args(args)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 29 def _deserialize_args(args) args = args.map { |arg| _deserialize_arg(arg) } if respond_to?(:load_from_serialized) load_from_serialized(*args) else new(*args) end end
_serializable_args()
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 152 def _serializable_args _serializable_values[:args] or raise Errors::SerializableError, "Missing serialize_with definition" end
_serializable_decode(encoded)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 54 def _serializable_decode(encoded) begin Base64.strict_decode64(encoded) # => marshalled rescue ArgumentError raise Errors::SerializableError, 'serialized string not encoded properly' end end
_serializable_decode_class(encoded_klass)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 85 def _serializable_decode_class(encoded_klass) Announcer.const_get(encoded_klass.to_s) end
_serializable_encode(marshalled)
click to toggle source
Encoding
# File lib/announcer/mixins/serializable.rb, line 50 def _serializable_encode(marshalled) Base64.strict_encode64(marshalled) # => encoded end
_serializable_encode_class(klass)
click to toggle source
Class Encoding
# File lib/announcer/mixins/serializable.rb, line 81 def _serializable_encode_class(klass) klass.name.to_s.sub('Announcer::', '').to_sym end
_serializable_load_package(package)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 24 def _serializable_load_package(package) klass, args = _serializable_unpackage(package) klass._deserialize_args(args) end
_serializable_marshal(package)
click to toggle source
Marshalling
# File lib/announcer/mixins/serializable.rb, line 65 def _serializable_marshal(package) Marshal.dump(package) # => marshalled end
_serializable_package(klass, args)
click to toggle source
Packaging
# File lib/announcer/mixins/serializable.rb, line 92 def _serializable_package(klass, args) encoded_klass = _serializable_encode_class(klass) [MAGIC, VERSION, encoded_klass] + args # => package end
_serializable_unmarshal(marshalled)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 69 def _serializable_unmarshal(marshalled) begin Marshal.load(marshalled) # => package rescue TypeError raise Errors::SerializableError, 'incorrect format' end end
_serializable_unpackage(package)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 138 def _serializable_unpackage(package) _serializable_valid_package?(package) magic, version, encoded_klass, *args = package klass = _serializable_decode_class(encoded_klass) [klass, args] end
_serializable_valid_package?(package, noisy=true)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 97 def _serializable_valid_package?(package, noisy=true) unless package.is_a?(Array) if noisy raise Errors::SerializableError, 'not a package' else return false end end magic, version, class_name = package # Check Magic unless magic == MAGIC if noisy raise Errors::SerializableError, 'invalid serialized package' else return false end end # Check Version unless version == VERSION if noisy raise Errors::SerializableError, 'unsupported package version' else return false end end # Check Class Name unless class_name.is_a?(Symbol) if noisy raise Errors::SerializableError, 'invalid class name' else return false end end return true end
_serializable_values()
click to toggle source
Helpers
# File lib/announcer/mixins/serializable.rb, line 148 def _serializable_values @__serializable_values ||= {} end
deserialize(encoded)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 18 def deserialize(encoded) marshalled = _serializable_decode(encoded) package = _serializable_unmarshal(marshalled) _serializable_load_package(package) end
serialize_with(*args)
click to toggle source
# File lib/announcer/mixins/serializable.rb, line 14 def serialize_with(*args) _serializable_values[:args] = args.map(&:to_sym) end