Module: Announcer::Mixins::Serializable::ClassMethods
- Defined in:
- lib/announcer/mixins/serializable.rb
Instance Method Summary collapse
- #_deserialize_arg(arg) ⇒ Object
- #_deserialize_args(args) ⇒ Object
- #_serializable_args ⇒ Object
- #_serializable_decode(encoded) ⇒ Object
- #_serializable_decode_class(encoded_klass) ⇒ Object
-
#_serializable_encode(marshalled) ⇒ Object
Encoding.
-
#_serializable_encode_class(klass) ⇒ Object
Class Encoding.
- #_serializable_load_package(package) ⇒ Object
-
#_serializable_marshal(package) ⇒ Object
Marshalling.
-
#_serializable_package(klass, args) ⇒ Object
Packaging.
- #_serializable_unmarshal(marshalled) ⇒ Object
- #_serializable_unpackage(package) ⇒ Object
- #_serializable_valid_package?(package, noisy = true) ⇒ Boolean
-
#_serializable_values ⇒ Object
Helpers.
- #deserialize(encoded) ⇒ Object
- #serialize_with(*args) ⇒ Object
Instance Method Details
#_deserialize_arg(arg) ⇒ Object
39 40 41 42 43 44 45 |
# 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) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# 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 ⇒ Object
152 153 154 155 |
# 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) ⇒ Object
54 55 56 57 58 59 60 |
# 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) ⇒ Object
85 86 87 |
# 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) ⇒ Object
Encoding
50 51 52 |
# File 'lib/announcer/mixins/serializable.rb', line 50 def _serializable_encode(marshalled) Base64.strict_encode64(marshalled) # => encoded end |
#_serializable_encode_class(klass) ⇒ Object
Class Encoding
81 82 83 |
# 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) ⇒ Object
24 25 26 27 |
# 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) ⇒ Object
Marshalling
65 66 67 |
# File 'lib/announcer/mixins/serializable.rb', line 65 def _serializable_marshal(package) Marshal.dump(package) # => marshalled end |
#_serializable_package(klass, args) ⇒ Object
Packaging
92 93 94 95 |
# 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) ⇒ Object
69 70 71 72 73 74 75 |
# 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) ⇒ Object
138 139 140 141 142 143 |
# 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) ⇒ Boolean
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# 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 ⇒ Object
Helpers
148 149 150 |
# File 'lib/announcer/mixins/serializable.rb', line 148 def _serializable_values @__serializable_values ||= {} end |
#deserialize(encoded) ⇒ Object
18 19 20 21 22 |
# 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) ⇒ Object
14 15 16 |
# File 'lib/announcer/mixins/serializable.rb', line 14 def serialize_with(*args) _serializable_values[:args] = args.map(&:to_sym) end |