mrpin-rocketamf 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1965a3a034f950dc7aed1f7fbba3fa1666cd37df
4
- data.tar.gz: 8f1219aa31b872caa196fc0933a1da5a1dbf4c84
3
+ metadata.gz: 4e8a83878828c26ef9906a0b891828dcf688dff8
4
+ data.tar.gz: 8b58e2eb9a56aa6686f4e37358536eea50d111d6
5
5
  SHA512:
6
- metadata.gz: f996de739792fc2b11cc721497a1744988b14d380be1d48f4b49ecae20cf406c0406f2a44787c25441bc61f2a4b9ec1b7a3cfaafbe92cfedc1293c7a51301ba1
7
- data.tar.gz: 24570900deb8ed752aaee960d85d331bf068aeaaf34dcf95c2c9a6117712eaeb978c5d35efa305b5449b29d8d4a00954f29a3eb6ed4029f3560d7b71c20fa3c0
6
+ metadata.gz: 4e12c5efe65968313ab9251f589421e7967507d1d9c892f3ddf76c73da9df996b3157ce458c7c5e56f0d0868e4b2198ffd9085718533e039daed179ed7f938ed
7
+ data.tar.gz: 755b54807d0f1f0fbb20ec1b95f3fb4f09cd62d5a820e8d021b5bab951e9c380aea99952fb713ec492d9d7d02be1b6000c3997996874c8642a4295f7bb1e0906
@@ -9,7 +9,7 @@ module RocketAMF
9
9
  # Pass in the class mapper instance to use when deserializing. This
10
10
  # enables better caching behavior in the class mapper and allows
11
11
  # one to change mappings between deserialization attempts.
12
- def initialize class_mapper
12
+ def initialize(class_mapper)
13
13
  @class_mapper = class_mapper
14
14
  end
15
15
 
@@ -17,93 +17,99 @@ module RocketAMF
17
17
  # be a string or StringIO object. If you pass a StringIO object,
18
18
  # it will have its position updated to the end of the deserialized
19
19
  # data.
20
- def deserialize version, source
21
- raise ArgumentError, "unsupported version #{version}" unless [0,3].include?(version)
20
+ def deserialize(version, source)
21
+ result = []
22
+
22
23
  @version = version
23
24
 
24
- if StringIO === source
25
+ if source.is_a?(StringIO)
25
26
  @source = source
26
27
  elsif source
27
28
  @source = StringIO.new(source)
28
29
  elsif @source.nil?
29
- raise AMFError, "no source to deserialize"
30
+ raise AMFError, 'no source to deserialize'
30
31
  end
31
32
 
32
- if @version == 0
33
- @ref_cache = []
34
- return amf0_deserialize
35
- else
36
- @string_cache = []
37
- @object_cache = []
38
- @trait_cache = []
39
- return amf3_deserialize
33
+ case @version
34
+ when 0
35
+ until @source.eof?
36
+ @ref_cache = []
37
+ result << amf0_deserialize
38
+ end
39
+ when 3
40
+ until @source.eof?
41
+ @string_cache = []
42
+ @object_cache = []
43
+ @trait_cache = []
44
+ result << amf3_deserialize
45
+ end
46
+ else
47
+ raise ArgumentError, "unsupported version #{version}"
40
48
  end
49
+
50
+ result
41
51
  end
42
52
 
43
53
  # Reads an object from the deserializer's stream and returns it.
44
54
  def read_object
45
- if @version == 0
46
- return amf0_deserialize
47
- else
48
- return amf3_deserialize
49
- end
55
+ @version == 0 ? amf0_deserialize : amf3_deserialize
50
56
  end
51
57
 
52
58
  private
53
59
  include RocketAMF::Pure::ReadIOHelpers
54
60
 
55
- def amf0_deserialize type=nil
61
+ def amf0_deserialize(type = nil)
56
62
  type = read_int8 @source unless type
57
63
  case type
