ic_agent 0.2.0 → 0.2.1
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/README.md +2 -0
- data/lib/ic_agent/agent.rb +5 -0
- data/lib/ic_agent/ast/assembler.rb +17 -0
- data/lib/ic_agent/ast/nodes/named_nodes.rb +99 -1
- data/lib/ic_agent/ast/nodes/statement_nodes.rb +63 -1
- data/lib/ic_agent/ast/nodes/string_literal.rb +5 -0
- data/lib/ic_agent/ast/parser.rb +35 -1
- data/lib/ic_agent/ast/statement_parser.rb +15 -0
- data/lib/ic_agent/ast/writer.rb +15 -0
- data/lib/ic_agent/canister.rb +7 -0
- data/lib/ic_agent/common/cycles_wallet.rb +5 -0
- data/lib/ic_agent/common/governance.rb +4 -0
- data/lib/ic_agent/common/ledger.rb +4 -0
- data/lib/ic_agent/common/management.rb +4 -0
- data/lib/ic_agent/version.rb +1 -1
- 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: b1bb3c395959ef0b33094ab3e34a6087b061a76287ce34b312286703c568fade
|
4
|
+
data.tar.gz: f71667c7d06d470c89afd7d9e8734bfded8abc2f7d85a89a77d84fa3ce7e210c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 437bab4be804cc57aa1098aa91275d88623e79c98f9190129956eb2ceb0447dd5dbd305ec7425b3a3fd7fc945035a79329b6a73052c876bc31118a94387cb61a
|
7
|
+
data.tar.gz: 05adc3829656980d0a833ac495cbfbf67e84fee5474dda75e39d6f94fb538ee22120de034ba7b81c36680ef4444a586409ecb2c6f0f43d53f9cd7aa28b51e394
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
`ic_agent` provides basic modules to interact with canisters on the DFINITY Internet Computer.
|
6
6
|
|
7
|
+
[](https://badge.fury.io/rb/ic_agent)[](LICENSE)
|
8
|
+
|
7
9
|
|
8
10
|
## Installation
|
9
11
|
|
data/lib/ic_agent/agent.rb
CHANGED
@@ -248,6 +248,9 @@ module IcAgent
|
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
+
# Verify a BLS signature
|
252
|
+
# The signature must be exactly 48 bytes (compressed G1 element)
|
253
|
+
# The key must be exactly 96 bytes (compressed G2 element)
|
251
254
|
def verify(cert, canister_id)
|
252
255
|
signature_hex = IcAgent::Certificate.signature(cert).str2hex
|
253
256
|
tree = IcAgent::Certificate.tree(cert)
|
@@ -262,6 +265,7 @@ module IcAgent
|
|
262
265
|
BLS.verify(signature, msg, public_key)
|
263
266
|
end
|
264
267
|
|
268
|
+
# Check the delegation and return the corresponding root key.
|
265
269
|
def check_delegation(delegation, effective_canister_id, disable_range_check)
|
266
270
|
return @root_key unless delegation
|
267
271
|
|
@@ -303,6 +307,7 @@ module IcAgent
|
|
303
307
|
false
|
304
308
|
end
|
305
309
|
|
310
|
+
# Extract the BLS public key from the DER buffer.
|
306
311
|
def extract_der(der_buf)
|
307
312
|
bls_der_prefix = OpenSSL::BN.from_hex(IcAgent::BLS_DER_PREFIX).to_s(2)
|
308
313
|
expected_length = bls_der_prefix.bytesize + IcAgent::BLS_KEY_LENGTH
|
@@ -5,24 +5,30 @@ module IcAgent
|
|
5
5
|
class Assembler
|
6
6
|
TYPE_MAPPING = {}
|
7
7
|
|
8
|
+
# Builds a single Candid type from a given child type.
|
8
9
|
def self.build_single_type(child_type)
|
9
10
|
IcAgent::Candid::BaseTypes.send(child_type)
|
10
11
|
end
|
11
12
|
|
13
|
+
|
14
|
+
# Builds a Candid blob type.
|
12
15
|
def self.build_blob
|
13
16
|
IcAgent::Candid::BaseTypes.vec(IcAgent::Candid::BaseTypes.nat8)
|
14
17
|
end
|
15
18
|
|
19
|
+
# Builds a Candid optional type from a given child type.
|
16
20
|
def self.build_opt(child_type, key_types = {})
|
17
21
|
child_type = key_types[child_type].nil? ? build_type(child_type, key_types) : key_types[child_type]
|
18
22
|
IcAgent::Candid::BaseTypes.opt(child_type)
|
19
23
|
end
|
20
24
|
|
25
|
+
# Builds a Candid vector type from a given child type.
|
21
26
|
def self.build_vec(child_type, key_types = {})
|
22
27
|
child_type = key_types[child_type].nil? ? build_type(child_type, key_types) : key_types[child_type]
|
23
28
|
IcAgent::Candid::BaseTypes.vec(child_type)
|
24
29
|
end
|
25
30
|
|
31
|
+
# Builds a Candid record type from a given hash of field names and types.
|
26
32
|
def self.build_record(child_hash, multi_types = {}, key_types = {})
|
27
33
|
child_types = {}
|
28
34
|
child_hash.each_key do |key|
|
@@ -38,6 +44,7 @@ module IcAgent
|
|
38
44
|
IcAgent::Candid::BaseTypes.record(child_types)
|
39
45
|
end
|
40
46
|
|
47
|
+
# Builds a Candid variant type from a given hash of field names and types.
|
41
48
|
def self.build_variant(child_hash, multi_types = {}, key_types = {})
|
42
49
|
child_types = {}
|
43
50
|
child_hash.each_key do |key|
|
@@ -53,6 +60,7 @@ module IcAgent
|
|
53
60
|
IcAgent::Candid::BaseTypes.variant(child_types)
|
54
61
|
end
|
55
62
|
|
63
|
+
# Builds a Candid type based on the given type string.
|
56
64
|
def self.build_type(type_str, key_types = {}, multi_types = {})
|
57
65
|
opt_code = get_opt_code(type_str)
|
58
66
|
|
@@ -91,6 +99,7 @@ module IcAgent
|
|
91
99
|
end
|
92
100
|
end
|
93
101
|
|
102
|
+
# Replaces the last occurrence of a pattern in a string with the given replacement.
|
94
103
|
def self.replace_last_occurrence(string, pattern, replacement)
|
95
104
|
last_index = string.rindex(pattern)
|
96
105
|
return string unless last_index
|
@@ -99,18 +108,21 @@ module IcAgent
|
|
99
108
|
string
|
100
109
|
end
|
101
110
|
|
111
|
+
# Extracts the content of a Candid record type from the type string.
|
102
112
|
def self.get_record_content(record_str)
|
103
113
|
record_str = record_str.sub('record', '').sub('{', '')
|
104
114
|
record_str = replace_last_occurrence(record_str, '}', '')
|
105
115
|
record_str.strip
|
106
116
|
end
|
107
117
|
|
118
|
+
# Extracts the content of a Candid variant type from the type string.
|
108
119
|
def self.get_variant_content(variant_str)
|
109
120
|
variant_str = variant_str.sub('variant', '').sub('{', '')
|
110
121
|
variant_str = replace_last_occurrence(variant_str, '}', '')
|
111
122
|
variant_str.strip
|
112
123
|
end
|
113
124
|
|
125
|
+
# Extracts the key-value pairs from a Candid record item string.
|
114
126
|
def self.get_record_key_value(item_str, index_str, key_index = 0)
|
115
127
|
first_index = item_str.index(index_str)
|
116
128
|
if first_index
|
@@ -123,16 +135,19 @@ module IcAgent
|
|
123
135
|
return key, value
|
124
136
|
end
|
125
137
|
|
138
|
+
# Extracts the Candid code (e.g., "record", "variant", "opt", etc.) from the type string.
|
126
139
|
def self.get_opt_code(item_str)
|
127
140
|
opt_code = item_str.strip
|
128
141
|
opt_code.split(' ')[0]
|
129
142
|
end
|
130
143
|
|
144
|
+
# Extracts the child Candid code from the type string.
|
131
145
|
def self.get_child_code(item_str, index_str)
|
132
146
|
first_index = item_str.index(index_str)
|
133
147
|
item_str[(first_index + index_str.size)..].strip
|
134
148
|
end
|
135
149
|
|
150
|
+
# Replaces occurrences of Candid record and variant types with unique type names.
|
136
151
|
def self.replace_multi_type(type_str)
|
137
152
|
replaced_hash = {}
|
138
153
|
modified_str = type_str.gsub(/record\s*{[^{}]*}/) do |match|
|
@@ -152,6 +167,7 @@ module IcAgent
|
|
152
167
|
return modified_str, replaced_hash
|
153
168
|
end
|
154
169
|
|
170
|
+
# Gets the refer types used in the type string.
|
155
171
|
def self.get_params_refer_values(type_str)
|
156
172
|
parser = IcAgent::Ast::StatementParser.new
|
157
173
|
parser.parse(type_str)
|
@@ -159,6 +175,7 @@ module IcAgent
|
|
159
175
|
refer_type
|
160
176
|
end
|
161
177
|
|
178
|
+
# Recovers the original type string from the multi_types hash.
|
162
179
|
def self.recover_type(type_str, multi_types)
|
163
180
|
multi_types.each_key do |key|
|
164
181
|
type_str = type_str.gsub(key, multi_types[key])
|
@@ -3,15 +3,19 @@ require 'treetop'
|
|
3
3
|
module IcAgent
|
4
4
|
module Ast
|
5
5
|
module Nodes
|
6
|
+
# Represents a named node in the abstract syntax tree.
|
6
7
|
class NamedNode < Treetop::Runtime::SyntaxNode
|
8
|
+
# The title of the named node.
|
7
9
|
def title
|
8
10
|
:named_node
|
9
11
|
end
|
10
12
|
|
13
|
+
# Converts the node and its children to an array representation.
|
11
14
|
def to_array
|
12
15
|
[title] + elements.map(&:to_array)
|
13
16
|
end
|
14
17
|
|
18
|
+
# Converts the node and its children to a string representation.
|
15
19
|
def to_s
|
16
20
|
"#{title.to_s.upcase} #{elements_to_s}"
|
17
21
|
end
|
@@ -25,53 +29,68 @@ module IcAgent
|
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
32
|
+
# Represents an instruction node in the abstract syntax tree, a subclass of NamedNode.
|
28
33
|
class Instruction < NamedNode
|
34
|
+
# The title of the instruction node.
|
29
35
|
def title
|
30
36
|
:instruction
|
31
37
|
end
|
32
38
|
|
39
|
+
# Converts the instruction node to a string representation.
|
33
40
|
def to_s
|
34
41
|
elements_to_s
|
35
42
|
end
|
36
43
|
end
|
37
44
|
|
45
|
+
# Represents a comment node in the abstract syntax tree, a subclass of NamedNode.
|
38
46
|
class Comment < NamedNode
|
47
|
+
# The title of the comment node.
|
39
48
|
def title
|
40
49
|
:comment
|
41
50
|
end
|
42
51
|
|
52
|
+
# Converts the comment node to a string representation with '#' prefix.
|
43
53
|
def to_s
|
44
54
|
"# #{elements[0].to_s}"
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
58
|
+
# Represents a DID file node in the abstract syntax tree, a subclass of NamedNode.
|
48
59
|
class DIDFile < NamedNode
|
60
|
+
# The title of the DID file node.
|
49
61
|
def title
|
50
62
|
:did_file
|
51
63
|
end
|
52
64
|
|
65
|
+
# Converts the DID file node to a string representation.
|
53
66
|
def to_s
|
54
67
|
elements_to_s
|
55
68
|
end
|
56
69
|
end
|
57
70
|
|
71
|
+
# Represents a type declaration node in the abstract syntax tree, a subclass of NamedNode.
|
58
72
|
class TypeDeclaration < NamedNode
|
73
|
+
# The title of the type declaration node.
|
59
74
|
def title
|
60
75
|
:type_declaration
|
61
76
|
end
|
62
77
|
|
78
|
+
# Returns the name of the type parameter.
|
63
79
|
def type_param_name
|
64
80
|
elements[0].source_content
|
65
81
|
end
|
66
82
|
|
83
|
+
# Returns the content of the type parameter without newlines and trailing ';}' replaced with '}'.
|
67
84
|
def type_param_content
|
68
85
|
elements[1].source_content.gsub("\n", '').gsub(';}', '}')
|
69
86
|
end
|
70
87
|
|
88
|
+
# Returns the opt code of the root type element.
|
71
89
|
def type_root_opt_code
|
72
90
|
elements[1].opt_code
|
73
91
|
end
|
74
92
|
|
93
|
+
# Returns an array of type child items.
|
75
94
|
def type_child_items
|
76
95
|
if elements && elements[1] && elements[1].elements && elements[1].elements[0]
|
77
96
|
elements[1].elements[0].elements
|
@@ -80,6 +99,7 @@ module IcAgent
|
|
80
99
|
end
|
81
100
|
end
|
82
101
|
|
102
|
+
# Returns an array of keys of type child items.
|
83
103
|
def type_child_item_keys
|
84
104
|
names = []
|
85
105
|
type_child_items.each do |ele|
|
@@ -88,6 +108,7 @@ module IcAgent
|
|
88
108
|
names
|
89
109
|
end
|
90
110
|
|
111
|
+
# Returns an array of referenced types in the type parameter content.
|
91
112
|
def type_refer_items
|
92
113
|
source_string = self.type_param_content
|
93
114
|
parser = IcAgent::Ast::StatementParser.new
|
@@ -96,10 +117,12 @@ module IcAgent
|
|
96
117
|
refer_type
|
97
118
|
end
|
98
119
|
|
120
|
+
# Converts the type declaration node to a string representation.
|
99
121
|
def to_s
|
100
122
|
text_value
|
101
123
|
end
|
102
124
|
|
125
|
+
# Converts the type declaration node to a hash representation.
|
103
126
|
def to_obj
|
104
127
|
{
|
105
128
|
'type_param_name' => type_param_name,
|
@@ -110,199 +133,257 @@ module IcAgent
|
|
110
133
|
end
|
111
134
|
end
|
112
135
|
|
136
|
+
# Represents a base type node in the abstract syntax tree, a subclass of NamedNode.
|
113
137
|
class BaseType < NamedNode
|
138
|
+
# The title of the base type node.
|
114
139
|
def title
|
115
140
|
:base_type
|
116
141
|
end
|
117
142
|
|
143
|
+
# Converts the base type node to a string representation.
|
118
144
|
def to_s
|
119
145
|
elements_to_s
|
120
146
|
end
|
121
147
|
end
|
122
148
|
|
149
|
+
# Represents a single base type node in the abstract syntax tree, a subclass of BaseType.
|
123
150
|
class BaseTypeSingle < NamedNode
|
151
|
+
# The title of the single base type node.
|
124
152
|
def title
|
125
153
|
:base_type_single
|
126
154
|
end
|
127
155
|
|
156
|
+
# Converts the single base type node to a string representation.
|
128
157
|
def to_s
|
129
158
|
elements_to_s
|
130
159
|
end
|
131
160
|
|
161
|
+
# Returns the opt code for the single base type.
|
132
162
|
def opt_code
|
133
163
|
'single'
|
134
164
|
end
|
135
165
|
end
|
136
166
|
|
167
|
+
# Represents a record base type node in the abstract syntax tree, a subclass of BaseType.
|
137
168
|
class BaseTypeRecord < NamedNode
|
169
|
+
# The title of the record base type node.
|
138
170
|
def title
|
139
171
|
:base_type_record
|
140
172
|
end
|
141
173
|
|
174
|
+
# Converts the record base type node to a string representation.
|
142
175
|
def to_s
|
143
176
|
elements_to_s
|
144
177
|
end
|
145
178
|
|
179
|
+
# Returns the opt code for the record base type.
|
146
180
|
def opt_code
|
147
181
|
'record'
|
148
182
|
end
|
149
183
|
end
|
150
184
|
|
185
|
+
# Represents a key base type node in the abstract syntax tree, a subclass of BaseType.
|
151
186
|
class BaseTypeKey < NamedNode
|
187
|
+
# The title of the key base type node.
|
152
188
|
def title
|
153
189
|
:base_type_key
|
154
190
|
end
|
155
191
|
|
192
|
+
# Converts the key base type node to a string representation.
|
156
193
|
def to_s
|
157
194
|
elements_to_s
|
158
195
|
end
|
159
196
|
end
|
160
197
|
|
198
|
+
# Represents a variant base type node in the abstract syntax tree, a subclass of BaseType.
|
161
199
|
class BaseTypeVariant < NamedNode
|
200
|
+
# The title of the variant base type node.
|
162
201
|
def title
|
163
202
|
:base_type_variant
|
164
203
|
end
|
165
204
|
|
205
|
+
# Converts the variant base type node to a string representation.
|
166
206
|
def to_s
|
167
207
|
elements_to_s
|
168
208
|
end
|
169
209
|
|
210
|
+
# Returns the opt code for the variant base type.
|
170
211
|
def opt_code
|
171
212
|
'variant'
|
172
213
|
end
|
173
214
|
end
|
174
215
|
|
216
|
+
# Represents a function base type node in the abstract syntax tree, a subclass of BaseType.
|
175
217
|
class BaseTypeFunc < NamedNode
|
218
|
+
# The title of the function base type node.
|
176
219
|
def title
|
177
220
|
:base_type_func
|
178
221
|
end
|
179
222
|
|
223
|
+
# Converts the function base type node to a string representation.
|
180
224
|
def to_s
|
181
225
|
elements_to_s
|
182
226
|
end
|
183
227
|
|
228
|
+
# Returns the opt code for the function base type.
|
184
229
|
def opt_code
|
185
230
|
'func'
|
186
231
|
end
|
187
232
|
end
|
188
233
|
|
234
|
+
# Represents an optional base type node in the abstract syntax tree, a subclass of BaseType.
|
189
235
|
class BaseTypeOpt < NamedNode
|
236
|
+
# The title of the optional base type node.
|
190
237
|
def title
|
191
238
|
:base_type_opt
|
192
239
|
end
|
193
240
|
|
241
|
+
# Converts the optional base type node to a string representation.
|
194
242
|
def to_s
|
195
243
|
elements_to_s
|
196
244
|
end
|
197
245
|
|
246
|
+
# Returns the opt code for the optional base type.
|
198
247
|
def opt_code
|
199
248
|
'opt'
|
200
249
|
end
|
201
250
|
end
|
202
251
|
|
252
|
+
# Represents a vector base type node in the abstract syntax tree, a subclass of BaseType.
|
203
253
|
class BaseTypeVec < NamedNode
|
254
|
+
# The title of the vector base type node.
|
204
255
|
def title
|
205
256
|
:base_type_vec
|
206
257
|
end
|
207
258
|
|
259
|
+
# Converts the vector base type node to a string representation.
|
208
260
|
def to_s
|
209
261
|
elements_to_s
|
210
262
|
end
|
211
263
|
|
264
|
+
# Returns the opt code for the vector base type.
|
212
265
|
def opt_code
|
213
266
|
'vec'
|
214
267
|
end
|
215
268
|
end
|
216
269
|
|
270
|
+
# Represents an other base type node in the abstract syntax tree, a subclass of BaseType.
|
217
271
|
class BaseTypeOther < NamedNode
|
272
|
+
# The title of the other base type node.
|
218
273
|
def title
|
219
274
|
:base_type_other
|
220
275
|
end
|
221
276
|
|
277
|
+
# Converts the other base type node to a string representation.
|
222
278
|
def to_s
|
223
279
|
elements_to_s
|
224
280
|
end
|
225
281
|
|
282
|
+
# Returns the opt code for the other base type.
|
226
283
|
def opt_code
|
227
284
|
text_value
|
228
285
|
end
|
229
286
|
end
|
230
287
|
|
288
|
+
# Represents the content of a base type node in the abstract syntax tree, a subclass of NamedNode.
|
231
289
|
class BaseTypeContent < NamedNode
|
290
|
+
# The title of the base type content node.
|
232
291
|
def title
|
233
292
|
:base_type_content
|
234
293
|
end
|
235
294
|
|
295
|
+
# Converts the base type content node to a string representation.
|
236
296
|
def to_s
|
237
297
|
elements_to_s
|
238
298
|
end
|
239
299
|
end
|
240
300
|
|
301
|
+
# Represents a child of a base type node in the abstract syntax tree, a subclass of NamedNode.
|
241
302
|
class BaseTypeChild < NamedNode
|
303
|
+
# The title of the base type child node.
|
242
304
|
def title
|
243
305
|
:base_type_child
|
244
306
|
end
|
245
307
|
|
308
|
+
# Converts the base type child node to a string representation.
|
246
309
|
def to_s
|
247
310
|
elements_to_s
|
248
311
|
end
|
249
312
|
end
|
250
313
|
|
314
|
+
# Represents a type name node in the abstract syntax tree, a subclass of NamedNode.
|
251
315
|
class TypeName < NamedNode
|
316
|
+
# The title of the type name node.
|
252
317
|
def title
|
253
318
|
:type_name
|
254
319
|
end
|
255
320
|
|
321
|
+
# Converts the type name node to a string representation.
|
256
322
|
def to_s
|
257
323
|
elements_to_s
|
258
324
|
end
|
259
325
|
end
|
260
326
|
|
327
|
+
# Represents an IC service node in the abstract syntax tree, a subclass of NamedNode.
|
261
328
|
class Service < NamedNode
|
329
|
+
# The title of the IC service node.
|
262
330
|
def title
|
263
331
|
:ic_service
|
264
332
|
end
|
265
333
|
|
334
|
+
# Converts the IC service node to a string representation.
|
266
335
|
def to_s
|
267
336
|
elements_to_s
|
268
337
|
end
|
269
338
|
end
|
270
339
|
|
340
|
+
# Represents an IC service name node in the abstract syntax tree, a subclass of NamedNode.
|
271
341
|
class IcServiceName < NamedNode
|
342
|
+
# The title of the IC service name node.
|
272
343
|
def title
|
273
344
|
:ic_service_name
|
274
345
|
end
|
275
346
|
|
347
|
+
# Converts the IC service name node to a string representation with '#' prefix.
|
276
348
|
def to_s
|
277
349
|
"# #{elements[0].to_s}"
|
278
350
|
end
|
279
351
|
end
|
280
352
|
|
353
|
+
# Represents IC service methods node in the abstract syntax tree, a subclass of NamedNode.
|
281
354
|
class IcServiceMethods < NamedNode
|
355
|
+
# The title of the IC service methods node.
|
282
356
|
def title
|
283
357
|
:ic_service_methods
|
284
358
|
end
|
285
359
|
|
360
|
+
# Returns an array of IC service method nodes.
|
286
361
|
def value
|
287
362
|
elements.map { |update| update.value }
|
288
363
|
end
|
289
364
|
end
|
290
365
|
|
366
|
+
# Represents an IC service method name node in the abstract syntax tree, a subclass of NamedNode.
|
291
367
|
class IcServiceMethodName < NamedNode
|
368
|
+
# The title of the IC service method name node.
|
292
369
|
def title
|
293
370
|
:ic_service_method_name
|
294
371
|
end
|
295
372
|
end
|
296
373
|
|
374
|
+
# Represents an IC service item node in the abstract syntax tree, a subclass of NamedNode.
|
297
375
|
class IcServiceItem < NamedNode
|
376
|
+
# The title of the IC service item node.
|
298
377
|
def title
|
299
378
|
:ic_service_item
|
300
379
|
end
|
301
380
|
|
381
|
+
# Converts the IC service item node to a string representation.
|
302
382
|
def to_s
|
303
383
|
elements_to_s
|
304
384
|
end
|
305
385
|
|
386
|
+
# Converts the IC service item node to a hash representation.
|
306
387
|
def to_obj
|
307
388
|
obj = {}
|
308
389
|
elements.each do |element|
|
@@ -312,61 +393,79 @@ module IcAgent
|
|
312
393
|
end
|
313
394
|
end
|
314
395
|
|
396
|
+
# Represents an IC service param node in the abstract syntax tree, a subclass of NamedNode.
|
315
397
|
class IcServiceParam < NamedNode
|
398
|
+
# The title of the IC service param node.
|
316
399
|
def title
|
317
400
|
:ic_service_param
|
318
401
|
end
|
319
402
|
|
403
|
+
# Converts the IC service param node to a string representation with '#' prefix.
|
320
404
|
def to_s
|
321
405
|
"# #{elements[0].to_s}"
|
322
406
|
end
|
323
407
|
end
|
324
408
|
|
409
|
+
# Represents an IC service name node in the abstract syntax tree, a subclass of NamedNode.
|
325
410
|
class IcServiceName < NamedNode
|
411
|
+
# The title of the IC service name node.
|
326
412
|
def title
|
327
413
|
:ic_service_name
|
328
414
|
end
|
329
415
|
|
416
|
+
# Converts the IC service name node to a string representation with '#' prefix.
|
330
417
|
def to_s
|
331
418
|
"# #{elements[0].to_s}"
|
332
419
|
end
|
333
420
|
end
|
334
421
|
|
422
|
+
# Represents an IC service method params node in the abstract syntax tree, a subclass of NamedNode.
|
335
423
|
class IcServiceMethodParams < NamedNode
|
424
|
+
# The title of the IC service method params node.
|
336
425
|
def title
|
337
426
|
:ic_service_method_params
|
338
427
|
end
|
339
428
|
|
429
|
+
# Converts the IC service method params node to a string representation.
|
340
430
|
def to_s
|
341
431
|
elements_to_s
|
342
432
|
end
|
343
433
|
end
|
344
434
|
|
435
|
+
# Represents an IC service method return node in the abstract syntax tree, a subclass of NamedNode.
|
345
436
|
class IcServiceMethodReturn < NamedNode
|
437
|
+
# The title of the IC service method return node.
|
346
438
|
def title
|
347
439
|
:ic_service_method_return
|
348
440
|
end
|
349
441
|
|
442
|
+
# Converts the IC service method return node to a string representation.
|
350
443
|
def to_s
|
351
444
|
elements_to_s
|
352
445
|
end
|
353
446
|
end
|
354
447
|
|
448
|
+
# Represents an IC service method query node in the abstract syntax tree, a subclass of NamedNode.
|
355
449
|
class IcServiceMethodQuery < NamedNode
|
450
|
+
# The title of the IC service method query node.
|
356
451
|
def title
|
357
452
|
:ic_service_method_query
|
358
453
|
end
|
359
454
|
|
455
|
+
# Converts the IC service method query node to a string representation.
|
360
456
|
def to_s
|
361
457
|
elements_to_s
|
362
458
|
end
|
363
459
|
end
|
364
460
|
|
461
|
+
# Represents the content of a base type node in the abstract syntax tree, a subclass of NamedNode.
|
365
462
|
class BaseTypeContent < NamedNode
|
463
|
+
# The title of the IC service method query node.
|
366
464
|
def title
|
367
465
|
:ic_service_method_query
|
368
466
|
end
|
369
467
|
|
468
|
+
# Converts the IC service method query node to a string representation.
|
370
469
|
def to_s
|
371
470
|
elements_to_s
|
372
471
|
end
|
@@ -374,4 +473,3 @@ module IcAgent
|
|
374
473
|
end
|
375
474
|
end
|
376
475
|
end
|
377
|
-
|
@@ -3,217 +3,280 @@ require 'treetop'
|
|
3
3
|
module IcAgent
|
4
4
|
module Ast
|
5
5
|
module Nodes
|
6
|
+
# Represents a statement node in the abstract syntax tree with additional attributes.
|
6
7
|
class StatementNode < Treetop::Runtime::SyntaxNode
|
8
|
+
# Additional attributes to store child count and depth.
|
7
9
|
attr_accessor :child_count, :depth
|
8
10
|
|
11
|
+
# The title of the statement node, by default :named_node.
|
9
12
|
def title
|
10
13
|
:named_node
|
11
14
|
end
|
12
15
|
|
16
|
+
# Converts the statement node and its children to an array representation.
|
13
17
|
def to_array
|
14
18
|
[title] + elements.map(&:to_array)
|
15
19
|
end
|
16
20
|
|
21
|
+
# Converts the statement node and its children to a string representation.
|
17
22
|
def to_s
|
18
23
|
"#{title.to_s.upcase} #{elements_to_s}"
|
19
24
|
end
|
20
25
|
|
26
|
+
# Converts the children of the statement node to a string.
|
21
27
|
def elements_to_s
|
22
28
|
elements.map(&:to_s).join("\n")
|
23
29
|
end
|
24
30
|
|
31
|
+
# Adds a child to the statement node.
|
25
32
|
def add_child
|
26
33
|
@child_count ||= 0 + 1
|
27
34
|
end
|
28
35
|
|
36
|
+
# Returns the source content of the statement node by removing leading and trailing whitespaces.
|
29
37
|
def source_content
|
30
38
|
self.text_value.strip
|
31
39
|
end
|
32
40
|
end
|
33
41
|
|
42
|
+
# Represents an IC base type node in the abstract syntax tree, a subclass of StatementNode.
|
34
43
|
class IcBaseType < StatementNode
|
44
|
+
# The title of the IC base type node.
|
35
45
|
def title
|
36
46
|
:base_type
|
37
47
|
end
|
38
48
|
|
49
|
+
# Converts the IC base type node to a string representation.
|
39
50
|
def to_s
|
40
51
|
elements_to_s
|
41
52
|
end
|
42
53
|
end
|
43
54
|
|
55
|
+
# Represents an IC base type single node in the abstract syntax tree, a subclass of StatementNode.
|
44
56
|
class IcBaseTypeSingle < StatementNode
|
57
|
+
# The title of the IC base type single node.
|
45
58
|
def title
|
46
59
|
:base_type_single
|
47
60
|
end
|
48
61
|
|
62
|
+
# Converts the IC base type single node to a string representation.
|
49
63
|
def to_s
|
50
64
|
elements_to_s
|
51
65
|
end
|
52
66
|
|
67
|
+
# Returns the opt code for the IC base type single node, which is 'single'.
|
53
68
|
def opt_code
|
54
69
|
'single'
|
55
70
|
end
|
56
71
|
end
|
57
72
|
|
73
|
+
# Represents an IC base type record node in the abstract syntax tree, a subclass of StatementNode.
|
58
74
|
class IcBaseTypeRecord < StatementNode
|
75
|
+
# The title of the IC base type record node.
|
59
76
|
def title
|
60
77
|
:base_type_record
|
61
78
|
end
|
62
79
|
|
80
|
+
# Converts the IC base type record node to a string representation.
|
63
81
|
def to_s
|
64
82
|
elements_to_s
|
65
83
|
end
|
66
84
|
|
85
|
+
# Returns the opt code for the IC base type record node, which is 'record'.
|
67
86
|
def opt_code
|
68
87
|
'record'
|
69
88
|
end
|
70
89
|
end
|
71
90
|
|
91
|
+
# Represents an IC base type key node in the abstract syntax tree, a subclass of StatementNode.
|
72
92
|
class IcBaseTypeKey < StatementNode
|
93
|
+
# The title of the IC base type key node.
|
73
94
|
def title
|
74
95
|
:base_type_key
|
75
96
|
end
|
76
97
|
|
98
|
+
# Converts the IC base type key node to a string representation.
|
77
99
|
def to_s
|
78
100
|
elements_to_s
|
79
101
|
end
|
80
102
|
end
|
81
103
|
|
104
|
+
# Represents an IC base type value node in the abstract syntax tree, a subclass of StatementNode.
|
82
105
|
class IcBaseTypeValue < StatementNode
|
106
|
+
# The title of the IC base type value node.
|
83
107
|
def title
|
84
108
|
:base_type_value
|
85
109
|
end
|
86
110
|
|
111
|
+
# Converts the IC base type value node to a string representation.
|
87
112
|
def to_s
|
88
113
|
elements_to_s
|
89
114
|
end
|
90
115
|
end
|
91
116
|
|
117
|
+
# Represents an IC type definition node in the abstract syntax tree, a subclass of StatementNode.
|
92
118
|
class IcTypeDef < StatementNode
|
119
|
+
# The title of the IC type definition node.
|
93
120
|
def title
|
94
121
|
:base_type_def
|
95
122
|
end
|
96
123
|
|
124
|
+
# Converts the IC type definition node to a string representation.
|
97
125
|
def to_s
|
98
126
|
elements_to_s
|
99
127
|
end
|
100
128
|
end
|
101
129
|
|
130
|
+
# Represents an IC base type variant node in the abstract syntax tree, a subclass of StatementNode.
|
102
131
|
class IcBaseTypeVariant < StatementNode
|
132
|
+
# The title of the IC base type variant node.
|
103
133
|
def title
|
104
134
|
:base_type_variant
|
105
135
|
end
|
106
136
|
|
137
|
+
# Converts the IC base type variant node to a string representation.
|
107
138
|
def to_s
|
108
139
|
elements_to_s
|
109
140
|
end
|
110
141
|
|
142
|
+
# Returns the opt code for the IC base type variant node, which is 'variant'.
|
111
143
|
def opt_code
|
112
144
|
'variant'
|
113
145
|
end
|
114
146
|
end
|
115
147
|
|
148
|
+
# Represents an IC base type function node in the abstract syntax tree, a subclass of StatementNode.
|
116
149
|
class IcBaseTypeFunc < StatementNode
|
150
|
+
# The title of the IC base type function node.
|
117
151
|
def title
|
118
152
|
:base_type_func
|
119
153
|
end
|
120
154
|
|
155
|
+
# Converts the IC base type function node to a string representation.
|
121
156
|
def to_s
|
122
157
|
elements_to_s
|
123
158
|
end
|
124
159
|
|
160
|
+
# Returns the opt code for the IC base type function node, which is 'func'.
|
125
161
|
def opt_code
|
126
162
|
'func'
|
127
163
|
end
|
128
164
|
end
|
129
165
|
|
166
|
+
# Represents an IC base type optional node in the abstract syntax tree, a subclass of StatementNode.
|
130
167
|
class IcBaseTypeOpt < StatementNode
|
168
|
+
# The title of the IC base type optional node.
|
131
169
|
def title
|
132
170
|
:base_type_opt
|
133
171
|
end
|
134
172
|
|
173
|
+
# Converts the IC base type optional node to a string representation.
|
135
174
|
def to_s
|
136
175
|
elements_to_s
|
137
176
|
end
|
138
177
|
|
178
|
+
# Returns the opt code for the IC base type optional node, which is 'opt'.
|
139
179
|
def opt_code
|
140
180
|
'opt'
|
141
181
|
end
|
142
182
|
end
|
143
183
|
|
184
|
+
# Represents an IC base type vector node in the abstract syntax tree, a subclass of StatementNode.
|
144
185
|
class IcBaseTypeVec < StatementNode
|
186
|
+
# The title of the IC base type vector node.
|
145
187
|
def title
|
146
188
|
:base_type_vec
|
147
189
|
end
|
148
190
|
|
191
|
+
# Converts the IC base type vector node to a string representation.
|
149
192
|
def to_s
|
150
193
|
elements_to_s
|
151
194
|
end
|
152
195
|
|
196
|
+
# Returns the opt code for the IC base type vector node, which is 'vec'.
|
153
197
|
def opt_code
|
154
198
|
'vec'
|
155
199
|
end
|
156
200
|
end
|
157
201
|
|
202
|
+
# Represents an IC base type other node in the abstract syntax tree, a subclass of StatementNode.
|
158
203
|
class IcBaseTypeOther < StatementNode
|
204
|
+
# The title of the IC base type other node.
|
159
205
|
def title
|
160
206
|
:base_type_other
|
161
207
|
end
|
162
208
|
|
209
|
+
# Converts the IC base type other node to a string representation.
|
163
210
|
def to_s
|
164
211
|
elements_to_s
|
165
212
|
end
|
166
213
|
|
214
|
+
# Returns the opt code for the IC base type other node.
|
167
215
|
def opt_code
|
168
216
|
text_value
|
169
217
|
end
|
170
218
|
end
|
171
219
|
|
220
|
+
# Represents the content of an IC base type node in the abstract syntax tree, a subclass of StatementNode.
|
172
221
|
class IcBaseTypeContent < StatementNode
|
222
|
+
# The title of the IC base type content node.
|
173
223
|
def title
|
174
224
|
:base_type_content
|
175
225
|
end
|
176
226
|
|
227
|
+
# Converts the IC base type content node to a string representation.
|
177
228
|
def to_s
|
178
229
|
elements_to_s
|
179
230
|
end
|
180
231
|
end
|
181
232
|
|
233
|
+
# Represents a child of an IC base type node in the abstract syntax tree, a subclass of StatementNode.
|
182
234
|
class IcBaseTypeChild < StatementNode
|
235
|
+
# The title of the IC base type child node.
|
183
236
|
def title
|
184
237
|
:base_type_child
|
185
238
|
end
|
186
239
|
|
240
|
+
# Converts the IC base type child node to a string representation.
|
187
241
|
def to_s
|
188
242
|
elements_to_s
|
189
243
|
end
|
190
244
|
end
|
191
245
|
|
246
|
+
# Represents an IC type name node in the abstract syntax tree, a subclass of StatementNode.
|
192
247
|
class IcTypeName < StatementNode
|
248
|
+
# The title of the IC type name node.
|
193
249
|
def title
|
194
250
|
:type_name
|
195
251
|
end
|
196
252
|
|
253
|
+
# Converts the IC type name node to a string representation.
|
197
254
|
def to_s
|
198
255
|
elements_to_s
|
199
256
|
end
|
200
257
|
end
|
201
258
|
|
259
|
+
# Represents a statement block node in the abstract syntax tree, a subclass of StatementNode.
|
202
260
|
class StatementBlock < StatementNode
|
261
|
+
# The title of the statement block node.
|
203
262
|
def title
|
204
263
|
:statement_block
|
205
264
|
end
|
206
265
|
|
266
|
+
# Converts the statement block node to a string representation.
|
207
267
|
def to_s
|
208
268
|
elements_to_s
|
209
269
|
end
|
210
270
|
end
|
211
271
|
|
272
|
+
# Represents the content of a statement node in the abstract syntax tree, a subclass of StatementNode.
|
212
273
|
class StatementContent < StatementNode
|
274
|
+
# The title of the statement content node.
|
213
275
|
def title
|
214
276
|
:statement_content
|
215
277
|
end
|
216
278
|
|
279
|
+
# Converts the statement content node to a string representation.
|
217
280
|
def to_s
|
218
281
|
elements_to_s
|
219
282
|
end
|
@@ -221,4 +284,3 @@ module IcAgent
|
|
221
284
|
end
|
222
285
|
end
|
223
286
|
end
|
224
|
-
|
@@ -3,11 +3,16 @@ require 'treetop'
|
|
3
3
|
module IcAgent
|
4
4
|
module Ast
|
5
5
|
module Nodes
|
6
|
+
# Represents a string literal node in the abstract syntax tree.
|
6
7
|
class StringLiteral < Treetop::Runtime::SyntaxNode
|
8
|
+
# Converts the string literal node to an array representation.
|
9
|
+
# In this case, the array contains the text value of the string literal.
|
7
10
|
def to_array
|
8
11
|
self.text_value
|
9
12
|
end
|
10
13
|
|
14
|
+
# Converts the string literal node to a string representation.
|
15
|
+
# In this case, it returns the text value of the string literal.
|
11
16
|
def to_s
|
12
17
|
self.text_value
|
13
18
|
end
|
data/lib/ic_agent/ast/parser.rb
CHANGED
@@ -2,26 +2,41 @@ require 'treetop'
|
|
2
2
|
|
3
3
|
module IcAgent
|
4
4
|
module Ast
|
5
|
+
# The Parser class provides methods to parse data using a Treetop grammar and work with the resulting Abstract Syntax Tree (AST).
|
5
6
|
class Parser
|
6
7
|
attr_accessor :parser, :tree
|
7
8
|
|
9
|
+
# Initializes the Parser by loading the Treetop grammar file.
|
8
10
|
def initialize
|
9
11
|
Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'did_grammar.treetop')))
|
10
12
|
@parser = DIDGrammarParser.new
|
11
13
|
end
|
12
14
|
|
15
|
+
# Parses the given data using the Treetop parser and returns the AST.
|
16
|
+
#
|
17
|
+
# Parameters:
|
18
|
+
# - data: The data to be parsed.
|
19
|
+
# - return_type: The desired return type for the parse result (:string by default).
|
20
|
+
#
|
21
|
+
# Returns:
|
22
|
+
# - The root node of the Abstract Syntax Tree (AST).
|
23
|
+
#
|
24
|
+
# Raises:
|
25
|
+
# - Exception if there is a parse error.
|
13
26
|
def parse(data, return_type = :string)
|
14
27
|
tree = @parser.parse(data)
|
15
28
|
|
16
29
|
raise Exception, "Parse error at offset: #{@parser.index} #{@parser.failure_reason}" if tree.nil?
|
17
30
|
|
18
|
-
#
|
31
|
+
# This method edits the tree in place to remove unnecessary syntax nodes.
|
19
32
|
clean_tree(tree)
|
20
33
|
|
21
34
|
@tree = tree
|
22
35
|
tree
|
23
36
|
end
|
24
37
|
|
38
|
+
# Recursively cleans the syntax tree by removing nodes of class 'Treetop::Runtime::SyntaxNode'.
|
39
|
+
# This method is used to remove unnecessary nodes generated during parsing.
|
25
40
|
def clean_tree(root_node)
|
26
41
|
return if root_node.elements.nil?
|
27
42
|
|
@@ -29,6 +44,10 @@ module IcAgent
|
|
29
44
|
root_node.elements.each { |node| self.clean_tree(node) }
|
30
45
|
end
|
31
46
|
|
47
|
+
# Retrieves the root node of the IC service from the AST.
|
48
|
+
#
|
49
|
+
# Returns:
|
50
|
+
# - The root node representing the IC service, or nil if not found.
|
32
51
|
def ic_service
|
33
52
|
tree.elements.each do |ele|
|
34
53
|
return ele if ele.title == :ic_service
|
@@ -36,6 +55,7 @@ module IcAgent
|
|
36
55
|
nil
|
37
56
|
end
|
38
57
|
|
58
|
+
# Retrieves an array of AST nodes representing IC type declarations.
|
39
59
|
def ic_types
|
40
60
|
type_arr = []
|
41
61
|
tree.elements.each do |ele|
|
@@ -44,6 +64,7 @@ module IcAgent
|
|
44
64
|
type_arr
|
45
65
|
end
|
46
66
|
|
67
|
+
# Converts the IC type declarations to an array of corresponding objects.
|
47
68
|
def ic_types_obj
|
48
69
|
obj_arr = []
|
49
70
|
ic_types.each do |ic_type|
|
@@ -52,6 +73,10 @@ module IcAgent
|
|
52
73
|
obj_arr
|
53
74
|
end
|
54
75
|
|
76
|
+
# Retrieves the root node of the IC service methods from the AST.
|
77
|
+
#
|
78
|
+
# Returns:
|
79
|
+
# - The root node representing the IC service methods, or nil if not found.
|
55
80
|
def ic_service_methods
|
56
81
|
ic_service_tree = ic_service
|
57
82
|
unless ic_service_tree.empty?
|
@@ -62,10 +87,12 @@ module IcAgent
|
|
62
87
|
nil
|
63
88
|
end
|
64
89
|
|
90
|
+
# Retrieves the name of an IC type from its AST node.
|
65
91
|
def ic_type_name(ic_type)
|
66
92
|
ic_type.type_param_name
|
67
93
|
end
|
68
94
|
|
95
|
+
# Retrieves an array of names of all IC types from the AST.
|
69
96
|
def ic_type_names
|
70
97
|
names_arr = []
|
71
98
|
ic_types.each do |ic_type|
|
@@ -74,6 +101,13 @@ module IcAgent
|
|
74
101
|
names_arr
|
75
102
|
end
|
76
103
|
|
104
|
+
# Retrieves the AST node of an IC type by its name.
|
105
|
+
#
|
106
|
+
# Parameters:
|
107
|
+
# - type_name: The name of the IC type to retrieve.
|
108
|
+
#
|
109
|
+
# Returns:
|
110
|
+
# - The AST node representing the IC type, or nil if not found.
|
77
111
|
def ic_type_by_name(type_name)
|
78
112
|
ic_types.each do |ic_type|
|
79
113
|
return ic_type if type_name == ic_type_name(ic_type)
|
@@ -2,6 +2,8 @@ require 'treetop'
|
|
2
2
|
|
3
3
|
module IcAgent
|
4
4
|
module Ast
|
5
|
+
# The StatementParser class provides methods to parse data and generate an Abstract Syntax Tree (AST)
|
6
|
+
# for nested types based on the specified grammar.
|
5
7
|
class StatementParser
|
6
8
|
attr_accessor :parser, :tree, :source_tree
|
7
9
|
|
@@ -21,10 +23,19 @@ module IcAgent
|
|
21
23
|
REFER_TYPE_KEYS = ['record', 'variant']
|
22
24
|
|
23
25
|
def initialize
|
26
|
+
# Loads the Treetop grammar from the specified file.
|
24
27
|
Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'nested_type_grammar.treetop')))
|
25
28
|
@parser = TypeGrammarParser.new
|
26
29
|
end
|
27
30
|
|
31
|
+
# Parses the input data and generates the Abstract Syntax Tree (AST) for nested types based on the grammar.
|
32
|
+
#
|
33
|
+
# Parameters:
|
34
|
+
# - data: The input data to be parsed.
|
35
|
+
# - return_type: The desired format for the parsed AST (:string by default).
|
36
|
+
#
|
37
|
+
# Returns:
|
38
|
+
# - The generated AST in the specified format.
|
28
39
|
def parse(data, return_type = :string)
|
29
40
|
tree = @parser.parse(data)
|
30
41
|
raise Exception, "Parse error at offset: #{@parser.index} #{@parser.failure_reason}" if tree.nil?
|
@@ -38,6 +49,7 @@ module IcAgent
|
|
38
49
|
tree
|
39
50
|
end
|
40
51
|
|
52
|
+
# Cleans up the AST tree by removing unnecessary nodes.
|
41
53
|
def clean_tree(root_node)
|
42
54
|
return if root_node.elements.nil?
|
43
55
|
|
@@ -45,6 +57,7 @@ module IcAgent
|
|
45
57
|
root_node.elements.each { |node| self.clean_tree(node) }
|
46
58
|
end
|
47
59
|
|
60
|
+
# Generates the source tree from the AST tree.
|
48
61
|
# @param [Object] root_node
|
49
62
|
# @param [nil] tree_root_node
|
50
63
|
# @param [nil] tree_current_node
|
@@ -87,10 +100,12 @@ module IcAgent
|
|
87
100
|
self.source_tree = tree_root_node
|
88
101
|
end
|
89
102
|
|
103
|
+
# Returns the root node of the AST statement.
|
90
104
|
def ic_statement_root
|
91
105
|
tree.elements[0]
|
92
106
|
end
|
93
107
|
|
108
|
+
# Returns the child nodes of the AST statement.
|
94
109
|
def ic_statement_childs
|
95
110
|
if tree.elements[0] && tree.elements[0].elements[0].elements[0]
|
96
111
|
tree.elements[0].elements[0].elements[0].elements
|
data/lib/ic_agent/ast/writer.rb
CHANGED
@@ -1,10 +1,25 @@
|
|
1
1
|
module IcAgent
|
2
2
|
module Ast
|
3
|
+
# The Writer class provides methods to represent an Abstract Syntax Tree (AST) in different formats.
|
3
4
|
class Writer
|
5
|
+
# Initializes the Writer with an Abstract Syntax Tree (AST).
|
6
|
+
#
|
7
|
+
# Parameters:
|
8
|
+
# - tree: The Abstract Syntax Tree (AST) to be represented.
|
4
9
|
def initialize(tree)
|
5
10
|
@tree = tree
|
6
11
|
end
|
7
12
|
|
13
|
+
# Writes the AST in the desired format.
|
14
|
+
#
|
15
|
+
# Parameters:
|
16
|
+
# - return_type: The desired format to represent the AST (:string by default).
|
17
|
+
#
|
18
|
+
# Returns:
|
19
|
+
# - The AST in the specified format:
|
20
|
+
# - :tree: Returns the original AST.
|
21
|
+
# - :array: Returns the AST as an array.
|
22
|
+
# - :string: Returns the AST as a string.
|
8
23
|
def write(return_type = :string)
|
9
24
|
if return_type == :tree
|
10
25
|
@tree
|
data/lib/ic_agent/canister.rb
CHANGED
@@ -2,6 +2,12 @@ require 'rubytree'
|
|
2
2
|
|
3
3
|
module IcAgent
|
4
4
|
class Canister
|
5
|
+
# Constructor for the Canister class.
|
6
|
+
#
|
7
|
+
# Parameters:
|
8
|
+
# - agent: An instance of the agent.
|
9
|
+
# - canister_id: ID of the canister.
|
10
|
+
# - candid: (Optional) The Candid description of the canister. If not provided, it will be queried.
|
5
11
|
def initialize(agent, canister_id, candid=nil)
|
6
12
|
@agent = agent
|
7
13
|
@canister_id = canister_id
|
@@ -17,6 +23,7 @@ module IcAgent
|
|
17
23
|
raise BaseException, "canister #{@canister_id} has no __get_candid_interface_tmp_hack method."
|
18
24
|
end
|
19
25
|
|
26
|
+
# Parse the Candid description to extract information about service methods.
|
20
27
|
parser = IcAgent::Ast::Parser.new
|
21
28
|
parser.parse(@candid)
|
22
29
|
|
@@ -261,6 +261,11 @@ module IcAgent
|
|
261
261
|
|
262
262
|
attr_accessor :identity, :client, :agent, :canister
|
263
263
|
|
264
|
+
# Constructor for the CyclesWallet class.
|
265
|
+
#
|
266
|
+
# Parameters:
|
267
|
+
# - iden: (Optional) An instance of the Identity class.
|
268
|
+
# - wallet_id: The ID of the CyclesWallet.
|
264
269
|
def initialize(iden = nil, wallet_id)
|
265
270
|
@identity = iden.nil? ? IcAgent::Identity.new : iden
|
266
271
|
@client = IcAgent::Client.new
|
@@ -355,6 +355,10 @@ module IcAgent
|
|
355
355
|
|
356
356
|
attr_accessor :identity, :client, :agent, :canister
|
357
357
|
|
358
|
+
# Constructor for the Governance class.
|
359
|
+
#
|
360
|
+
# Parameters:
|
361
|
+
# - iden: (Optional) An instance of the Identity class.
|
358
362
|
def initialize(iden = nil)
|
359
363
|
@identity = iden.nil? ? IcAgent::Identity.new : iden
|
360
364
|
@client = IcAgent::Client.new
|
@@ -166,6 +166,10 @@ module IcAgent
|
|
166
166
|
|
167
167
|
attr_accessor :identity, :client, :agent, :canister
|
168
168
|
|
169
|
+
# Constructor for the Ledger class.
|
170
|
+
#
|
171
|
+
# Parameters:
|
172
|
+
# - iden: (Optional) An instance of the Identity class.
|
169
173
|
def initialize(iden = nil)
|
170
174
|
@identity = iden.nil? ? IcAgent::Identity.new : iden
|
171
175
|
@client = IcAgent::Client.new
|
@@ -182,6 +182,10 @@ module IcAgent
|
|
182
182
|
|
183
183
|
attr_accessor :identity, :client, :agent, :canister
|
184
184
|
|
185
|
+
# Constructor for the Management class.
|
186
|
+
#
|
187
|
+
# Parameters:
|
188
|
+
# - iden: (Optional) An instance of the Identity class.
|
185
189
|
def initialize(iden = nil)
|
186
190
|
@identity = iden.nil? ? IcAgent::Identity.new : iden
|
187
191
|
@client = IcAgent::Client.new
|
data/lib/ic_agent/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ic_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Terry.Tu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base32
|