tapioca_dsl_compiler_store_model 0.1.2 → 0.1.4

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: 8695b3c4b636d2021926bf0c9c2e24214f187a51932082f2d707de39c77b7c1c
4
- data.tar.gz: 88a4e945bfd61b5b18e4abec1a4fa985b3e8417b6f37d333d56ae7dd77323f22
3
+ metadata.gz: 9ca8704a96779f59a3ee54b8c42f056131e3eceb6268aeab78535498e54f7901
4
+ data.tar.gz: 5d6228ccffd7c51a8990bac5ce048b0d4deaed74b40d5c8d0a0de4d273cf1b45
5
5
  SHA512:
6
- metadata.gz: 388d30a2d63a7300c8c10f6b3a8c1d84d8f32fdf699e937409e173f881fa06057f8be52904625c292f7081eb67d3ff7ed58d0eceff6708e3a8d7f7eb2ef70a1b
7
- data.tar.gz: 8eeab3c0cc6465d334556892c77bd353cda98a032fa5e42650af3cb553ced879a4d62b1fc46b76f37bad29997b5abc872d900bfd746a1ff66006a26285429be8
6
+ metadata.gz: 19c5aa8f9e4fb258d6f1587596c0b45cc97e4a6529477cf01680248c2aaadf23e19610c39634d596afe57473db49b9e5fa5f67da4a9e419b441b13c5574b65c8
7
+ data.tar.gz: caf133e5473fc4e32a39aeaa8c49de518df0b88db1719fe60e4a050a37e2d806fbb3e11680c3b8314cae9e4751be5fc25cf89a25b515307ff952daeb8ac92869
@@ -118,59 +118,70 @@ module Tapioca
118
118
  sig { params(mod: T.untyped, attribute_name: String).void }
119
119
  def create_one_of_single_methods(mod, attribute_name)
120
120
  # OneOf types are dynamically resolved, so we use generic StoreModel::Model types
121
- mod.create_method(
121
+ create_method_unless_overridden(
122
+ mod,
122
123
  attribute_name,
123
- return_type: "T.nilable(StoreModel::Model)"
124
+ return_type: "T.nilable(::StoreModel::Model)"
124
125
  )
125
126
 
126
- mod.create_method(
127
+ create_method_unless_overridden(
128
+ mod,
127
129
  "#{attribute_name}=",
128
130
  parameters: [create_param("value",
129
- type: "T.nilable(T.any(StoreModel::Model, T::Hash[T.untyped, T.untyped]))")],
130
- return_type: "T.nilable(StoreModel::Model)"
131
+ type: "T.nilable(T.any(::StoreModel::Model, T::Hash[T.untyped, T.untyped]))")],
132
+ return_type: "T.nilable(::StoreModel::Model)"
131
133
  )
132
134
 
