erlang_rb 2.0.2 → 2.0.5

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
  SHA256:
3
- metadata.gz: 7c202a75795a723e4ee552594d2b5c14bf274e4a999fefc5a8adf84ca4d5a699
4
- data.tar.gz: 5c78a367d1d9e2cd4cd71963a65c386042efb60873962bb7a89881669e79f818
3
+ metadata.gz: 82fd795948db72df73625ab7cef0f407018800b88d25e99a9a9a7a09d7ffbe8b
4
+ data.tar.gz: 1a049d6f1d488f86ef89450c5d258d389d25de4c7bdfb8bf7eb66802e36728fd
5
5
  SHA512:
6
- metadata.gz: 6726cef202d976c0e01fcf44dab37107177e3ecc547eba1594da000d135dbb99407d6182ed8fbfd164d95e9bb3e8bb9362a9c0c145058291574ddcabe8534ce4
7
- data.tar.gz: 2324c081c4bc295c1df4a9c11929e0de0c8d5303c922a607ca29867fe73271a2022de32b33fc3f804322bf996f90c02e1599554b9e452046e1ab1ea7144f21cb
6
+ metadata.gz: c843ced9e5875d4439495a8fb9b193f2ea4672cfc86a682c4da2b23c6079d72920c607da8cc8c2afcc0b935da683f2ec2dc5fcfc5c2d30d03744c742dd084de5
7
+ data.tar.gz: 3497c55537d5a02e8aca60c3d54e733721370e011775f3425240aed59739b112a31551cf54a23cb31cd2a541b53ea505e15cd839c82fba7da6bbdf5f0229ad06
checksums.yaml.gz.sig CHANGED
Binary file
data/README.markdown CHANGED
@@ -1,9 +1,9 @@
1
- Erlang Binary Term Format for Ruby
2
- ==================================
1
+ Erlang External Term Format for Ruby
2
+ ====================================
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/okeuday/erlang_rb.png?branch=master)](http://travis-ci.org/okeuday/erlang_rb)
5
4
 
6
- Provides all encoding and decoding for the Erlang Binary Term Format
5
+
6
+ Provides all encoding and decoding for the Erlang External Term Format
7
7
  (as defined at [http://erlang.org/doc/apps/erts/erl_ext_dist.html](http://erlang.org/doc/apps/erts/erl_ext_dist.html))
8
8
  in a single Ruby module.
9
9
 
data/lib/erlang.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # MIT License
5
5
  #
6
- # Copyright (c) 2011-2019 Michael Truog <mjtruog at protonmail dot com>
6
+ # Copyright (c) 2011-2022 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"),
@@ -25,11 +25,14 @@
25
25
  #
26
26
 
27
27
  require 'zlib'
28
+ require 'set'
28
29
 
29
30
  # Erlang term classes listed alphabetically
30
31
 
31
32
  module Erlang
32
33
 
34
+ @@UNDEFINED = 'undefined' # Change with set_undefined
35
+
33
36
  class OtpErlangAtom
34
37
  def initialize(value)
35
38
  @value = value
@@ -52,6 +55,8 @@ module Erlang
52
55
  raise OutputException, 'uint16 overflow', caller
53
56
  end
54
57
  else
58
+ # deprecated
59
+ # (not used in Erlang/OTP 26, i.e., minor_version 2)
55
60
  if length <= 255
56
61
  return "#{TAG_SMALL_ATOM_EXT.chr}#{length.chr}#{@value}"
57
62
  elsif length <= 65535
@@ -76,7 +81,7 @@ module Erlang
76
81
  end
77
82
  alias eql? ==
78
83
  end
79
-
84
+
80
85
  class OtpErlangBinary
81
86
  def initialize(value, bits = 8)
82
87
  @value = value
@@ -112,7 +117,7 @@ module Erlang
112
117
  end
113
118
  alias eql? ==
114
119
  end
115
-
120
+
116
121
  class OtpErlangFunction
117
122
  def initialize(tag, value)
118
123
  @tag = tag
@@ -134,7 +139,7 @@ module Erlang
134
139
  end
135
140
  alias eql? ==
136
141
  end
137
-
142
+
138
143
  class OtpErlangList
139
144
  def initialize(value, improper = false)
140
145
  @value = value
@@ -216,7 +221,7 @@ module Erlang
216
221
  end
217
222
  alias eql? ==
218
223
  end
219
-
224
+
220
225
  class OtpErlangPort
221
226
  def initialize(node, id, creation)
222
227
  @node = node
@@ -250,7 +255,7 @@ module Erlang
250
255
  end
251
256
  alias eql? ==
252
257
  end
253
-
258
+
254
259
  class OtpErlangReference
255
260
  def initialize(node, id, creation)
256
261
  @node = node
@@ -295,7 +300,7 @@ module Erlang
295
300
  end
296
301
 
297
302
  # core functionality
298
-
303
+
299
304
  def self.binary_to_term(data)
300
305
  size = data.bytesize
301
306
  if size <= 1
@@ -318,7 +323,7 @@ module Erlang
318
323
  raise ParseException, 'missing data', e.backtrace
319
324
  end
320
325
  end
321
-
326
+
322
327
  def self.term_to_binary(term, compressed = false)
323
328
  data_uncompressed = term_to_binary_(term)
324
329
  if compressed == false
@@ -341,11 +346,16 @@ module Erlang
341
346
  "#{size_uncompressed_packed}#{data_compressed}"
342
347
  end
343
348
  end
344
-
349
+
350
+ # Elixir use can set to 'nil'
351
+ def self.set_undefined(value)
352
+ @@UNDEFINED = value
353
+ end
354
+
345
355
  private
346
-
356
+
347
357
  # binary_to_term implementation functions
348
-
358
+
349
359
  def self.binary_to_term_(i, data)
350
360
  tag = data[i].ord
351
361
  i += 1
@@ -370,17 +380,7 @@ module Erlang
370
380
  elsif tag == TAG_FLOAT_EXT
371
381
  value = data[i,31].partition(0.chr)[0].to_f
372
382
  return [i + 31, value]
373
- elsif tag == TAG_ATOM_EXT
374
- j = data[i,2].unpack('n')[0]
375
- i += 2
376
- atom_name = data[i,j].force_encoding('ISO-8859-1')
377
- if atom_name.valid_encoding?
378
- return [i + j, atom_name.to_sym]
379
- else
380
- raise ParseException, 'invalid atom_name latin1', caller
381
- end
382
- elsif tag == TAG_NEW_PORT_EXT or \
383
- tag == TAG_REFERENCE_EXT or tag == TAG_PORT_EXT
383
+ elsif Set[TAG_NEW_PORT_EXT,TAG_REFERENCE_EXT,TAG_PORT_EXT].include?(tag)
384
384
  result = binary_to_atom(i, data)
385
385
  i = result[0]; node = result[1]
386
386
  id = data[i,4]
@@ -397,7 +397,7 @@ module Erlang
397
397
  end
398
398
  # tag == TAG_NEW_PORT_EXT or tag == TAG_PORT_EXT
399
399
  return [i, OtpErlangPort.new(node, id, creation)]
400
- elsif tag == TAG_NEW_PID_EXT or tag == TAG_PID_EXT
400
+ elsif Set[TAG_NEW_PID_EXT, TAG_PID_EXT].include?(tag)
401
401
  result = binary_to_atom(i, data)
402
402
  i = result[0]; node = result[1]
403
403
  id = data[i,4]
@@ -412,7 +412,7 @@ module Erlang
412
412
  i += 1
413
413
  end
414
414
  return [i, OtpErlangPid.new(node, id, serial, creation)]
415
- elsif tag == TAG_SMALL_TUPLE_EXT or tag == TAG_LARGE_TUPLE_EXT
415
+ elsif Set[TAG_SMALL_TUPLE_EXT, TAG_LARGE_TUPLE_EXT].include?(tag)
416
416
  if tag == TAG_SMALL_TUPLE_EXT
417
417
  length = data[i].ord
418
418
  i += 1
@@ -447,7 +447,7 @@ module Erlang
447
447
  j = data[i,4].unpack('N')[0]
448
448
  i += 4
449
449
  return [i + j, OtpErlangBinary.new(data[i,j], 8)]
450
- elsif tag == TAG_SMALL_BIG_EXT or tag == TAG_LARGE_BIG_EXT
450
+ elsif Set[TAG_SMALL_BIG_EXT, TAG_LARGE_BIG_EXT].include?(tag)
451
451
  if tag == TAG_SMALL_BIG_EXT
452
452
  j = data[i].ord
453
453
  i += 1
@@ -482,7 +482,7 @@ module Erlang
482
482
  #arity = data[i].ord
483
483
  i += 1
484
484
  return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
485
- elsif tag == TAG_NEWER_REFERENCE_EXT or tag == TAG_NEW_REFERENCE_EXT
485
+ elsif Set[TAG_NEWER_REFERENCE_EXT, TAG_NEW_REFERENCE_EXT].include?(tag)
486
486
  j = data[i,2].unpack('n')[0] * 4
487
487
  i += 2
488
488
  result = binary_to_atom(i, data)
@@ -496,22 +496,6 @@ module Erlang
496
496
  end
497
497
  id = data[i,j]
498
498
  return [i + j, OtpErlangReference.new(node, id, creation)]
499
- elsif tag == TAG_SMALL_ATOM_EXT
500
- j = data[i,1].ord
501
- i += 1
502
- atom_name = data[i,j].force_encoding('ISO-8859-1')
503
- if atom_name.valid_encoding?
504
- if atom_name == 'true'
505
- tmp = true
506
- elsif atom_name == 'false'
507
- tmp = false
508
- else
509
- tmp = atom_name.to_sym
510
- end
511
- return [i + j, tmp]
512
- else
513
- raise ParseException, 'invalid atom_name latin1', caller
514
- end
515
499
  elsif tag == TAG_MAP_EXT
516
500
  length = data[i,4].unpack('N')[0]
517
501
  i += 4
@@ -539,23 +523,61 @@ module Erlang
539
523
  result = binary_to_term_sequence(i, numfree, data)
540
524
  i = result[0]#; free = result[1]
541
525
  return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
542
- elsif tag == TAG_ATOM_UTF8_EXT
526
+ elsif Set[TAG_ATOM_UTF8_EXT, TAG_ATOM_EXT].include?(tag)
543
527
  j = data[i,2].unpack('n')[0]
544
528
  i += 2
545
- atom_name = data[i,j].force_encoding('UTF-8')
546
- if atom_name.valid_encoding?
547
- return [i + j, OtpErlangAtom.new(atom_name)]
529
+ atom_name = data[i,j]
530
+ i = i + j
531
+ if atom_name == 'true'
532
+ return [i, true]
533
+ elsif atom_name == 'false'
534
+ return [i, false]
535
+ elsif atom_name == @@UNDEFINED
536
+ return [i, nil]
548
537
  else
549
- raise ParseException, 'invalid atom_name unicode', caller
538
+ if tag == TAG_ATOM_UTF8_EXT
539
+ atom_name = atom_name.force_encoding('UTF-8')
540
+ if atom_name.valid_encoding?
541
+ return [i, atom_name.to_sym]
542
+ else
543
+ raise ParseException, 'invalid atom_name unicode', caller
544
+ end
545
+ else
546
+ atom_name = atom_name.force_encoding('ISO-8859-1')
547
+ if atom_name.valid_encoding?
548
+ return [i, OtpErlangAtom.new(atom_name)]
549
+ else
550
+ raise ParseException, 'invalid atom_name latin1', caller
551
+ end
552
+ end
550
553
  end
551
- elsif tag == TAG_SMALL_ATOM_UTF8_EXT
554
+ elsif Set[TAG_SMALL_ATOM_UTF8_EXT, TAG_SMALL_ATOM_EXT].include?(tag)
552
555
  j = data[i,1].ord
553
556
  i += 1
554
- atom_name = data[i,j].force_encoding('UTF-8')
555
- if atom_name.valid_encoding?
556
- return [i + j, OtpErlangAtom.new(atom_name)]
557
+ atom_name = data[i,j]
558
+ i = i + j
559
+ if atom_name == 'true'
560
+ return [i, true]
561
+ elsif atom_name == 'false'
562
+ return [i, false]
563
+ elsif atom_name == @@UNDEFINED
564
+ return [i, nil]
557
565
  else
558
- raise ParseException, 'invalid atom_name unicode', caller
566
+ if tag == TAG_SMALL_ATOM_UTF8_EXT
567
+ atom_name = atom_name.force_encoding('UTF-8')
568
+ if atom_name.valid_encoding?
569
+ return [i, atom_name.to_sym]
570
+ else
571
+ raise ParseException, 'invalid atom_name unicode', caller
572
+ end
573
+ else
574
+ atom_name = atom_name.force_encoding('ISO-8859-1')
575
+ if atom_name.valid_encoding?
576
+ return [i, OtpErlangAtom.new(atom_name)]
577
+ else
578
+ raise ParseException, 'invalid atom_name latin1', caller
579
+ end
580
+ end
559
581
  end
560
582
  elsif tag == TAG_COMPRESSED_ZLIB
561
583
  size_uncompressed = data[i,4].unpack('N')[0]
@@ -579,7 +601,7 @@ module Erlang
579
601
  raise ParseException, 'invalid tag', caller
580
602
  end
581
603
  end
582
-
604
+
583
605
  def self.binary_to_term_sequence(i, length, data)
584
606
  sequence = []
585
607
  (0...length).each do |length_index|
@@ -591,7 +613,7 @@ module Erlang
591
613
  end
592
614
 
593
615
  # (binary_to_term Erlang term primitive type functions)
594
-
616
+
595
617
  def self.binary_to_integer(i, data)
596
618
  tag = data[i].ord
597
619
  i += 1
@@ -607,7 +629,7 @@ module Erlang
607
629
  raise ParseException, 'invalid integer tag', caller
608
630
  end
609
631
  end
610
-
632
+
611
633
  def self.binary_to_pid(i, data)
612
634
  tag = data[i].ord
613
635
  i += 1
@@ -635,7 +657,7 @@ module Erlang
635
657
  raise ParseException, 'invalid pid tag', caller
636
658
  end
637
659
  end
638
-
660
+
639
661
  def self.binary_to_atom(i, data)
640
662
  tag = data[i].ord
641
663
  i += 1
@@ -671,9 +693,9 @@ module Erlang
671
693
  raise ParseException, 'invalid atom tag', caller
672
694
  end
673
695
  end
674
-
696
+
675
697
  # term_to_binary implementation functions
676
-
698
+
677
699
  def self.term_to_binary_(term)
678
700
  if term.kind_of?(String)
679
701
  return string_to_binary(term)
@@ -689,15 +711,15 @@ module Erlang
689
711
  return OtpErlangAtom.new(term.to_s).binary
690
712
  elsif term.kind_of?(TrueClass)
691
713
  return OtpErlangAtom.new(
692
- 'true'.force_encoding('ISO-8859-1')
714
+ 'true'.force_encoding('UTF-8')
693
715
  ).binary
694
716
  elsif term.kind_of?(FalseClass)
695
717
  return OtpErlangAtom.new(
696
- 'false'.force_encoding('ISO-8859-1')
718
+ 'false'.force_encoding('UTF-8')
697
719
  ).binary
698
720
  elsif term.nil?
699
721
  return OtpErlangAtom.new(
700
- 'undefined'.force_encoding('ISO-8859-1')
722
+ @@UNDEFINED.force_encoding('UTF-8')
701
723
  ).binary
702
724
  elsif term.kind_of?(OtpErlangAtom)
703
725
  return term.binary
@@ -719,7 +741,7 @@ module Erlang
719
741
  end
720
742
 
721
743
  # (term_to_binary Erlang term composite type functions)
722
-
744
+
723
745
  def self.string_to_binary(term)
724
746
  length = term.bytesize
725
747
  if length == 0
@@ -738,7 +760,7 @@ module Erlang
738
760
  raise OutputException, 'uint32 overflow', caller
739
761
  end
740
762
  end
741
-
763
+
742
764
  def self.tuple_to_binary(term)
743
765
  length = term.length
744
766
  term_packed = term.map{ |element|
@@ -753,7 +775,7 @@ module Erlang
753
775
  raise OutputException, 'uint32 overflow', caller
754
776
  end
755
777
  end
756
-
778
+
757
779
  def self.hash_to_binary(term)
758
780
  length = term.length
759
781
  if length <= 4294967295
@@ -781,7 +803,7 @@ module Erlang
781
803
  return bignum_to_binary(term)
782
804
  end
783
805
  end
784
-
806
+
785
807
  def self.bignum_to_binary(term)
786
808
  bignum = term.abs
787
809
  if term < 0
@@ -811,7 +833,7 @@ module Erlang
811
833
  end
812
834
 
813
835
  # Exception classes listed alphabetically
814
-
836
+
815
837
  class InputException < ArgumentError
816
838
  end
817
839
 
@@ -820,7 +842,7 @@ module Erlang
820
842
 
821
843
  class ParseException < SyntaxError
822
844
  end
823
-
845
+
824
846
  # tag values here http://www.erlang.org/doc/apps/erts/erl_ext_dist.html
825
847
  TAG_VERSION = 131
826
848
  TAG_COMPRESSED_ZLIB = 80
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # MIT License
6
6
  #
7
- # Copyright (c) 2014-2019 Michael Truog <mjtruog at protonmail dot com>
7
+ # Copyright (c) 2014-2022 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
@@ -119,18 +119,26 @@ class DecodeTestCase < Test::Unit::TestCase
119
119
  assert_raise(Erlang::ParseException){
120
120
  Erlang::binary_to_term("\x83d\0\1")
121
121
  }
122
- assert_equal(:'', Erlang::binary_to_term("\x83d\0\0"))
123
- assert_equal(:'', Erlang::binary_to_term("\x83s\0"))
124
- assert_equal(:test, Erlang::binary_to_term("\x83d\0\4test"))
125
- assert_equal(:test, Erlang::binary_to_term("\x83s\4test"))
122
+ assert_equal(:'', Erlang::binary_to_term("\x83v\0\0"))
123
+ assert_equal(:'', Erlang::binary_to_term("\x83w\0"))
124
+ assert_equal(:test, Erlang::binary_to_term("\x83v\0\4test"))
125
+ assert_equal(:test, Erlang::binary_to_term("\x83w\4test"))
126
126
  end
127
127
  def test_binary_to_term_predefined_atoms
128
128
  assert_equal(true,
129
129
  Erlang::binary_to_term("\x83s\4true"))
130
130
  assert_equal(false,
131
131
  Erlang::binary_to_term("\x83s\5false"))
132
- assert_equal(:undefined,
132
+ assert_equal(false,
133
+ Erlang::binary_to_term("\x83w\5false"))
134
+ assert_equal(nil,
135
+ Erlang::binary_to_term("\x83s\11undefined"))
136
+ assert_equal(nil,
137
+ Erlang::binary_to_term("\x83w\11undefined"))
138
+ assert_equal(nil,
133
139
  Erlang::binary_to_term("\x83d\0\11undefined"))
140
+ assert_equal(nil,
141
+ Erlang::binary_to_term("\x83v\0\11undefined"))
134
142
  end
135
143
  def test_binary_to_term_empty_list
136
144
  assert_equal(Erlang::OtpErlangList.new([]),
@@ -175,7 +183,7 @@ class DecodeTestCase < Test::Unit::TestCase
175
183
  assert_raise(Erlang::ParseException){
176
184
  Erlang::binary_to_term("\x83l\0\0\0\0k")
177
185
  }
178
- lst = Erlang::binary_to_term("\x83l\0\0\0\1jd\0\4tail")
186
+ lst = Erlang::binary_to_term("\x83l\0\0\0\1jv\0\4tail")
179
187
  assert(lst.kind_of?(Erlang::OtpErlangList))
180
188
  assert_equal([Erlang::OtpErlangList.new([]), :tail], lst.value)
181
189
  assert_equal(true, lst.improper)
@@ -586,9 +594,9 @@ class EncodeTestCase < Test::Unit::TestCase
586
594
  Erlang::term_to_binary('test'))
587
595
  end
588
596
  def test_term_to_binary_predefined_atom
589
- assert_equal("\x83s\4true", Erlang::term_to_binary(true))
590
- assert_equal("\x83s\5false", Erlang::term_to_binary(false))
591
- assert_equal("\x83s\x09undefined", Erlang::term_to_binary(nil))
597
+ assert_equal("\x83w\4true", Erlang::term_to_binary(true))
598
+ assert_equal("\x83w\5false", Erlang::term_to_binary(false))
599
+ assert_equal("\x83w\x09undefined", Erlang::term_to_binary(nil))
592
600
  end
593
601
  def test_term_to_binary_short_integer
594
602
  assert_equal("\x83a\0", Erlang::term_to_binary(0))
data.tar.gz.sig CHANGED
Binary file
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: 2.0.2
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Truog
@@ -11,32 +11,32 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIESDCCArCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAnMSUwIwYDVQQDDBxtanRy
14
- dW9nL0RDPXByb3Rvbm1haWwvREM9Y29tMB4XDTIxMDUyNzIwNTIwMFoXDTIyMDUy
15
- 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
- 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
- 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
- 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
- 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
- RluZWlBVLt0i1mFpG2BxtGXLFxgxzK/syD8ZHBwaraW5k2ENY163TaJUo2NjDpNF
21
- 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
- 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
- hWuqx3Mt2cvo1kIUCmxUFtHDzTWy5MP0LMv2IwvU6bbgzgbDndqAj9OesQYTxQ7L
24
- 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
- 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
- 25AwIQYDVR0RBBowGIEWbWp0cnVvZ0Bwcm90b25tYWlsLmNvbTAhBgNVHRIEGjAY
27
- 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
- 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
- Zpw1Wy+5nlAtoacG+ngQLnB1k+oLi1PXN//MjcD5N+qyAgZ71StjzH7+cPiEA5aw
30
- 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
- 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
- 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
- lSRl2bAVGGyRLghx/n1K1ZISc9UJERR7tdEz3N4fbKzRxG5Tk0b7HdeGotue9Zt3
34
- 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
- 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
36
36
  -----END CERTIFICATE-----
37
- date: 2021-05-27 00:00:00.000000000 Z
37
+ date: 2022-10-12 00:00:00.000000000 Z
38
38
  dependencies: []
39
- description: Erlang Binary Term Format for Ruby
39
+ description: Erlang External Term Format for Ruby
40
40
  email: mjtruog@protonmail.com
41
41
  executables: []
42
42
  extensions: []
metadata.gz.sig CHANGED
Binary file