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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b35960ad21669693e324f1b0fe5a149f969b1fa
4
- data.tar.gz: 0e449c63f6191bc83c3787b1028f18a74734ed08
3
+ metadata.gz: d05b717898b67d52f8facdbc4be52926a3bcf6a5
4
+ data.tar.gz: 19029f89222c3e5f4a844e8f0d3dd53b0e9506ff
5
5
  SHA512:
6
- metadata.gz: a6f60f6a5ca338aa838b236e0063aef7319fd22dd5f7b5976cbb267bdbf4612a9777d465f5a613885d1da9cbda9ac60af3759be04842a46223a6041747d34f47
7
- data.tar.gz: 6c402d40303b0814bf19b8378588d628748ee6d0daa8098cdf0eac14cb0c1a7d26b2e586c32b12a24d46d15ff2c6761151664b5a966bc78678849324d9b68624
6
+ metadata.gz: 76b2ed3ad4ab57f7c7456cb4742fce817f3b6ad816e54e3fa3809644a0d8442d94d2eae977776ac27efc5483f5f89fc4cc39c0b8dfa78b5d2caa47007ba5e1af
7
+ data.tar.gz: 610617a339890bb61e82cf2ac5720ebc1547b6ffe74eaefc5ab60a00b4307ddb198fbd47792ec1ed46125b438ed0ff98692c57fdb2eb7d2b97ecab22dde89180
@@ -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,7 +5,6 @@ module Etheruby::Encoders
5
5
 
6
6
  class Address < Base
7
7
  def encode
8
- puts data.class
9
8
  if data.is_a?(::String)
10
9
  Uint.new(data[2..64].to_i(16)).encode
11
10
  else
@@ -6,7 +6,7 @@ module Etheruby
6
6
  class InvalidFormatForDataError < StandardError; end
7
7
 
8
8
  class Base
9
- attr_reader :data
9
+ attr_accessor :data
10
10
 
11
11
  def initialize(_data)
12
12
  @data = _data
@@ -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
- return_name, return_type = returns.keys[i], returns.values[i]
32
- if Etheruby::is_static_type?(return_type)
33
- v, s = Etheruby::treat_variable(return_type, real_response, :decode)
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
- if v.is_a? Etheruby::Encoders::DynamicArray or v.is_a? Etheruby::Encoders::StaticArray
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
- responses[return_name] = v
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
- end
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.5
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-23 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov