tapioca_dsl_compiler_store_model 0.1.3 → 0.1.5

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: 7cd663ae85d93ae01a2e4b42daa3870976b10de692ed58bed169016b051a2e42
4
- data.tar.gz: 6d39aa14b9f2510eea4bbd67d8c0fd66eb9cc27818c02cdc14443187ad25e1e4
3
+ metadata.gz: d2b1c2961c1a8654af26478b1d16ed1e92c09b2cd8b991d6ce90a7687d390114
4
+ data.tar.gz: b865368c224effbb4706c6f99a608ffe637dcb26201eaa6b335437b141d42c1f
5
5
  SHA512:
6
- metadata.gz: 9d945c99a1571c75eda1f7f1f6d01a8c82ebcda9a4c8dc3cdf677cff9daebed3d2725bacee5dc25e71f8cf85d7c2b7917a0ae124fa6191372c5ccea7484233c4
7
- data.tar.gz: 2f433c5753cd670ed30c51f49c99af4926411015167679bb0d7644f646fe3de0b0e069f3d60fd8009e6fa2a94f9c9d289010d915410051856832eae967c473a6
6
+ metadata.gz: 974ea0cee3150102c64be3e4fbf90d4ab51120ba18e896117897a5a7f0d92a6feacd17a8dc92ad4e369f40d832cf69bf57843e9e7b94e44e49efd658fcd3356a
7
+ data.tar.gz: 7622f906bff802b070219463ae85ef33deed3aebd943356fd4bc0e46aec1e22fa0051809542db6638bf062daf69ac18e811188d6ef66327be929489c174aa9e0
data/bump_version.sh CHANGED
@@ -102,7 +102,7 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
102
102
  # Update Gemfile.lock if gem references itself
103
103
  if grep -q "remote: \." Gemfile.lock 2>/dev/null; then
104
104
  echo "Updating Gemfile.lock..."
105
- bundle update tapioca_dsl_compiler_store_model
105
+ bundle install
106
106
  fi
107
107
 
108
108
  echo "Don't forget to:"
@@ -5,6 +5,8 @@ module Tapioca
5
5
  module Dsl
6
6
  module Compilers
7
7
  class StoreModel < Tapioca::Dsl::Compiler
8
+ extend T::Sig
9
+
8
10
  sig { override.returns(T::Enumerable[Module]) }
9
11
  def self.gather_constants
10
12
  return [] unless defined?(::StoreModel)
@@ -118,37 +120,42 @@ module Tapioca
118
120
  sig { params(mod: T.untyped, attribute_name: String).void }
119
121
  def create_one_of_single_methods(mod, attribute_name)
120
122
  # OneOf types are dynamically resolved, so we use generic StoreModel::Model types
121
- mod.create_method(
123
+ create_method_unless_overridden(
124
+ mod,
122
125
  attribute_name,
123
- return_type: "T.nilable(StoreModel::Model)"
126
+ return_type: "T.nilable(::StoreModel::Model)"
124
127
  )
125
128
 
126
- mod.create_method(
129
+ create_method_unless_overridden(
130
+ mod,
127
131
  "#{attribute_name}=",
128
132
  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)"
133
+ type: "T.nilable(T.any(::StoreModel::Model, T::Hash[T.untyped, T.untyped]))")],
134
+ return_type: "T.nilable(::StoreModel::Model)"
131
135
  )
132
136
 
