erlang-etf 1.1.1 → 2.0.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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +20 -0
  3. data/.gitignore +10 -18
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +15 -4
  7. data/CHANGELOG.md +7 -0
  8. data/Gemfile +10 -6
  9. data/LICENSE.txt +1 -1
  10. data/README.md +13 -13
  11. data/Rakefile +8 -6
  12. data/erlang-etf.gemspec +10 -10
  13. data/lib/erlang-etf.rb +1 -0
  14. data/lib/erlang/etf.rb +363 -30
  15. data/lib/erlang/etf/atom.rb +28 -48
  16. data/lib/erlang/etf/atom_utf8.rb +28 -48
  17. data/lib/erlang/etf/binary.rb +24 -23
  18. data/lib/erlang/etf/bit_binary.rb +35 -27
  19. data/lib/erlang/etf/compressed.rb +61 -35
  20. data/lib/erlang/etf/export.rb +44 -21
  21. data/lib/erlang/etf/float.rb +33 -29
  22. data/lib/erlang/etf/fun.rb +54 -32
  23. data/lib/erlang/etf/integer.rb +24 -12
  24. data/lib/erlang/etf/large_big.rb +31 -37
  25. data/lib/erlang/etf/large_tuple.rb +41 -30
  26. data/lib/erlang/etf/list.rb +55 -25
  27. data/lib/erlang/etf/map.rb +58 -28
  28. data/lib/erlang/etf/new_float.rb +25 -14
  29. data/lib/erlang/etf/new_fun.rb +70 -47
  30. data/lib/erlang/etf/new_reference.rb +51 -24
  31. data/lib/erlang/etf/nil.rb +21 -6
  32. data/lib/erlang/etf/pid.rb +48 -21
  33. data/lib/erlang/etf/port.rb +49 -13
  34. data/lib/erlang/etf/reference.rb +49 -13
  35. data/lib/erlang/etf/small_atom.rb +31 -27
  36. data/lib/erlang/etf/small_atom_utf8.rb +31 -27
  37. data/lib/erlang/etf/small_big.rb +30 -39
  38. data/lib/erlang/etf/small_integer.rb +27 -12
  39. data/lib/erlang/etf/small_tuple.rb +41 -30
  40. data/lib/erlang/etf/string.rb +23 -23
  41. data/lib/erlang/etf/term.rb +109 -70
  42. data/lib/erlang/etf/version.rb +1 -1
  43. metadata +33 -169
  44. data/.rspec +0 -2
  45. data/lib/erlang/etf/bert.rb +0 -74
  46. data/lib/erlang/etf/extensions.rb +0 -144
  47. data/lib/erlang/etf/extensions/array.rb +0 -27
  48. data/lib/erlang/etf/extensions/big_decimal.rb +0 -20
  49. data/lib/erlang/etf/extensions/erlang-export.rb +0 -24
  50. data/lib/erlang/etf/extensions/erlang-list.rb +0 -29
  51. data/lib/erlang/etf/extensions/erlang-map.rb +0 -26
  52. data/lib/erlang/etf/extensions/erlang-nil.rb +0 -20
  53. data/lib/erlang/etf/extensions/erlang-pid.rb +0 -20
  54. data/lib/erlang/etf/extensions/erlang-string.rb +0 -31
  55. data/lib/erlang/etf/extensions/erlang-tuple.rb +0 -29
  56. data/lib/erlang/etf/extensions/false_class.rb +0 -26
  57. data/lib/erlang/etf/extensions/float.rb +0 -18
  58. data/lib/erlang/etf/extensions/hash.rb +0 -30
  59. data/lib/erlang/etf/extensions/integer.rb +0 -46
  60. data/lib/erlang/etf/extensions/nil_class.rb +0 -27
  61. data/lib/erlang/etf/extensions/object.rb +0 -22
  62. data/lib/erlang/etf/extensions/regexp.rb +0 -32
  63. data/lib/erlang/etf/extensions/string.rb +0 -33
  64. data/lib/erlang/etf/extensions/symbol.rb +0 -43
  65. data/lib/erlang/etf/extensions/time.rb +0 -27
  66. data/lib/erlang/etf/extensions/true_class.rb +0 -26
  67. data/lib/erlang/etf/terms.rb +0 -132
  68. data/spec/erlang/etf/atom_spec.rb +0 -90
  69. data/spec/erlang/etf/atom_utf8_spec.rb +0 -90
  70. data/spec/erlang/etf/binary_spec.rb +0 -90
  71. data/spec/erlang/etf/bit_binary_spec.rb +0 -99
  72. data/spec/erlang/etf/compressed_spec.rb +0 -37
  73. data/spec/erlang/etf/export_spec.rb +0 -58
  74. data/spec/erlang/etf/extensions/array_spec.rb +0 -40
  75. data/spec/erlang/etf/extensions/big_decimal_spec.rb +0 -26
  76. data/spec/erlang/etf/extensions/erlang-export_spec.rb +0 -32
  77. data/spec/erlang/etf/extensions/erlang-list_spec.rb +0 -76
  78. data/spec/erlang/etf/extensions/erlang-map_spec.rb +0 -48
  79. data/spec/erlang/etf/extensions/erlang-nil_spec.rb +0 -24
  80. data/spec/erlang/etf/extensions/erlang-pid_spec.rb +0 -33
  81. data/spec/erlang/etf/extensions/erlang-string_spec.rb +0 -41
  82. data/spec/erlang/etf/extensions/erlang-tuple_spec.rb +0 -57
  83. data/spec/erlang/etf/extensions/false_class_spec.rb +0 -29
  84. data/spec/erlang/etf/extensions/float_spec.rb +0 -24
  85. data/spec/erlang/etf/extensions/hash_spec.rb +0 -90
  86. data/spec/erlang/etf/extensions/integer_spec.rb +0 -259
  87. data/spec/erlang/etf/extensions/nil_class_spec.rb +0 -29
  88. data/spec/erlang/etf/extensions/object_spec.rb +0 -30
  89. data/spec/erlang/etf/extensions/regexp_spec.rb +0 -35
  90. data/spec/erlang/etf/extensions/string_spec.rb +0 -43
  91. data/spec/erlang/etf/extensions/symbol_spec.rb +0 -64
  92. data/spec/erlang/etf/extensions/time_spec.rb +0 -32
  93. data/spec/erlang/etf/extensions/true_class_spec.rb +0 -29
  94. data/spec/erlang/etf/float_spec.rb +0 -92
  95. data/spec/erlang/etf/fun_spec.rb +0 -132
  96. data/spec/erlang/etf/integer_spec.rb +0 -57
  97. data/spec/erlang/etf/large_big_spec.rb +0 -67
  98. data/spec/erlang/etf/large_tuple_spec.rb +0 -119
  99. data/spec/erlang/etf/list_spec.rb +0 -159
  100. data/spec/erlang/etf/map_spec.rb +0 -100
  101. data/spec/erlang/etf/new_float_spec.rb +0 -92
  102. data/spec/erlang/etf/new_fun_spec.rb +0 -146
  103. data/spec/erlang/etf/new_reference_spec.rb +0 -60
  104. data/spec/erlang/etf/nil_spec.rb +0 -50
  105. data/spec/erlang/etf/pid_spec.rb +0 -61
  106. data/spec/erlang/etf/port_spec.rb +0 -58
  107. data/spec/erlang/etf/reference_spec.rb +0 -58
  108. data/spec/erlang/etf/small_atom_spec.rb +0 -90
  109. data/spec/erlang/etf/small_atom_utf8_spec.rb +0 -90
  110. data/spec/erlang/etf/small_big_spec.rb +0 -67
  111. data/spec/erlang/etf/small_integer_spec.rb +0 -57
  112. data/spec/erlang/etf/small_tuple_spec.rb +0 -112
  113. data/spec/erlang/etf/string_spec.rb +0 -92
  114. data/spec/erlang/etf/term_spec.rb +0 -27
  115. data/spec/erlang/etf/terms_spec.rb +0 -23
  116. data/spec/erlang/etf_spec.rb +0 -23
  117. data/spec/erlang_spec.rb +0 -95
  118. data/spec/spec_helper.rb +0 -31
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
@@ -1,74 +0,0 @@
1
- module Erlang
2
- module ETF
3
- module BERT
4
- extend self
5
-
6
- def evolve(tuple)
7
- if tuple.elements[1].respond_to?(:atom_name)
8
- case tuple.elements[1].atom_name.to_s.intern
9
- ## boolean ##
10
- when :false
11
- false
12
- when :true
13
- true
14
-
15
- ## dict ##
16
- when :dict
17
- if tuple.elements[2].respond_to?(:__ruby_evolve__) and
18
- ((list = tuple.elements[2].__ruby_evolve__).is_a?(::Erlang::List) or (list.respond_to?(:empty?) and list.empty?))
19
- list.inject({}) do |hash, (key, value)|
20
- hash[key] = value
21
- hash
22
- end
23
- else
24
- unknown(tuple)
25
- end
26
-
27
- ## nil ##
28
- when :nil
29
- nil
30
-
31
- ## regex ##
32
- when :regex
33
- if tuple.elements[2].is_a?(Erlang::ETF::Binary) and
34
- (tuple.elements[3].is_a?(Erlang::ETF::List) or tuple.elements[3].is_a?(Erlang::ETF::Nil))
35
-
36
- source = tuple.elements[2].__ruby_evolve__
37
- opts = tuple.elements[3].__ruby_evolve__
38
-
39
- options = 0
40
- options |= ::Regexp::EXTENDED if opts.include?(:extended)
41
- options |= ::Regexp::IGNORECASE if opts.include?(:caseless)
42
- options |= ::Regexp::MULTILINE if opts.include?(:multiline)
43
- ::Regexp.new(source, options)
44
- else
45
- unknown(tuple)
46
- end
47
-
48
- ## time ##
49
- when :time
50
- if tuple.arity == 5
51
- megaseconds = tuple.elements[2].__ruby_evolve__
52
- seconds = tuple.elements[3].__ruby_evolve__
53
- microseconds = tuple.elements[4].__ruby_evolve__
54
-
55
- Time.at(megaseconds * 1_000_000 + seconds, microseconds)
56
- else
57
- unknown(tuple)
58
- end
59
-
60
- else
61
- unknown(tuple)
62
- end
63
- else
64
- unknown(tuple)
65
- end
66
- end
67
-
68
- def unknown(tuple)
69
- ::Erlang::Tuple[*tuple.elements.map(&:__ruby_evolve__)]
70
- end
71
-
72
- end
73
- end
74
- end
@@ -1,144 +0,0 @@
1
- require "erlang/etf/extensions/object"
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- # @private
8
- class ::Object
9
- include Erlang::ETF::Extensions::Object
10
- end
11
- end
12
- end
13
- end
14
-
15
- require "erlang/etf/extensions/erlang-export"
16
- require "erlang/etf/extensions/erlang-list"
17
- require "erlang/etf/extensions/erlang-map"
18
- require "erlang/etf/extensions/erlang-nil"
19
- require "erlang/etf/extensions/erlang-pid"
20
- require "erlang/etf/extensions/erlang-string"
21
- require "erlang/etf/extensions/erlang-tuple"
22
-
23
- module Erlang
24
- module ETF
25
- module Extensions
26
-
27
- # @private
28
- class ::Erlang::Export
29
- include Erlang::ETF::Extensions::ErlangExport
30
- end
31
-
32
- # @private
33
- class ::Erlang::List
34
- include Erlang::ETF::Extensions::ErlangList
35
- end
36
-
37
- # @private
38
- class ::Erlang::Map
39
- include Erlang::ETF::Extensions::ErlangMap
40
- end
41
-
42
- # @private
43
- class ::Erlang::Nil
44
- include Erlang::ETF::Extensions::ErlangNil
45
- end
46
-
47
- # @private
48
- class ::Erlang::Pid
49
- include Erlang::ETF::Extensions::ErlangPid
50
- end
51
-
52
- # @private
53
- class ::Erlang::String
54
- include Erlang::ETF::Extensions::ErlangString
55
- end
56
-
57
- # @private
58
- class ::Erlang::Tuple
59
- include Erlang::ETF::Extensions::ErlangTuple
60
- end
61
- end
62
- end
63
- end
64
-
65
- require "erlang/etf/extensions/array"
66
- require "erlang/etf/extensions/big_decimal"
67
- require "erlang/etf/extensions/false_class"
68
- require "erlang/etf/extensions/float"
69
- require "erlang/etf/extensions/hash"
70
- require "erlang/etf/extensions/integer"
71
- require "erlang/etf/extensions/nil_class"
72
- require "erlang/etf/extensions/regexp"
73
- require "erlang/etf/extensions/string"
74
- require "erlang/etf/extensions/symbol"
75
- require "erlang/etf/extensions/time"
76
- require "erlang/etf/extensions/true_class"
77
-
78
- module Erlang
79
- module ETF
80
- module Extensions
81
-
82
- # @private
83
- class ::Array
84
- include Erlang::ETF::Extensions::Array
85
- end
86
-
87
- # @private
88
- class ::BigDecimal
89
- include Erlang::ETF::Extensions::BigDecimal
90
- end
91
-
92
- # @private
93
- class ::FalseClass
94
- include Erlang::ETF::Extensions::FalseClass
95
- end
96
-
97
- # @private
98
- class ::Float
99
- include Erlang::ETF::Extensions::Float
100
- end
101
-
102
- # @private
103
- class ::Hash
104
- include Erlang::ETF::Extensions::Hash
105
- end
106
-
107
- # @private
108
- class ::Integer
109
- include Erlang::ETF::Extensions::Integer
110
- end
111
-
112
- # @private
113
- class ::NilClass
114
- include Erlang::ETF::Extensions::NilClass
115
- end
116
-
117
- # @private
118
- class ::Regexp
119
- include Erlang::ETF::Extensions::Regexp
120
- end
121
-
122
- # @private
123
- class ::String
124
- include Erlang::ETF::Extensions::String
125
- end
126
-
127
- # @private
128
- class ::Symbol
129
- include Erlang::ETF::Extensions::Symbol
130
- end
131
-
132
- # @private
133
- class ::Time
134
- include Erlang::ETF::Extensions::Time
135
- end
136
-
137
- # @private
138
- class ::TrueClass
139
- include Erlang::ETF::Extensions::TrueClass
140
- end
141
-
142
- end
143
- end
144
- end
@@ -1,27 +0,0 @@
1
- module Erlang
2
- module ETF
3
- module Extensions
4
-
5
- module Array
6
-
7
- def __erlang_type__
8
- if empty?
9
- :nil
10
- else
11
- :list
12
- end
13
- end
14
-
15
- def __erlang_evolve__
16
- case __erlang_type__
17
- when :nil
18
- ETF::Nil.new
19
- when :list
20
- ETF::List.new(map(&:__erlang_evolve__))
21
- end
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
@@ -1,20 +0,0 @@
1
- require 'bigdecimal'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module BigDecimal
8
-
9
- def __erlang_type__
10
- :float
11
- end
12
-
13
- def __erlang_evolve__
14
- ETF::Float.new(self)
15
- end
16
-
17
- end
18
- end
19
- end
20
- end
@@ -1,24 +0,0 @@
1
- require 'erlang/export'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangExport
8
-
9
- def __erlang_type__
10
- :export
11
- end
12
-
13
- def __erlang_evolve__
14
- ETF::Export.new(
15
- mod.to_s.intern.__erlang_evolve__,
16
- function.to_s.intern.__erlang_evolve__,
17
- arity.__erlang_evolve__
18
- )
19
- end
20
-
21
- end
22
- end
23
- end
24
- end
@@ -1,29 +0,0 @@
1
- require 'erlang/list'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangList
8
-
9
- def __erlang_type__
10
- if empty? and not improper?
11
- :nil
12
- else
13
- :list
14
- end
15
- end
16
-
17
- def __erlang_evolve__
18
- case __erlang_type__
19
- when :nil
20
- ETF::Nil.new
21
- when :list
22
- ETF::List.new(map(&:__erlang_evolve__), tail.__erlang_evolve__)
23
- end
24
- end
25
-
26
- end
27
- end
28
- end
29
- end
@@ -1,26 +0,0 @@
1
- require 'erlang/map'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangMap
8
-
9
- def __erlang_type__
10
- :map
11
- end
12
-
13
- def __erlang_evolve__
14
- if size == 0
15
- ETF::Map.new([], [])
16
- else
17
- ETF::Map.new(*map do |(key, value)|
18
- [key.__erlang_evolve__, value.__erlang_evolve__]
19
- end.transpose)
20
- end
21
- end
22
-
23
- end
24
- end
25
- end
26
- end
@@ -1,20 +0,0 @@
1
- require 'erlang/nil'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangNil
8
-
9
- def __erlang_type__
10
- :nil
11
- end
12
-
13
- def __erlang_evolve__
14
- ETF::Nil.new
15
- end
16
-
17
- end
18
- end
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- require 'erlang/pid'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangPid
8
-
9
- def __erlang_type__
10
- :pid
11
- end
12
-
13
- def __erlang_evolve__
14
- ETF::Pid.new(node.to_s.intern.__erlang_evolve__, id, serial, creation)
15
- end
16
-
17
- end
18
- end
19
- end
20
- end
@@ -1,31 +0,0 @@
1
- require 'erlang/string'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangString
8
-
9
- STRING_MAX = (+1 << 16) - 1
10
-
11
- def __erlang_type__
12
- if bytesize > STRING_MAX
13
- :list
14
- else
15
- :string
16
- end
17
- end
18
-
19
- def __erlang_evolve__
20
- case __erlang_type__
21
- when :list
22
- ETF::List.new(unpack('C*'))
23
- when :string
24
- ETF::String.new(self)
25
- end
26
- end
27
-
28
- end
29
- end
30
- end
31
- end
@@ -1,29 +0,0 @@
1
- require 'erlang/tuple'
2
-
3
- module Erlang
4
- module ETF
5
- module Extensions
6
-
7
- module ErlangTuple
8
-
9
- def __erlang_type__
10
- if length < 256
11
- :small_tuple
12
- else
13
- :large_tuple
14
- end
15
- end
16
-
17
- def __erlang_evolve__
18
- case __erlang_type__
19
- when :small_tuple
20
- ETF::SmallTuple.new(map(&:__erlang_evolve__))
21
- when :large_tuple
22
- ETF::LargeTuple.new(map(&:__erlang_evolve__))
23
- end
24
- end
25
-
26
- end
27
- end
28
- end
29
- end