abi_coder_rb 0.2.1 → 0.2.3

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
  SHA256:
3
- metadata.gz: 603c8a3cab98c321861f9480f1f668ffdf3559553974d09bdcd46858d97a44ea
4
- data.tar.gz: 036b109f1f9f53088d592aeac51a66a9147707ae74a93a431a9c2be65617e37a
3
+ metadata.gz: 35ffe301040ab5e55279be3bb020ba62d5ba3488f94217b055aeca82a403f229
4
+ data.tar.gz: 5a2926ad367ec5fb5e4c9600dd67fd9a9550148bfdd53beb7b3d85e8b960ebff
5
5
  SHA512:
6
- metadata.gz: 1d6358050ac16002065cb2b379bafa1ed85f3cacdcec82998c69408cbd22d46ce47e554a73f2ca1bae9edc9279505cd18d62412a87271503dcf1488ca97f3fe5
7
- data.tar.gz: a4b083f13af344d38aea6acbc5b267f8c0763217ec98041cb8b12d88e2896c5e92df66b8911c6a7524c83f777af05932ebe10ac56bb20523dbacd9a86de52d91
6
+ metadata.gz: 40b222a5fbebb49b769f49ce10c0d1ec808d6c966a42338374e1a5faae5bd27378d15498f09e87de8ba3db12b724748524deba3ca02bedb5e2c6fd58a1ad724b
7
+ data.tar.gz: 05b4d4f66357980d6cef05c187790374ee4c8f23b7479c90faa3c2ac84c9cf5bb5833867e2cf8ebd8cfefaceff260e042e7fdacbf81d6cd8997e738c9794d793
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- abi_coder_rb (0.2.1)
4
+ abi_coder_rb (0.2.3)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AbiCoderRb
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.3"
5
5
  end
@@ -10,7 +10,8 @@ class EventDecoder
10
10
  # data_inputs
11
11
  :data_inputs, :data_type_str, :data_field_names, :data_field_names_flattened
12
12
 
13
- def initialize(event_abi)
13
+ # flatten_sep: separator for flattening event name if it is nested
14
+ def initialize(event_abi, flatten_sep = ".")
14
15
  @event_abi = event_abi
15
16
  @indexed_topic_inputs, @data_inputs = event_abi["inputs"].partition { |input| input["indexed"] }
16
17
 
@@ -23,7 +24,7 @@ class EventDecoder
23
24
  @data_type_str = fields_type_str(@data_fields)
24
25
 
25
26
  @data_field_names = fields_names(@data_fields)
26
- @data_field_names_flattened = fields_names_flatten(@data_fields)
27
+ @data_field_names_flattened = fields_names_flatten(@data_fields, sep: flatten_sep)
27
28
 
28
29
  # add after_decoding action
29
30
  after_decoding lambda { |type, value|
@@ -55,6 +56,8 @@ class EventDecoder
55
56
  end
56
57
 
57
58
  def decode_data(data, flatten: true, with_names: false)
59
+ return with_names ? {} : [] if @data_type_str == "()"
60
+
58
61
  data_values = decode(@data_type_str, hex_to_bin(data))
59
62
 
60
63
  case flatten
@@ -122,16 +125,17 @@ class EventDecoder
122
125
  #
123
126
  # returns:
124
127
  # ["root", "message_channel", "message_index", "message_fromChainId", "message_from", "message_toChainId", "message_to", "message_gasLimit", "message_encoded"]
125
- def fields_names_flatten(fields, prefix = nil)
128
+ def fields_names_flatten(fields, prefix: nil, sep: "_")
126
129
  fields.map do |name, type|
127
130
  name = name.underscore
128
131
  if type.is_a?(::Array)
129
132
  fields_names_flatten(
130
133
  type,
131
- prefix.nil? ? name : "#{prefix}.#{name}"
134
+ prefix: prefix.nil? ? name : "#{prefix}#{sep}#{name}",
135
+ sep: sep
132
136
  )
133
137
  elsif type.is_a?(::String)
134
- prefix.nil? ? name : "#{prefix}.#{name}"
138
+ prefix.nil? ? name : "#{prefix}#{sep}#{name}"
135
139
  end
136
140
  end.flatten
137
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abi_coder_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
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-29 00:00:00.000000000 Z
11
+ date: 2023-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport