erlang_rb 1.7.5 → 1.8.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/erlang.rb +74 -20
- data/tests/erlang_tests.rb +62 -1
- metadata +17 -17
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01a38d9f79736ca6e186d862077fd3ab6deceab4
|
4
|
+
data.tar.gz: 96988c81914130f61694678f3bb743ce0f96204d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ab24b9f6106407798ff282a88c1e7463a4c3d00f5dec4dd9543a349b642d5c371311709f573be265b6f8d876b4f153492a47dee1d5e184d76b611f6fd494095
|
7
|
+
data.tar.gz: 7cf34813dd0dc5a0c722aadd2d8b45fe7dfd4a8b1d10283d19400bc8b424678397999f7375d0ee4b192a82e3c99c4449742de86c38f92ae9ef97f967ab730ffc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/erlang.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# MIT License
|
5
5
|
#
|
6
|
-
# Copyright (c) 2011-
|
6
|
+
# Copyright (c) 2011-2019 Michael Truog <mjtruog at protonmail dot com>
|
7
7
|
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the "Software"),
|
@@ -192,8 +192,16 @@ module Erlang
|
|
192
192
|
attr_reader :serial
|
193
193
|
attr_reader :creation
|
194
194
|
def binary
|
195
|
-
|
196
|
-
|
195
|
+
creation_size = @creation.bytesize
|
196
|
+
if creation_size == 1
|
197
|
+
return "#{TAG_PID_EXT.chr}" \
|
198
|
+
"#{@node.binary}#{@id}#{@serial}#{@creation}"
|
199
|
+
elsif creation_size == 4
|
200
|
+
return "#{TAG_NEW_PID_EXT.chr}" \
|
201
|
+
"#{@node.binary}#{@id}#{@serial}#{@creation}"
|
202
|
+
else
|
203
|
+
raise OutputException, 'unknown pid type', caller
|
204
|
+
end
|
197
205
|
end
|
198
206
|
def to_s
|
199
207
|
return "#{self.class.name}" \
|
@@ -219,7 +227,16 @@ module Erlang
|
|
219
227
|
attr_reader :id
|
220
228
|
attr_reader :creation
|
221
229
|
def binary
|
222
|
-
|
230
|
+
creation_size = @creation.bytesize
|
231
|
+
if creation_size == 1
|
232
|
+
return "#{TAG_PORT_EXT.chr}" \
|
233
|
+
"#{@node.binary}#{@id}#{@creation}"
|
234
|
+
elsif creation_size == 4
|
235
|
+
return "#{TAG_NEW_PORT_EXT.chr}" \
|
236
|
+
"#{@node.binary}#{@id}#{@creation}"
|
237
|
+
else
|
238
|
+
raise OutputException, 'unknown port type', caller
|
239
|
+
end
|
223
240
|
end
|
224
241
|
def to_s
|
225
242
|
return "#{self.class.name}" \
|
@@ -250,8 +267,16 @@ module Erlang
|
|
250
267
|
"#{@node.binary}#{@id}#{@creation}"
|
251
268
|
elsif length <= 65535
|
252
269
|
length_packed = [length].pack('n')
|
253
|
-
|
254
|
-
|
270
|
+
creation_size = @creation.bytesize
|
271
|
+
if creation_size == 1
|
272
|
+
return "#{TAG_NEW_REFERENCE_EXT.chr}#{length_packed}" \
|
273
|
+
"#{@node.binary}#{@creation}#{@id}"
|
274
|
+
elsif creation_size == 4
|
275
|
+
return "#{TAG_NEWER_REFERENCE_EXT.chr}#{length_packed}" \
|
276
|
+
"#{@node.binary}#{@creation}#{@id}"
|
277
|
+
else
|
278
|
+
raise OutputException, 'unknown reference type', caller
|
279
|
+
end
|
255
280
|
else
|
256
281
|
raise OutputException, 'uint16 overflow', caller
|
257
282
|
end
|
@@ -354,27 +379,38 @@ module Erlang
|
|
354
379
|
else
|
355
380
|
raise ParseException, 'invalid atom_name latin1', caller
|
356
381
|
end
|
357
|
-
elsif tag ==
|
382
|
+
elsif tag == TAG_NEW_PORT_EXT or \
|
383
|
+
tag == TAG_REFERENCE_EXT or tag == TAG_PORT_EXT
|
358
384
|
result = binary_to_atom(i, data)
|
359
385
|
i = result[0]; node = result[1]
|
360
386
|
id = data[i,4]
|
361
387
|
i += 4
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
388
|
+
if tag == TAG_NEW_PORT_EXT
|
389
|
+
creation = data[i,4]
|
390
|
+
i += 4
|
391
|
+
else
|
392
|
+
creation = data[i]
|
393
|
+
i += 1
|
394
|
+
if tag == TAG_REFERENCE_EXT
|
395
|
+
return [i, OtpErlangReference.new(node, id, creation)]
|
396
|
+
end
|
368
397
|
end
|
369
|
-
|
398
|
+
# tag == TAG_NEW_PORT_EXT or tag == TAG_PORT_EXT
|
399
|
+
return [i, OtpErlangPort.new(node, id, creation)]
|
400
|
+
elsif tag == TAG_NEW_PID_EXT or tag == TAG_PID_EXT
|
370
401
|
result = binary_to_atom(i, data)
|
371
402
|
i = result[0]; node = result[1]
|
372
403
|
id = data[i,4]
|
373
404
|
i += 4
|
374
405
|
serial = data[i,4]
|
375
406
|
i += 4
|
376
|
-
|
377
|
-
|
407
|
+
if tag == TAG_NEW_PID_EXT
|
408
|
+
creation = data[i,4]
|
409
|
+
i += 4
|
410
|
+
elsif tag == TAG_PID_EXT
|
411
|
+
creation = data[i]
|
412
|
+
i += 1
|
413
|
+
end
|
378
414
|
return [i, OtpErlangPid.new(node, id, serial, creation)]
|
379
415
|
elsif tag == TAG_SMALL_TUPLE_EXT or tag == TAG_LARGE_TUPLE_EXT
|
380
416
|
if tag == TAG_SMALL_TUPLE_EXT
|
@@ -446,13 +482,18 @@ module Erlang
|
|
446
482
|
#arity = data[i].ord
|
447
483
|
i += 1
|
448
484
|
return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
|
449
|
-
elsif tag == TAG_NEW_REFERENCE_EXT
|
485
|
+
elsif tag == TAG_NEWER_REFERENCE_EXT or tag == TAG_NEW_REFERENCE_EXT
|
450
486
|
j = data[i,2].unpack('n')[0] * 4
|
451
487
|
i += 2
|
452
488
|
result = binary_to_atom(i, data)
|
453
489
|
i = result[0]; node = result[1]
|
454
|
-
|
455
|
-
|
490
|
+
if tag == TAG_NEWER_REFERENCE_EXT
|
491
|
+
creation = data[i,4]
|
492
|
+
i += 4
|
493
|
+
elsif tag == TAG_NEW_REFERENCE_EXT
|
494
|
+
creation = data[i]
|
495
|
+
i += 1
|
496
|
+
end
|
456
497
|
id = data[i,j]
|
457
498
|
return [i + j, OtpErlangReference.new(node, id, creation)]
|
458
499
|
elsif tag == TAG_SMALL_ATOM_EXT
|
@@ -570,7 +611,17 @@ module Erlang
|
|
570
611
|
def self.binary_to_pid(i, data)
|
571
612
|
tag = data[i].ord
|
572
613
|
i += 1
|
573
|
-
if tag ==
|
614
|
+
if tag == TAG_NEW_PID_EXT
|
615
|
+
result = binary_to_atom(i, data)
|
616
|
+
i = result[0]; node = result[1]
|
617
|
+
id = data[i,4]
|
618
|
+
i += 4
|
619
|
+
serial = data[i,4]
|
620
|
+
i += 4
|
621
|
+
creation = data[i,4]
|
622
|
+
i += 4
|
623
|
+
return [i, OtpErlangPid.new(node, id, serial, creation)]
|
624
|
+
elsif tag == TAG_PID_EXT
|
574
625
|
result = binary_to_atom(i, data)
|
575
626
|
i = result[0]; node = result[1]
|
576
627
|
id = data[i,4]
|
@@ -776,6 +827,9 @@ module Erlang
|
|
776
827
|
TAG_NEW_FLOAT_EXT = 70
|
777
828
|
TAG_BIT_BINARY_EXT = 77
|
778
829
|
TAG_ATOM_CACHE_REF = 78
|
830
|
+
TAG_NEW_PID_EXT = 88
|
831
|
+
TAG_NEW_PORT_EXT = 89
|
832
|
+
TAG_NEWER_REFERENCE_EXT = 90
|
779
833
|
TAG_SMALL_INTEGER_EXT = 97
|
780
834
|
TAG_INTEGER_EXT = 98
|
781
835
|
TAG_FLOAT_EXT = 99
|
data/tests/erlang_tests.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# MIT License
|
6
6
|
#
|
7
|
-
# Copyright (c) 2014-
|
7
|
+
# Copyright (c) 2014-2019 Michael Truog <mjtruog at protonmail dot com>
|
8
8
|
# Copyright (c) 2009-2013 Dmitry Vasiliev <dima@hlabs.org>
|
9
9
|
#
|
10
10
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
@@ -331,6 +331,67 @@ class DecodeTestCase < Test::Unit::TestCase
|
|
331
331
|
assert_equal(-6618611909121,
|
332
332
|
Erlang::binary_to_term("\x83o\0\0\0\6\1\1\2\3\4\5\6"))
|
333
333
|
end
|
334
|
+
def test_binary_to_term_pid
|
335
|
+
pid_old_binary = (
|
336
|
+
"\x83\x67\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E\x6F" \
|
337
|
+
"\x68\x6F\x73\x74\x00\x00\x00\x4E\x00\x00\x00\x00\x00"
|
338
|
+
)
|
339
|
+
pid_old = Erlang::binary_to_term(pid_old_binary)
|
340
|
+
assert(pid_old.kind_of?(Erlang::OtpErlangPid))
|
341
|
+
assert_equal(Erlang::term_to_binary(pid_old),
|
342
|
+
"\x83gs\rnonode@nohost\x00\x00\x00N" \
|
343
|
+
"\x00\x00\x00\x00\x00")
|
344
|
+
pid_new_binary = (
|
345
|
+
"\x83\x58\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E\x6F\x68" \
|
346
|
+
"\x6F\x73\x74\x00\x00\x00\x4E\x00\x00\x00\x00\x00\x00\x00\x00"
|
347
|
+
)
|
348
|
+
pid_new = Erlang::binary_to_term(pid_new_binary)
|
349
|
+
assert(pid_new.kind_of?(Erlang::OtpErlangPid))
|
350
|
+
assert_equal(Erlang::term_to_binary(pid_new),
|
351
|
+
"\x83Xs\rnonode@nohost\x00\x00\x00N" \
|
352
|
+
"\x00\x00\x00\x00\x00\x00\x00\x00")
|
353
|
+
end
|
354
|
+
def test_binary_to_term_port
|
355
|
+
port_old_binary = (
|
356
|
+
"\x83\x66\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E\x6F\x68" \
|
357
|
+
"\x6F\x73\x74\x00\x00\x00\x06\x00"
|
358
|
+
)
|
359
|
+
port_old = Erlang::binary_to_term(port_old_binary)
|
360
|
+
assert(port_old.kind_of?(Erlang::OtpErlangPort))
|
361
|
+
assert_equal(Erlang::term_to_binary(port_old),
|
362
|
+
"\x83fs\rnonode@nohost\x00\x00\x00\x06\x00")
|
363
|
+
port_new_binary = (
|
364
|
+
"\x83\x59\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E\x6F\x68" \
|
365
|
+
"\x6F\x73\x74\x00\x00\x00\x06\x00\x00\x00\x00"
|
366
|
+
)
|
367
|
+
port_new = Erlang::binary_to_term(port_new_binary)
|
368
|
+
assert(port_new.kind_of?(Erlang::OtpErlangPort))
|
369
|
+
assert_equal(Erlang::term_to_binary(port_new),
|
370
|
+
"\x83Ys\rnonode@nohost\x00\x00\x00\x06" \
|
371
|
+
"\x00\x00\x00\x00")
|
372
|
+
end
|
373
|
+
def test_binary_to_term_ref
|
374
|
+
ref_new_binary = (
|
375
|
+
"\x83\x72\x00\x03\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E" \
|
376
|
+
"\x6F\x68\x6F\x73\x74\x00\x00\x03\xE8\x4E\xE7\x68\x00\x02\xA4" \
|
377
|
+
"\xC8\x53\x40"
|
378
|
+
)
|
379
|
+
ref_new = Erlang::binary_to_term(ref_new_binary)
|
380
|
+
assert(ref_new.kind_of?(Erlang::OtpErlangReference))
|
381
|
+
assert_equal(Erlang::term_to_binary(ref_new),
|
382
|
+
"\x83r\x00\x03s\rnonode@nohost\x00\x00\x03\xe8" \
|
383
|
+
"N\xe7h\x00\x02\xa4\xc8S@")
|
384
|
+
ref_newer_binary = (
|
385
|
+
"\x83\x5A\x00\x03\x64\x00\x0D\x6E\x6F\x6E\x6F\x64\x65\x40\x6E" \
|
386
|
+
"\x6F\x68\x6F\x73\x74\x00\x00\x00\x00\x00\x01\xAC\x03\xC7\x00" \
|
387
|
+
"\x00\x04\xBB\xB2\xCA\xEE"
|
388
|
+
)
|
389
|
+
ref_newer = Erlang::binary_to_term(ref_newer_binary)
|
390
|
+
assert(ref_newer.kind_of?(Erlang::OtpErlangReference))
|
391
|
+
assert_equal(Erlang::term_to_binary(ref_newer),
|
392
|
+
"\x83Z\x00\x03s\rnonode@nohost\x00\x00\x00\x00\x00" \
|
393
|
+
"\x01\xac\x03\xc7\x00\x00\x04\xbb\xb2\xca\xee")
|
394
|
+
end
|
334
395
|
def test_binary_to_term_compressed_term
|
335
396
|
assert_raise(Erlang::ParseException){
|
336
397
|
Erlang::binary_to_term("\x83P")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erlang_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Truog
|
@@ -12,25 +12,25 @@ cert_chain:
|
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIDgDCCAmigAwIBAgIBATANBgkqhkiG9w0BAQUFADBDMRAwDgYDVQQDDAdtanRy
|
14
14
|
dW9nMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFpbDETMBEGCgmSJomT8ixkARkW
|
15
|
-
|
15
|
+
A2NvbTAeFw0xOTExMjkwMjM1MzJaFw0yMDExMjgwMjM1MzJaMEMxEDAOBgNVBAMM
|
16
16
|
B21qdHJ1b2cxGjAYBgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPy
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
/
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Ar67eHx
|
18
|
+
R/cmFgsj58SkbsqEQWZOQ5GNO25IKuwjGHqznJXszXM1NW0YFLjgXjsXVdTXPeIC
|
19
|
+
CbkfoR8Yc1CEI6FYOWqhO0JqpPfYzt0s27o3Ua2x8j6n+31iRkbArIX2IVEjvBNd
|
20
|
+
UiTg6mG4Hc3KLqrBRDxZ+uyzqH/FEGPi5Ggak/E5xKwSdPWBPqDYKcze+suXxYO7
|
21
|
+
u38NwloGxpatQGgHgNGf83RfWDPaiYHGdPAsvUDzRFauxcG8sYRbmohc0TmE5+TQ
|
22
|
+
KMviZJNaNOaQkW1/twRQpo9PEv8bxEzEXT+tNOMEHrXgKv4+xEZYBM7D1FdP8gKj
|
23
|
+
wMXN22ZkLWzP8wIDAQABo38wfTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
|
24
|
+
HQ4EFgQUT8+9UATmehNm5Lg1aBx8HLK7MZwwIQYDVR0RBBowGIEWbWp0cnVvZ0Bw
|
25
25
|
cm90b25tYWlsLmNvbTAhBgNVHRIEGjAYgRZtanRydW9nQHByb3Rvbm1haWwuY29t
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
MA0GCSqGSIb3DQEBBQUAA4IBAQANj/kudiIbxJaurULxhML4palEaqIeWCw24bxj
|
27
|
+
X72RvO4Ti6DDKpeccK0QF26tZCOw4ngxPPY0w1Zzq96iYMVPlKVBYVDCtjIkFNDt
|
28
|
+
Q/0hupNd8lLloTlIJ7jzHohfPtzUjsdC0d0cwXZLkjxhw67N7QPDxsCEa+jiHaWd
|
29
|
+
i+DxiISAPKf9ugw5kej0v2j15juXiK5pwKIDDGAFfv3WAFbJXleLoqdM87rbC/vq
|
30
|
+
KH+3FIhF8jYeRqq/8g4k6zsZZwRewPjObe3Wm4yEv0f0dxdQRuWcuE7s7z0Bss5J
|
31
|
+
YQYB6UQUREuP9rhSHKbAZd9CPR3XW+S7PkeQiWc8ceLFVsfK
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
33
|
+
date: 2019-11-28 00:00:00.000000000 Z
|
34
34
|
dependencies: []
|
35
35
|
description: Erlang Binary Term Format for Ruby
|
36
36
|
email: mjtruog@protonmail.com
|
metadata.gz.sig
CHANGED
Binary file
|