58
- when AMF0_NUMBER_MARKER
59
- amf0_read_number
60
- when AMF0_BOOLEAN_MARKER
61
- amf0_read_boolean
62
- when AMF0_STRING_MARKER
63
- amf0_read_string
64
- when AMF0_OBJECT_MARKER
65
- amf0_read_object
66
- when AMF0_NULL_MARKER
67
- nil
68
- when AMF0_UNDEFINED_MARKER
69
- nil
70
- when AMF0_REFERENCE_MARKER
71
- amf0_read_reference
72
- when AMF0_HASH_MARKER
73
- amf0_read_hash
74
- when AMF0_STRICT_ARRAY_MARKER
75
- amf0_read_array
76
- when AMF0_DATE_MARKER
77
- amf0_read_date
78
- when AMF0_LONG_STRING_MARKER
79
- amf0_read_string true
80
- when AMF0_UNSUPPORTED_MARKER
81
- nil
82
- when AMF0_XML_MARKER
83
- amf0_read_string true
84
- when AMF0_TYPED_OBJECT_MARKER
85
- amf0_read_typed_object
86
- when AMF0_AMF3_MARKER
87
- deserialize(3, nil)
88
- else
89
- raise AMFError, "Invalid type: #{type}"
64
+ when AMF0_NUMBER_MARKER
65
+ amf0_read_number
66
+ when AMF0_BOOLEAN_MARKER
67
+ amf0_read_boolean
68
+ when AMF0_STRING_MARKER
69
+ amf0_read_string
70
+ when AMF0_OBJECT_MARKER
71
+ amf0_read_object
72
+ when AMF0_NULL_MARKER
73
+ nil
74
+ when AMF0_UNDEFINED_MARKER
75
+ nil
76
+ when AMF0_REFERENCE_MARKER
77
+ amf0_read_reference
78
+ when AMF0_HASH_MARKER
79
+ amf0_read_hash
80
+ when AMF0_STRICT_ARRAY_MARKER
81
+ amf0_read_array
82
+ when AMF0_DATE_MARKER
83
+ amf0_read_date
84
+ when AMF0_LONG_STRING_MARKER
85
+ amf0_read_string true
86
+ when AMF0_UNSUPPORTED_MARKER
87
+ nil
88
+ when AMF0_XML_MARKER
89
+ amf0_read_string true
90
+ when AMF0_TYPED_OBJECT_MARKER
91
+ amf0_read_typed_object
92
+ when AMF0_AMF3_MARKER
93
+ deserialize(3, nil)
94
+ else
95
+ raise AMFError, "Invalid type: #{type}"
90
96
  end
91
97
  end
92
98
 
93
99
  def amf0_read_number
94
- res = read_double @source
95
- (res.is_a?(Float) && res.nan?) ? nil : res # check for NaN and convert them to nil
100
+ result = read_double @source
101
+ (result.is_a?(Float) && result.nan?) ? nil : result # check for NaN and convert them to nil
96
102
  end
97
103
 
98
104
  def amf0_read_boolean
99
105
  read_int8(@source) != 0
100
106
  end
101
107
 
102
- def amf0_read_string long=false
103
- len = long ? read_word32_network(@source) : read_word16_network(@source)
104
- str = @source.read(len)
105
- str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
106
- str
108
+ def amf0_read_string(long=false)
109
+ len = long ? read_word32_network(@source) : read_word16_network(@source)
110
+ result = @source.read(len)
111
+ result.force_encoding('UTF-8') if result.respond_to?(:force_encoding)
112
+ result
107
113
  end
108
114
 
109
115
  def amf0_read_reference
@@ -112,26 +118,26 @@ module RocketAMF
112
118
  end
113
119
 
114
120
  def amf0_read_array
115
- len = read_word32_network(@source)
116
- array = []
117
- @ref_cache << array
121
+ len = read_word32_network(@source)
122
+ result = []
123
+ @ref_cache << result
118
124
 
