mangrove 0.36.0 → 0.37.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 371d0e77c422e441bc8798ca1aacf77cf11126fcea3bec2aba243c1a4970300f
4
- data.tar.gz: 1cc24f3c80fe6c2fdca11c75193df51f7d77be047ecb40f98700b30a6eb5df4a
3
+ metadata.gz: d7bff2062eb03661f23a242d3ccb70195f5d6008b24d649866820273d3695241
4
+ data.tar.gz: d13eeb67f687a746f68cf4fc5420a0b3bfd545685e736774d48d2e8821f6fc56
5
5
  SHA512:
6
- metadata.gz: 2aa303b678e5a045c0f1b13acd24cbbed698ea69e278b94fb7df2015924f5627cc86841c5769e30434ca613fef2adf489c6b555875dafff8733b593358321ea1
7
- data.tar.gz: 62c17b4a366a86ec193b09196af476e58f921edebf1118ac875af70e6a61ca5eaa58e5a764f28f82372a266149be5b02a0af3276e2c8857e1d0699019366073a
6
+ metadata.gz: ffe9cd0b531ee28afd18ee4d94d80f0753d2f51655e3742d4fee8b49d539ac220d8c6d87e88a219a40006f6490120bfff16940ae92ee9f81b3d41c65752f9eb5
7
+ data.tar.gz: 831db3a2f5268d68c1f69b659ce42e884eb34a1ee4fbb99015c8c06d5ce19d83c38eb5e6581461149d917b9d5f2ee75f6395f49cf5985d3b5827907d6bc2709a
data/lib/mangrove/enum.rb CHANGED
@@ -51,6 +51,35 @@ module Mangrove
51
51
  T.cast(self, \#{caller.send(:binding).receiver.name})
52
52
  end
53
53
 
54
+ def serialize(inner_serialization_methods: [:serialize, :to_h])
55
+ serialized_inner = begin
56
+ serialized_klass = [
57
+ Hash,
58
+ String,
59
+ Numeric,
60
+ TrueClass,
61
+ FalseClass,
62
+ NilClass
63
+ ]
64
+
65
+ if serialized_klass.any? { |klass| @inner.is_a?(klass) }
66
+ @inner
67
+ else
68
+ inner_serialization_methods.find do |method_name|
69
+ if @inner.respond_to?(method_name, true)
70
+ maybe_hash = @inner.send(method_name)
71
+
72
+ if maybe_hash.is_a?(Hash)
73
+ break maybe_hash
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ { type: self.class.name, value: serialized_inner }
81
+ end
82
+
54
83
  def ==(other)
55
84
  other.is_a?(self.class) && other.inner == @inner
56
85
  end
@@ -93,6 +122,17 @@ module Mangrove
93
122
  extend T::Helpers
94
123
 
95
124
  abstract!
125
+
126
+ def self.deserialize(hash)
127
+ klass = const_get(hash[:type] || hash["type"])
128
+ value = hash[:value] || hash["value"]
129
+
130
+ begin
131
+ klass.new(value)
132
+ rescue TypeError
133
+ klass.new(klass.deserialize(value))
134
+ end
135
+ end
96
136
  RUBY
97
137
 
98
138
  receiver.class_eval(code)
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Mangrove
5
- VERSION = "0.36.0"
5
+ VERSION = "0.37.1"
6
6
  end
@@ -40,6 +40,7 @@ module Tapioca
40
40
  inner_type = runtime_type_to_type_name(variant.instance_variable_get(:@__mangrove__enum_inner_type))
41
41
  constant_type.create_class(variant.name.gsub(/.*::/, ""), superclass_name: constant_type.fully_qualified_name) { |variant_type|
42
42
  variant_type.create_method("initialize", parameters: [create_param("inner", type: inner_type)], return_type: "void")
43
+ variant_type.create_method("serialize", parameters: [create_param("inner_serialization_methods", type: "T.nilable(T::Array[Symbol])")], return_type: "T::Hash[Symbol, T.untyped]")
43
44
  variant_type.create_method("inner", return_type: inner_type)
44
45
  variant_type.create_method("as_super", return_type: constant.name.to_s)
45
46
  variant_type.sort_nodes!
@@ -55,6 +56,8 @@ module Tapioca
55
56
  end
56
57
 
57
58
  constant_type.create_method("inner", return_type:)
59
+ constant_type.create_method("serialize", parameters: [create_param("inner_serialization_methods", type: "T.nilable(T::Array[Symbol])")], return_type: "T::Hash[Symbol, T.untyped]")
60
+ constant_type.create_method("deserialize", parameters: [create_param("hash", type: "T::Hash[T.any(Symbol, String), T.untyped]")], return_type: constant.name, class_method: true)
58
61
  constant_type.create_method("as_super", return_type: constant.name.to_s)
59
62
  constant_type.sort_nodes!
60
63
  }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mangrove
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.36.0
4
+ version: 0.37.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuma Murata
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-28 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: sorbet-runtime
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  requirements: []
138
- rubygems_version: 3.6.2
138
+ rubygems_version: 3.6.9
139
139
  specification_version: 4
140
140
  summary: Toolkit for leveraging Sorbet's type system.
141
141
  test_files: []