133
- mod.create_method(
137
+ create_method_unless_overridden(
138
+ mod,
134
139
  "build_#{attribute_name}",
135
140
  parameters: [create_kw_opt_param("attributes", type: "T::Hash[T.untyped, T.untyped]", default: "{}")],
136
- return_type: "StoreModel::Model"
141
+ return_type: "::StoreModel::Model"
137
142
  )
138
143
  end
139
144
 
140
145
  sig { params(mod: T.untyped, attribute_name: String).void }
141
146
  def create_one_of_array_methods(mod, attribute_name)
142
147
  # OneOf array types are dynamically resolved
143
- array_type = "T::Array[StoreModel::Model]"
148
+ array_type = "T::Array[::StoreModel::Model]"
144
149
  nilable_array_type = "T.nilable(#{array_type})"
145
150
 
146
- mod.create_method(
151
+ create_method_unless_overridden(
152
+ mod,
147
153
  attribute_name,
148
154
  return_type: nilable_array_type
149
155
  )
150
156
 
151
- mod.create_method(
157
+ create_method_unless_overridden(
158
+ mod,
152
159
  "#{attribute_name}=",
153
160
  parameters: [create_param("value",
154
161
  type: "T.nilable(T.any(#{array_type}, " \
@@ -159,21 +166,24 @@ module Tapioca
159
166
 
160
167
  sig { params(mod: T.untyped, attribute_name: String, model_klass: T.untyped).void }
161
168
  def create_single_store_model_methods(mod, attribute_name, model_klass)
162
- return_type = model_klass.name
169
+ return_type = "::#{model_klass.name}"
163
170
 
164
- mod.create_method(
171
+ create_method_unless_overridden(
172
+ mod,
165
173
  attribute_name,
166
174
  return_type: "T.nilable(#{return_type})"
167
175
  )
168
176
 
169
- mod.create_method(
177
+ create_method_unless_overridden(
178
+ mod,
170
179
  "#{attribute_name}=",
171
180
  parameters: [create_param("value",
172
181
  type: "T.nilable(T.any(#{return_type}, T::Hash[T.untyped, T.untyped]))")],
173
182
  return_type: "T.nilable(#{return_type})"
174
183
  )
175
184
 
176
- mod.create_method(
185
+ create_method_unless_overridden(
186
+ mod,
177
187
  "build_#{attribute_name}",
178
188
  parameters: [create_kw_opt_param("attributes", type: "T::Hash[T.untyped, T.untyped]", default: "{}")],
179
189
  return_type: return_type
@@ -182,16 +192,18 @@ module Tapioca
182
192
 
183
193
  sig { params(mod: T.untyped, attribute_name: String, model_klass: T.untyped).void }
184
194
  def create_many_store_model_methods(mod, attribute_name, model_klass)
185
- return_type = model_klass.name
195
+ return_type = "::#{model_klass.name}"
186
196
  array_type = "T::Array[#{return_type}]"
187
197
  nilable_array_type = "T.nilable(#{array_type})"
188
198
 
189
- mod.create_method(
199
+ create_method_unless_overridden(
200
+ mod,
190
201
  attribute_name,
191
202
  return_type: nilable_array_type
192
203
  )
193
204
 
194
- mod.create_method(
205
+ create_method_unless_overridden(
206
+ mod,
195
207
  "#{attribute_name}=",
196
208
  parameters: [create_param("value",
197
209
  type: "T.nilable(T.any(#{array_type}, " \
@@ -199,6 +211,26 @@ module Tapioca
199
211
  return_type: nilable_array_type
200
212
  )
201
213
  end
214
+
215
+ # Skip sig emission when the user has overridden the method (e.g. via
216
+ # `delegate`), as the arity mismatch causes Sorbet error 4010.
217
+ sig { params(mod: T.untyped, name: T.any(String, Symbol), kwargs: T.untyped).void }
218
+ def create_method_unless_overridden(mod, name, **kwargs) # rubocop:disable Style/ArgumentsForwarding
219
+ return if user_overridden?(name)
220
+
221
+ mod.create_method(name.to_s, **kwargs) # rubocop:disable Style/ArgumentsForwarding
222
+ end
223
+
224
+ sig { params(method_name: T.any(String, Symbol)).returns(T::Boolean) }
225
+ def user_overridden?(method_name)
226
+ name = method_name.to_sym
227
+ return false unless constant.method_defined?(name) ||
228
+ constant.private_method_defined?(name)
229
+
230
+ constant.instance_method(name).owner == constant
231
+ rescue NameError
232
+ false
233
+ end
202
234
  end
203
235
  end
204
236
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TapiocaDslCompilerStoreModel
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.5"
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.3
4
+ version: 0.1.5
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-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: store_model