119
125
  0.upto(len - 1) do
120
- array << amf0_deserialize
126
+ result << amf0_deserialize
121
127
  end
122
- array
128
+ result
123
129
  end
124
130
 
125
131
  def amf0_read_date
126
132
  seconds = read_double(@source).to_f/1000
127
- time = Time.at(seconds)
128
- tz = read_word16_network(@source) # Unused
133
+ time = Time.at(seconds)
134
+ tz = read_word16_network(@source) # Unused
129
135
  time
130
136
  end
131
137
 
132
- def amf0_read_props obj={}
138
+ def amf0_read_props(obj = {})
133
139
  while true
134
- key = amf0_read_string
140
+ key = amf0_read_string
135
141
  type = read_int8 @source
136
142
  break if type == AMF0_OBJECT_END_MARKER
137
143
  obj[key] = amf0_deserialize(type)
@@ -160,7 +166,7 @@ module RocketAMF
160
166
  def amf0_read_typed_object
161
167
  # Create object to add to ref cache
162
168
  class_name = amf0_read_string
163
- obj = @class_mapper.get_ruby_obj class_name
169
+ obj = @class_mapper.get_ruby_obj class_name
164
170
  @ref_cache << obj
165
171
 
166
172
  # Populate object
@@ -172,52 +178,52 @@ module RocketAMF
172
178
  def amf3_deserialize
173
179
  type = read_int8 @source
174
180
  case type
175
- when AMF3_UNDEFINED_MARKER
176
- nil
177
- when AMF3_NULL_MARKER
178
- nil
179
- when AMF3_FALSE_MARKER
180
- false
181
- when AMF3_TRUE_MARKER
182
- true
183
- when AMF3_INTEGER_MARKER
184
- amf3_read_integer
185
- when AMF3_DOUBLE_MARKER
186
- amf3_read_number
187
- when AMF3_STRING_MARKER
188
- amf3_read_string
189
- when AMF3_XML_DOC_MARKER, AMF3_XML_MARKER
190
- amf3_read_xml
191
- when AMF3_DATE_MARKER
192
- amf3_read_date
193
- when AMF3_ARRAY_MARKER
194
- amf3_read_array
195
- when AMF3_OBJECT_MARKER
196
- amf3_read_object
197
- when AMF3_BYTE_ARRAY_MARKER
198
- amf3_read_byte_array
199
- when AMF3_VECTOR_INT_MARKER, AMF3_VECTOR_UINT_MARKER, AMF3_VECTOR_DOUBLE_MARKER, AMF3_VECTOR_OBJECT_MARKER
200
- amf3_read_vector type
201
- when AMF3_DICT_MARKER
202
- amf3_read_dict
203
- else
204
- raise AMFError, "Invalid type: #{type}"
181
+ when AMF3_UNDEFINED_MARKER
182
+ nil
183
+ when AMF3_NULL_MARKER
184
+ nil
185
+ when AMF3_FALSE_MARKER
186
+ false
187
+ when AMF3_TRUE_MARKER
188
+ true
189
+ when AMF3_INTEGER_MARKER
190
+ amf3_read_integer
191
+ when AMF3_DOUBLE_MARKER
192
+ amf3_read_number
193
+ when AMF3_STRING_MARKER
194
+ amf3_read_string
195
+ when AMF3_XML_DOC_MARKER, AMF3_XML_MARKER
196
+ amf3_read_xml
197
+ when AMF3_DATE_MARKER
198
+ amf3_read_date
199
+ when AMF3_ARRAY_MARKER
200
+ amf3_read_array
201
+ when AMF3_OBJECT_MARKER
202
+ amf3_read_object
203
+ when AMF3_BYTE_ARRAY_MARKER
204
+ amf3_read_byte_array
205
+ when AMF3_VECTOR_INT_MARKER, AMF3_VECTOR_UINT_MARKER, AMF3_VECTOR_DOUBLE_MARKER, AMF3_VECTOR_OBJECT_MARKER
206
+ amf3_read_vector type
207
+ when AMF3_DICT_MARKER
208
+ amf3_read_dict
209
+ else
210
+ raise AMFError, "Invalid type: #{type}"
205
211
  end
