erlang-etf 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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