133
- mod.create_method(
135
+ create_method_unless_overridden(
136
+ mod,
134
137
  "build_#{attribute_name}",
135
138
  parameters: [create_kw_opt_param("attributes", type: "T::Hash[T.untyped, T.untyped]", default: "{}")],
136
- return_type: "StoreModel::Model"
139
+ return_type: "::StoreModel::Model"
137
140
  )
138
141
  end
139
142
 
140
143
  sig { params(mod: T.untyped, attribute_name: String).void }
141
144
  def create_one_of_array_methods(mod, attribute_name)
142
145
  # OneOf array types are dynamically resolved
143
- mod.create_method(
146
+ array_type = "T::Array[::StoreModel::Model]"
147
+ nilable_array_type = "T.nilable(#{array_type})"
148
+
149
+ create_method_unless_overridden(
150
+ mod,
144
151
  attribute_name,
145
- return_type: "T::Array[StoreModel::Model]"
152
+ return_type: nilable_array_type
146
153
  )
147
154
 
148
- mod.create_method(
155
+ create_method_unless_overridden(
156
+ mod,
149
157
  "#{attribute_name}=",
150
158
  parameters: [create_param("value",
151
- type: "T.nilable(T.any(T::Array[StoreModel::Model], " \
159
+ type: "T.nilable(T.any(#{array_type}, " \
152
160
  "T::Array[T::Hash[T.untyped, T.untyped]]))")],
153
- return_type: "T::Array[StoreModel::Model]"
161
+ return_type: nilable_array_type
154
162
  )
155
163
  end
156
164
 
157
165
  sig { params(mod: T.untyped, attribute_name: String, model_klass: T.untyped).void }
158
166
  def create_single_store_model_methods(mod, attribute_name, model_klass)
159
- return_type = model_klass.name
167
+ return_type = "::#{model_klass.name}"
160
168
 
161
- mod.create_method(
169
+ create_method_unless_overridden(
170
+ mod,
162
171
  attribute_name,
163
172
  return_type: "T.nilable(#{return_type})"
164
173
  )
165
174
 
166
- mod.create_method(
175
+ create_method_unless_overridden(
176
+ mod,
167
177
  "#{attribute_name}=",
168
178
  parameters: [create_param("value",
169
179
  type: "T.nilable(T.any(#{return_type}, T::Hash[T.untyped, T.untyped]))")],
170
180
  return_type: "T.nilable(#{return_type})"
171
181
  )
172
182
 
173
- mod.create_method(
183
+ create_method_unless_overridden(
184
+ mod,
174
185
  "build_#{attribute_name}",
175
186
  parameters: [create_kw_opt_param("attributes", type: "T::Hash[T.untyped, T.untyped]", default: "{}")],
176
187
  return_type: return_type
@@ -179,22 +190,45 @@ module Tapioca
179
190
 
180
191
  sig { params(mod: T.untyped, attribute_name: String, model_klass: T.untyped).void }
181
192
  def create_many_store_model_methods(mod, attribute_name, model_klass)
182
- return_type = model_klass.name
193
+ return_type = "::#{model_klass.name}"
183
194
  array_type = "T::Array[#{return_type}]"
195
+ nilable_array_type = "T.nilable(#{array_type})"
184
196
 
185
- mod.create_method(
197
+ create_method_unless_overridden(
198
+ mod,
186
199
  attribute_name,
187
- return_type: array_type
200
+ return_type: nilable_array_type
188
201
  )
189
202
 
190
- mod.create_method(
203
+ create_method_unless_overridden(
204
+ mod,
191
205
  "#{attribute_name}=",
192
206
  parameters: [create_param("value",
193
207
  type: "T.nilable(T.any(#{array_type}, " \
194
208
  "T::Array[T::Hash[T.untyped, T.untyped]]))")],
195
- return_type: array_type
209
+ return_type: nilable_array_type
196
210
  )
197
211
  end
212
+
213
+ # Skip sig emission when the user has overridden the method (e.g. via
214
+ # `delegate`), as the arity mismatch causes Sorbet error 4010.
215
+ sig { params(mod: T.untyped, name: T.any(String, Symbol), kwargs: T.untyped).void }
216
+ def create_method_unless_overridden(mod, name, **kwargs) # rubocop:disable Style/ArgumentsForwarding
217
+ return if user_overridden?(name)
218
+
219
+ mod.create_method(name.to_s, **kwargs) # rubocop:disable Style/ArgumentsForwarding
220
+ end
221
+
222
+ sig { params(method_name: T.any(String, Symbol)).returns(T::Boolean) }
223
+ def user_overridden?(method_name)
224
+ name = method_name.to_sym
225
+ return false unless constant.method_defined?(name) ||
226
+ constant.private_method_defined?(name)
227
+
228
+ constant.instance_method(name).owner == constant
229
+ rescue NameError
230
+ false
231
+ end
198
232
  end
199
233
  end
200
234
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TapiocaDslCompilerStoreModel
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapioca_dsl_compiler_store_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - speria-jp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-29 00:00:00.000000000 Z
11
+ date: 2026-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: store_model