206
212
  end
207
213
 
208
214
  def amf3_read_integer
209
- n = 0
210
- b = read_word8(@source) || 0
215
+ n = 0
216
+ b = read_word8(@source) || 0
211
217
  result = 0
212
218
 
213
219
  while ((b & 0x80) != 0 && n < 3)
214
220
  result = result << 7
215
221
  result = result | (b & 0x7f)
216
- b = read_word8(@source) || 0
217
- n = n + 1
222
+ b = read_word8(@source) || 0
223
+ n = n + 1
218
224
  end
219
225
 
220
- if (n < 3)
226
+ if n < 3
221
227
  result = result << 7
222
228
  result = result | b
223
229
  else
@@ -226,7 +232,7 @@ module RocketAMF
226
232
  result = result | b
227
233
 
228
234
  #Check if the integer should be negative
229
- if (result > MAX_INTEGER)
235
+ if result > MAX_INTEGER
230
236
  result -= (1 << 29)
231
237
  end
232
238
  end
@@ -239,7 +245,7 @@ module RocketAMF
239
245
  end
240
246
 
241
247
  def amf3_read_string
242
- type = amf3_read_integer
248
+ type = amf3_read_integer
243
249
  is_reference = (type & 0x01) == 0
244
250
 
245
251
  if is_reference
@@ -247,10 +253,10 @@ module RocketAMF
247
253
  return @string_cache[reference]
248
254
  else
249
255
  length = type >> 1
250
- str = ""
256
+ str = ''
251
257
  if length > 0
252
258
  str = @source.read(length)
253
- str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
259
+ str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
254
260
  @string_cache << str
255
261
  end
256
262
  return str
@@ -258,26 +264,30 @@ module RocketAMF
258
264
  end
259
265
 
260
266
  def amf3_read_xml
261
- type = amf3_read_integer
267
+ result = nil
268
+
269
+ type = amf3_read_integer
262
270
  is_reference = (type & 0x01) == 0
263
271
 
264
272
  if is_reference
265
273
  reference = type >> 1
266
- return @object_cache[reference]
274
+ result = @object_cache[reference]
267
275
  else
268
276
  length = type >> 1
269
- str = ""
277
+ str = ""
270
278
  if length > 0
271
279
  str = @source.read(length)
272
280
  str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
273
281
  @object_cache << str
274
282
  end
275
- return str
283
+ result = str
276
284
  end
285
+
286
+ result
277
287
  end
278
288
 
279
289
  def amf3_read_byte_array
280
- type = amf3_read_integer
290
+ type = amf3_read_integer
281
291
  is_reference = (type & 0x01) == 0
282
292
 
283
293
  if is_reference
@@ -285,65 +295,66 @@ module RocketAMF
285
295
  return @object_cache[reference]
286
296
  else
287
297
  length = type >> 1
288
- obj = StringIO.new @source.read(length)
298
+ obj = StringIO.new @source.read(length)
289
299
  @object_cache << obj
290
300
  obj
291
301
  end
292
302
  end
293
303
 
294
304
  def amf3_read_array
295
- type = amf3_read_integer
305
+ type = amf3_read_integer
296
306
  is_reference = (type & 0x01) == 0
297
307
 
298
308
  if is_reference
299
309
  reference = type >> 1
300
310
  return @object_cache[reference]
301
311
  else
302
- length = type >> 1
312
+ length = type >> 1
303
313
  property_name = amf3_read_string
304
- array = property_name.length > 0 ? {} : []
314
+ array = property_name.length > 0 ? {} : []
305
315
  @object_cache << array
306
316
 
