scale_rb 0.1.9 → 0.1.11
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/Gemfile.lock +1 -1
- data/lib/client/http_client.rb +27 -4
- data/lib/portable_codec.rb +21 -2
- data/lib/scale_rb/version.rb +1 -1
- data/lib/scale_rb.rb +5 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9af24645257f5dc7c2028047ba01ef9a3d1fe4282581717cb62334a6f96f153
|
4
|
+
data.tar.gz: 8d79a47702d593158680d4fe2f5a887962fd87bc19e51e2d57b4ea6ca2ec0a9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b573f530576618d07382f3b995cc5413a564e4bf95149882cc83b6cb0d885e2adee2f903b5db0c8a14fd5b6964683b6851f6105e0c53c6bcb98e625c2991a639
|
7
|
+
data.tar.gz: efa796fe20f73749749bfd06de0f08c1d836268ddb99963775003f282eff60e15accd4d62556eaa1d01b0821447bdcb4bd8956e5445401ca562da2df1fc547f8
|
data/Gemfile.lock
CHANGED
data/lib/client/http_client.rb
CHANGED
@@ -4,24 +4,34 @@ require 'uri'
|
|
4
4
|
require 'net/http'
|
5
5
|
require 'json'
|
6
6
|
|
7
|
+
# TODO: method_name = cmd.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
7
8
|
module ScaleRb
|
8
9
|
module HttpClient
|
9
10
|
extend RpcRequestBuilder
|
10
11
|
|
11
12
|
class << self
|
12
13
|
def request(url, body)
|
14
|
+
ScaleRb.logger.debug "url: #{url}"
|
15
|
+
ScaleRb.logger.debug "body: #{body}"
|
13
16
|
uri = URI(url)
|
14
17
|
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
|
15
18
|
req.body = body
|
16
19
|
http = Net::HTTP.new(uri.host, uri.port)
|
17
20
|
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
18
21
|
res = http.request(req)
|
19
|
-
|
22
|
+
|
23
|
+
raise res.class.name unless res.is_a?(Net::HTTPSuccess)
|
20
24
|
|
21
25
|
result = JSON.parse(res.body)
|
22
|
-
|
26
|
+
ScaleRb.logger.debug result
|
27
|
+
raise result['error']['message'] if result['error']
|
23
28
|
|
24
29
|
result['result']
|
30
|
+
rescue StandardError => e
|
31
|
+
ScaleRb.logger.error e.message
|
32
|
+
ScaleRb.logger.error 'retry...'
|
33
|
+
sleep 2
|
34
|
+
request(url, body)
|
25
35
|
end
|
26
36
|
|
27
37
|
def json_rpc_call(url, method, *params)
|
@@ -34,7 +44,20 @@ module ScaleRb
|
|
34
44
|
end
|
35
45
|
|
36
46
|
def method_missing(method, *args)
|
37
|
-
|
47
|
+
ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
|
48
|
+
# check if the first argument is a url
|
49
|
+
url_regex = %r{^https?://}
|
50
|
+
raise 'url format is not correct' unless args[0].match?(url_regex)
|
51
|
+
|
52
|
+
url = args[0]
|
53
|
+
raise NoMethodError, "undefined rpc method `#{method}'" unless rpc_methods(url).include?(method.to_s)
|
54
|
+
|
55
|
+
json_rpc_call(url, method, *args[1..])
|
56
|
+
end
|
57
|
+
|
58
|
+
def rpc_methods(url)
|
59
|
+
result = json_rpc_call(url, 'rpc_methods', [])
|
60
|
+
result['methods']
|
38
61
|
end
|
39
62
|
|
40
63
|
def get_metadata(url, at = nil)
|
@@ -157,4 +180,4 @@ module ScaleRb
|
|
157
180
|
end
|
158
181
|
end
|
159
182
|
end
|
160
|
-
end
|
183
|
+
end
|
data/lib/portable_codec.rb
CHANGED
@@ -70,7 +70,23 @@ module PortableCodec
|
|
70
70
|
def decode_array(array_type, bytes, registry)
|
71
71
|
len = array_type._get(:len)
|
72
72
|
inner_type_id = array_type._get(:type)
|
73
|
-
|
73
|
+
|
74
|
+
# check if the type of inner_type_id is a u8
|
75
|
+
if _u8?(inner_type_id, registry)
|
76
|
+
[
|
77
|
+
bytes[0...len].to_hex,
|
78
|
+
bytes[len..]
|
79
|
+
]
|
80
|
+
else
|
81
|
+
_decode_types([inner_type_id] * len, bytes, registry)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def _u8?(type_id, registry)
|
86
|
+
type = registry[type_id]
|
87
|
+
raise TypeNotFound, "id: #{type_id}" if type.nil?
|
88
|
+
|
89
|
+
type._get(:def)._get(:primitive)&.downcase == 'u8'
|
74
90
|
end
|
75
91
|
|
76
92
|
def decode_sequence(sequence_type, bytes, registry)
|
@@ -242,7 +258,10 @@ module PortableCodec
|
|
242
258
|
|
243
259
|
# if the variant item has more than one field, the value must be a hash with the same length.
|
244
260
|
# if the variant item has only one field, that means the field is a type id point to a composite. TODO: check the type's fields length
|
245
|
-
|
261
|
+
if item._get(:fields).length > 1 && item._get(:fields).length != v.length
|
262
|
+
raise VariantFieldsLengthNotMatch,
|
263
|
+
"type: #{variant_type}, \nvalue: #{v}"
|
264
|
+
end
|
246
265
|
|
247
266
|
ScaleRb.encode_uint('u8', item._get(:index)) + encode_composite(item, v, registry)
|
248
267
|
end
|
data/lib/scale_rb/version.rb
CHANGED
data/lib/scale_rb.rb
CHANGED
@@ -32,16 +32,14 @@ require 'address'
|
|
32
32
|
|
33
33
|
module ScaleRb
|
34
34
|
class << self
|
35
|
-
|
36
|
-
|
37
|
-
def logger
|
38
|
-
@logger ||= Logger.new($stdout)
|
39
|
-
@logger.level = Logger::INFO
|
40
|
-
@logger
|
41
|
-
end
|
35
|
+
attr_accessor :logger
|
42
36
|
|
43
37
|
def debug(key, value)
|
44
38
|
logger.debug "#{key.rjust(15)}: #{value}"
|
45
39
|
end
|
46
40
|
end
|
47
41
|
end
|
42
|
+
|
43
|
+
logger = Logger.new($stdout)
|
44
|
+
logger.level = Logger::INFO
|
45
|
+
ScaleRb.logger = logger
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scale_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aki Wu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: blake2b_rs
|