etheruby 0.9.5 → 0.9.6
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
- data/lib/etheruby/contract.rb +9 -0
- data/lib/etheruby/encoders/address.rb +0 -1
- data/lib/etheruby/encoders/base.rb +1 -1
- data/lib/etheruby/encoders/int.rb +2 -0
- data/lib/etheruby/response_parser.rb +45 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d05b717898b67d52f8facdbc4be52926a3bcf6a5
|
4
|
+
data.tar.gz: 19029f89222c3e5f4a844e8f0d3dd53b0e9506ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76b2ed3ad4ab57f7c7456cb4742fce817f3b6ad816e54e3fa3809644a0d8442d94d2eae977776ac27efc5483f5f89fc4cc39c0b8dfa78b5d2caa47007ba5e1af
|
7
|
+
data.tar.gz: 610617a339890bb61e82cf2ac5720ebc1547b6ffe74eaefc5ab60a00b4307ddb198fbd47792ec1ed46125b438ed0ff98692c57fdb2eb7d2b97ecab22dde89180
|
data/lib/etheruby/contract.rb
CHANGED
@@ -46,7 +46,16 @@ module Etheruby
|
|
46
46
|
@@logger.debug("Registred method #{name}")
|
47
47
|
end
|
48
48
|
|
49
|
+
def self.to_camel_case(sym)
|
50
|
+
ar = sym.to_s.split("_").map{|i| i.capitalize}
|
51
|
+
ar[0] = ar.first.downcase
|
52
|
+
ar.join.to_sym
|
53
|
+
end
|
54
|
+
|
49
55
|
def self.method_missing(sym, *args)
|
56
|
+
unless @@c_methods.include? sym
|
57
|
+
sym = self.to_camel_case(sym)
|
58
|
+
end
|
50
59
|
raise NoContractMethodError.new (
|
51
60
|
"The method #{sym} does not exist in the #{self.class.to_s} contract."
|
52
61
|
) unless @@c_methods.include? sym
|
@@ -5,6 +5,7 @@ module Etheruby::Encoders
|
|
5
5
|
class Int < Base
|
6
6
|
|
7
7
|
def encode(pad_to=64)
|
8
|
+
@data = data.to_i if data.is_a? ::String
|
8
9
|
if data >= 0
|
9
10
|
data.to_s(16).rjust(pad_to, '0')
|
10
11
|
else
|
@@ -28,6 +29,7 @@ module Etheruby::Encoders
|
|
28
29
|
class Uint < Base
|
29
30
|
|
30
31
|
def encode(pad_to=64)
|
32
|
+
@data = data.to_i if data.is_a? ::String
|
31
33
|
raise InvalidFormatForDataError.new("Unsigned integer #{data} < 0") if data < 0
|
32
34
|
Int.new(data).encode(pad_to)
|
33
35
|
end
|
@@ -18,19 +18,34 @@ module Etheruby
|
|
18
18
|
attr_reader :returns, :response
|
19
19
|
|
20
20
|
def initialize(_returns, _response)
|
21
|
-
@returns = _returns
|
21
|
+
@returns = if _returns.is_a? ::String or _returns.is_a? ::Symbol
|
22
|
+
[_returns]
|
23
|
+
else
|
24
|
+
_returns
|
25
|
+
end
|
22
26
|
@response = _response[2.._response.length]
|
23
27
|
end
|
24
28
|
|
25
29
|
def parse
|
26
30
|
return unless @returns
|
27
31
|
real_response = @response
|
28
|
-
responses =
|
32
|
+
responses = if @returns.is_a? Array
|
33
|
+
[]
|
34
|
+
else
|
35
|
+
{}
|
36
|
+
end
|
29
37
|
i = 0
|
38
|
+
|
30
39
|
loop do
|
31
|
-
|
32
|
-
|
33
|
-
|
40
|
+
if @returns.is_a? ::Hash
|
41
|
+
return_name, return_type = returns.keys[i], returns.values[i]
|
42
|
+
else
|
43
|
+
return_type = returns[i]
|
44
|
+
end
|
45
|
+
|
46
|
+
# Treat element
|
47
|
+
if Etheruby::is_static_type? return_type
|
48
|
+
v, s = Etheruby::treat_variable return_type, real_response, :decode
|
34
49
|
else
|
35
50
|
value_position, s = Etheruby::Encoders::Uint.new(real_response).decode
|
36
51
|
v, take_size = Etheruby::treat_variable(
|
@@ -39,17 +54,37 @@ module Etheruby
|
|
39
54
|
:decode
|
40
55
|
)
|
41
56
|
end
|
42
|
-
|
57
|
+
|
58
|
+
# Treat arrays
|
59
|
+
if v.is_a? Etheruby::Encoders::DynamicArray or
|
60
|
+
v.is_a? Etheruby::Encoders::StaticArray
|
43
61
|
v, s = v.decode
|
44
62
|
end
|
45
|
-
|
63
|
+
|
64
|
+
# Add response to responses array
|
65
|
+
if returns.is_a? ::Hash
|
66
|
+
responses[return_name] = v
|
67
|
+
else
|
68
|
+
responses << v
|
69
|
+
end
|
70
|
+
|
71
|
+
# Continues until it has the good number of response
|
46
72
|
break if responses.count == returns.count
|
47
73
|
real_response = real_response[s*2..real_response.length]
|
48
74
|
i += 1
|
49
75
|
end
|
50
|
-
ResponseHolder.new(responses)
|
51
|
-
end
|
52
76
|
|
53
|
-
|
77
|
+
# Returning response in the appropriate format
|
78
|
+
if @returns.is_a? ::Hash
|
79
|
+
ResponseHolder.new responses
|
80
|
+
else
|
81
|
+
if @returns.count == 1
|
82
|
+
responses[0]
|
83
|
+
else
|
84
|
+
responses
|
85
|
+
end
|
86
|
+
end
|
54
87
|
|
88
|
+
end
|
89
|
+
end
|
55
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etheruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jérémy SEBAN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|