307
317
  while property_name.length > 0
308
- value = amf3_deserialize
318
+ value = amf3_deserialize
309
319
  array[property_name] = value
310
- property_name = amf3_read_string
320
+ property_name = amf3_read_string
311
321
  end
312
- 0.upto(length - 1) {|i| array[i] = amf3_deserialize }
322
+ 0.upto(length - 1) { |i| array[i] = amf3_deserialize }
313
323
 
314
324
  array
315
325
  end
316
326
  end
317
327
 
318
328
  def amf3_read_object
319
- type = amf3_read_integer
329
+ type = amf3_read_integer
320
330
  is_reference = (type & 0x01) == 0
321
331
 
322
332
  if is_reference
323
333
  reference = type >> 1
324
334
  return @object_cache[reference]
325
335
  else
326
- class_type = type >> 1
336
+ class_type = type >> 1
327
337
  class_is_reference = (class_type & 0x01) == 0
328
338
 
329
339
  if class_is_reference
330
340
  reference = class_type >> 1
331
- traits = @trait_cache[reference]
341
+ traits = @trait_cache[reference]
332
342
  else
333
- externalizable = (class_type & 0x02) != 0
334
- dynamic = (class_type & 0x04) != 0
343
+ externalizable = (class_type & 0x02) != 0
344
+ dynamic = (class_type & 0x04) != 0
335
345
  attribute_count = class_type >> 3
336
- class_name = amf3_read_string
346
+ class_name = amf3_read_string
337
347
 
338
348
  class_attributes = []
339
- attribute_count.times{class_attributes << amf3_read_string} # Read class members
340
-
341
- traits = {
342
- :class_name => class_name,
343
- :members => class_attributes,
344
- :externalizable => externalizable,
345
- :dynamic => dynamic
346
- }
349
+ attribute_count.times { class_attributes << amf3_read_string } # Read class members
350
+
351
+ traits =
352
+ {
353
+ class_name: class_name,
354
+ members: class_attributes,
355
+ externalizable: externalizable,
356
+ dynamic: dynamic
357
+ }
347
358
  @trait_cache << traits
348
359
  end
349
360
 
@@ -362,15 +373,15 @@ module RocketAMF
362
373
  else
363
374
  props = {}
364
375
  traits[:members].each do |key|
365
- value = amf3_deserialize
376
+ value = amf3_deserialize
366
377
  props[key] = value
367
378
  end
368
379
 
369
380
  dynamic_props = nil
370
381
  if traits[:dynamic]
371
382
  dynamic_props = {}
372
- while (key = amf3_read_string) && key.length != 0 do # read next key
373
- value = amf3_deserialize
383
+ while (key = amf3_read_string) && key.length != 0 do # read next key
384
+ value = amf3_deserialize
374
385
  dynamic_props[key] = value
375
386
  end
376
387
  end
@@ -382,21 +393,21 @@ module RocketAMF
382
393
  end
383
394
 
384
395
  def amf3_read_date
385
- type = amf3_read_integer
396
+ type = amf3_read_integer
386
397
  is_reference = (type & 0x01) == 0
387
398
  if is_reference
388
399
  reference = type >> 1
389
400
  return @object_cache[reference]
390
401
  else
391
402
  seconds = read_double(@source).to_f/1000
392
- time = Time.at(seconds)
403
+ time = Time.at(seconds)
393
404
  @object_cache << time
394
405
  time
395
406
  end
396
407
  end
397
408
 
398
409
  def amf3_read_dict
399
- type = amf3_read_integer
410
+ type = amf3_read_integer
400
411
  is_reference = (type & 0x01) == 0
401
412
  if is_reference
402
413
  reference = type >> 1
@@ -404,7 +415,7 @@ module RocketAMF
404
415
  else
405
416
  dict = {}
406
417
  @object_cache << dict
407
- length = type >> 1
418
+ length = type >> 1
408
419
  weak_keys = read_int8 @source # Ignore: Not supported in ruby
