leon 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/lib/constants.rb +1 -0
  2. data/lib/io.rb +51 -3
  3. metadata +10 -8
  4. checksums.yaml +0 -7
data/lib/constants.rb CHANGED
@@ -19,4 +19,5 @@ module Constants
19
19
  NAN = 0x18
20
20
  INFINITY = 0x19
21
21
  MINUS_INFINITY = 0x1A
22
+ NATIVE_OBJECT = 0x1B
22
23
  end
data/lib/io.rb CHANGED
@@ -231,6 +231,8 @@ module LEON
231
231
  return Constants::DOUBLE
232
232
  end
233
233
  return Constants::FLOAT
234
+ elsif v.kind_of? Object
235
+ return Constants::NATIVE_OBJECT
234
236
  end
235
237
  end
236
238
 
@@ -292,7 +294,11 @@ module LEON
292
294
  implicit = false
293
295
  end
294
296
  typeByte = StringBuffer.new
295
- typeByte.writeUInt8(type, 0)
297
+ if type === Constants::NATIVE_OBJECT
298
+ typeByte.writeUInt8(Constants::OBJECT, 0)
299
+ else
300
+ typeByte.writeUInt8(type, 0)
301
+ end
296
302
  if type === Constants::UNDEFINED or type === Constants::BOOLEAN or type === Constants::BOOLEAN + 1 or type === Constants::NULL or type === Constants::NAN or type === Constants::MINUS_INFINITY or type === Constants::INFINITY
297
303
  append(typeByte)
298
304
  return 1
@@ -360,7 +366,9 @@ module LEON
360
366
  return
361
367
  elsif type === Constants::OBJECT
362
368
  index = LEON::match_layout(val, @stringIndex, @OLI)
363
- writeValue(index, @OLItype, true)
369
+ if !implicit
370
+ writeValue(index, @OLItype, true)
371
+ end
364
372
  for i in 0..(@OLI[index].length - 1)
365
373
  key = @stringIndex[@OLI[index][i]]
366
374
  if not val.has_key? key
@@ -370,6 +378,17 @@ module LEON
370
378
  writeValue(tmp, LEON::type_check(tmp))
371
379
  end
372
380
  return
381
+ elsif type === Constants::NATIVE_OBJECT
382
+ index = LEON::match_layout(val, @stringIndex, @OLI)
383
+ if !implicit
384
+ writeValue(index, @OLItype, true)
385
+ end
386
+ for i in 0..(@OLI[index].length - 1)
387
+ key = @stringIndex[@OLI[index][i]]
388
+ tmp = val.send key
389
+ writeValue(tmp, LEON::type_check(tmp))
390
+ end
391
+ return
373
392
  elsif type === Constants::BUFFER
374
393
  len = val.buffer.length
375
394
  writeValue(len, LEON::type_check(len))
@@ -434,7 +453,13 @@ module LEON
434
453
  end
435
454
  end
436
455
  def self.match_layout(val, stringIndex, oli)
437
- keys = val.keys
456
+ if val.kind_of? Hash
457
+ keys = val.keys
458
+ elsif val.kind_of? Object
459
+ keys = val.instance_variables.map { |v|
460
+ v.to_s.sub("@", "")
461
+ }
462
+ end
438
463
  layout = Array.new
439
464
  for i in 0..(keys.length - 1)
440
465
  if keys[i].kind_of? Symbol
@@ -481,6 +506,18 @@ module LEON
481
506
  branch.each { |k, v|
482
507
  LEON::gather_layouts(val, stringIndex, ret, v)
483
508
  }
509
+ elsif branch.kind_of? Object
510
+ ret.push Array.new
511
+ vars = branch.instance_variables
512
+ vars.map! { |v|
513
+ v.to_s.sub("@", "")
514
+ }
515
+ vars.each { |v|
516
+ ret[ret.length - 1].push stringIndex.index(v)
517
+ }
518
+ vars.each { |v|
519
+ LEON::gather_layouts(val, stringIndex, ret, branch.send(v))
520
+ }
484
521
  end
485
522
  return ret
486
523
  end
@@ -514,6 +551,17 @@ module LEON
514
551
  set_push(ret, branch)
515
552
  elsif branch.kind_of? Symbol
516
553
  set_push(ret, branch.to_s)
554
+ elsif branch.kind_of? Object
555
+ vars = branch.instance_variables
556
+ vars.map! { |v|
557
+ v.to_s.sub("@", "")
558
+ }
559
+ vars.each { |v|
560
+ set_push(ret, v)
561
+ }
562
+ vars.each { |v|
563
+ LEON::gather_strings(val, ret, branch.send(v))
564
+ }
517
565
  end
518
566
  return ret
519
567
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Raymond Pulver IV
@@ -18,33 +19,34 @@ extensions: []
18
19
  extra_rdoc_files: []
19
20
  files:
20
21
  - lib/buffer-iterator.rb
21
- - lib/constants.rb
22
22
  - lib/io.rb
23
- - lib/leon.rb
24
23
  - lib/string-buffer.rb
24
+ - lib/constants.rb
25
+ - lib/leon.rb
25
26
  - lib/types.rb
26
27
  homepage: http://github.com/raypulver/ruby-leon
27
28
  licenses:
28
29
  - MIT
29
- metadata: {}
30
30
  post_install_message:
31
31
  rdoc_options: []
32
32
  require_paths:
33
33
  - lib
34
34
  required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
35
36
  requirements:
36
- - - ">="
37
+ - - ! '>='
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
40
  required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
40
42
  requirements:
41
- - - ">="
43
+ - - ! '>='
42
44
  - !ruby/object:Gem::Version
43
45
  version: '0'
44
46
  requirements: []
45
47
  rubyforge_project:
46
- rubygems_version: 2.4.7
48
+ rubygems_version: 1.8.23
47
49
  signing_key:
48
- specification_version: 4
50
+ specification_version: 3
49
51
  summary: LEON serialization for Ruby.
50
52
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 09190913d79621df63948f902d65aca5f8d13e3f
4
- data.tar.gz: c3a17075d68bd15dca1c55c5205df75db1f977f5
5
- SHA512:
6
- metadata.gz: 59ab7f117bee96787579fc9cd432142ded094f3bae7bdf037f68f59ba8826065e8c07dfabedb57bfab8a3d494264d89f4819baa69cf3c1d29ee4082bb558982a
7
- data.tar.gz: 06c47c6c116e853180662b6b8fec1dcb41f58a2744cac6887c06b67f614c872dd0a6b3ddf4495d5865c65374a13613c9212b9f5dc36c2970d52760a0fa7f80a7