Skip to content

Commit d32320a

Browse files
committedFeb 7, 2025·
🐛 Fix missing Data.define for new classes
Since its only these two classes, I manually wrote a subset of the code that would be generated by `Data.define` and inherited from `Data`. The `AppendUIDData` and `CopyUIDData` class definitions are unchanged—only the superclass definition is different.
1 parent 3c592fc commit d32320a

File tree

1 file changed

+84
-2
lines changed

1 file changed

+84
-2
lines changed
 

‎lib/net/imap/uidplus_data.rb

+84-2
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,44 @@ def uid_mapping
6464
end
6565
end
6666

67+
# This replaces the `Data.define` polyfill that's used by net-imap 0.5.
68+
class Data_define__uidvalidity___assigned_uids_ # :no-doc:
69+
attr_reader :uidvalidity, :assigned_uids
70+
71+
def self.[](...) new(...) end
72+
def self.new(uidvalidity = (args = false; nil),
73+
assigned_uids = nil,
74+
**kwargs)
75+
if kwargs.empty?
76+
super(uidvalidity: uidvalidity, assigned_uids: assigned_uids)
77+
elsif !args
78+
super
79+
else
80+
raise ArgumentError, "sent both positional and keyword args"
81+
end
82+
end
83+
84+
def ==(other)
85+
self.class == other.class &&
86+
self.uidvalidity == other.uidvalidity &&
87+
self.assigned_uids == other.assigned_uids
88+
end
89+
90+
def eql?(other)
91+
self.class.eql?(other.class) &&
92+
self.uidvalidity.eql?(other.uidvalidity) &&
93+
self.assigned_uids.eql?(other.assigned_uids)
94+
end
95+
96+
def hash; [self.class, uidvalidity, assigned_uids].hash end
97+
98+
def initialize(uidvalidity:, assigned_uids:)
99+
@uidvalidity = uidvalidity
100+
@assigned_uids = assigned_uids
101+
freeze
102+
end
103+
end
104+
67105
# >>>
68106
# *NOTE:* <em>AppendUIDData will replace UIDPlusData for +APPENDUID+ in the
69107
# +0.6.0+ release.</em> To use AppendUIDData before +0.6.0+, set
@@ -80,7 +118,7 @@ def uid_mapping
80118
# == Required capability
81119
# Requires either +UIDPLUS+ [RFC4315[https://www.rfc-editor.org/rfc/rfc4315]]
82120
# or +IMAP4rev2+ capability.
83-
class AppendUIDData < Data.define(:uidvalidity, :assigned_uids)
121+
class AppendUIDData < Data_define__uidvalidity___assigned_uids_
84122
def initialize(uidvalidity:, assigned_uids:)
85123
uidvalidity = Integer(uidvalidity)
86124
assigned_uids = SequenceSet[assigned_uids]
@@ -108,6 +146,50 @@ def size
108146
end
109147
end
110148

149+
# This replaces the `Data.define` polyfill that's used by net-imap 0.5.
150+
class Data_define__uidvalidity___source_uids___assigned_uids_ # :no-doc:
151+
attr_reader :uidvalidity, :source_uids, :assigned_uids
152+
153+
def self.[](...) new(...) end
154+
def self.new(uidvalidity = (args = false; nil),
155+
source_uids = nil,
156+
assigned_uids = nil,
157+
**kwargs)
158+
if kwargs.empty?
159+
super(uidvalidity: uidvalidity,
160+
source_uids: source_uids,
161+
assigned_uids: assigned_uids)
162+
elsif !args
163+
super(**kwargs)
164+
else
165+
raise ArgumentError, "sent both positional and keyword args"
166+
end
167+
end
168+
169+
def initialize(uidvalidity:, source_uids:, assigned_uids:)
170+
@uidvalidity = uidvalidity
171+
@source_uids = source_uids
172+
@assigned_uids = assigned_uids
173+
freeze
174+
end
175+
176+
def ==(other)
177+
self.class == other.class &&
178+
self.uidvalidity == other.uidvalidity &&
179+
self.source_uids == other.source_uids
180+
self.assigned_uids == other.assigned_uids
181+
end
182+
183+
def eql?(other)
184+
self.class.eql?(other.class) &&
185+
self.uidvalidity.eql?(other.uidvalidity) &&
186+
self.source_uids.eql?(other.source_uids)
187+
self.assigned_uids.eql?(other.assigned_uids)
188+
end
189+
190+
def hash; [self.class, uidvalidity, source_uids, assigned_uids].hash end
191+
end
192+
111193
# >>>
112194
# *NOTE:* <em>CopyUIDData will replace UIDPlusData for +COPYUID+ in the
113195
# +0.6.0+ release.</em> To use CopyUIDData before +0.6.0+, set
@@ -134,7 +216,7 @@ def size
134216
# == Required capability
135217
# Requires either +UIDPLUS+ [RFC4315[https://www.rfc-editor.org/rfc/rfc4315]]
136218
# or +IMAP4rev2+ capability.
137-
class CopyUIDData < Data.define(:uidvalidity, :source_uids, :assigned_uids)
219+
class CopyUIDData < Data_define__uidvalidity___source_uids___assigned_uids_
138220
def initialize(uidvalidity:, source_uids:, assigned_uids:)
139221
uidvalidity = Integer(uidvalidity)
140222
source_uids = SequenceSet[source_uids]

0 commit comments

Comments
 (0)
Please sign in to comment.