409
420
  0.upto(length - 1) do |i|
410
421
  dict[amf3_deserialize] = amf3_deserialize
@@ -414,7 +425,7 @@ module RocketAMF
414
425
  end
415
426
 
416
427
  def amf3_read_vector vector_type
417
- type = amf3_read_integer
428
+ type = amf3_read_integer
418
429
  is_reference = (type & 0x01) == 0
419
430
  if is_reference
420
431
  reference = type >> 1
@@ -422,30 +433,30 @@ module RocketAMF
422
433
  else
423
434
  vec = []
424
435
  @object_cache << vec
425
- length = type >> 1
436
+ length = type >> 1
426
437
  fixed_vector = read_int8 @source # Ignore
427
438
  case vector_type
428
- when AMF3_VECTOR_INT_MARKER
429
- 0.upto(length - 1) do |i|
430
- int = read_word32_network(@source)
431
- int = int - 2**32 if int > MAX_INTEGER
432
- vec << int
433
- end
434
- when AMF3_VECTOR_UINT_MARKER
435
- 0.upto(length - 1) do |i|
436
- vec << read_word32_network(@source)
437
- puts vec[i].to_s(2)
438
- end
439
- when AMF3_VECTOR_DOUBLE_MARKER
440
- 0.upto(length - 1) do |i|
441
- vec << amf3_read_number
442
- end
443
- when AMF3_VECTOR_OBJECT_MARKER
444
- vector_class = amf3_read_string # Ignore
445
- puts vector_class
446
- 0.upto(length - 1) do |i|
447
- vec << amf3_deserialize
448
- end
439
+ when AMF3_VECTOR_INT_MARKER
440
+ 0.upto(length - 1) do |i|
441
+ int = read_word32_network(@source)
442
+ int = int - 2**32 if int > MAX_INTEGER
443
+ vec << int
444
+ end
445
+ when AMF3_VECTOR_UINT_MARKER
446
+ 0.upto(length - 1) do |i|
447
+ vec << read_word32_network(@source)
448
+ puts vec[i].to_s(2)
449
+ end
450
+ when AMF3_VECTOR_DOUBLE_MARKER
451
+ 0.upto(length - 1) do |i|
452
+ vec << amf3_read_number
453
+ end
454
+ when AMF3_VECTOR_OBJECT_MARKER
455
+ vector_class = amf3_read_string # Ignore
456
+ puts vector_class
457
+ 0.upto(length - 1) do |i|
458
+ vec << amf3_deserialize
459
+ end
449
460
  end
450
461
  vec
451
462
  end
@@ -357,7 +357,7 @@ module RocketAMF
357
357
  class_name = is_default ? "__default__" : traits[:class_name]
358
358
 
359
359
  # Write out traits
360
- if (class_name && @trait_cache[class_name] != nil)
360
+ if class_name && @trait_cache[class_name] != nil
361
361
  @stream << pack_integer(@trait_cache[class_name] << 2 | 0x01)
362
362
  else
363
363
  @trait_cache.add_obj class_name if class_name
@@ -370,8 +370,8 @@ module RocketAMF
370
370
  @stream << pack_integer(header)
371
371
 
372
372
  # Write out class name
373
- if class_name == "__default__"
374
- amf3_write_utf8_vr("")
373
+ if class_name == '__default__'
374
+ amf3_write_utf8_vr('')
375
375
  else
376
376
  amf3_write_utf8_vr(class_name.to_s)
377
377
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'mrpin-rocketamf'
5
- s.version = '1.0.2'
5
+ s.version = '1.0.3'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['Jacob Henry', 'Stephen Augenstein', "Joc O'Connor"]
8
8
  s.email = ['perl.programmer@gmail.com']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mrpin-rocketamf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Henry
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-08-22 00:00:00.000000000 Z
13
+ date: 2014-08-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake-compiler