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 +4 -4
- data/bump_version.sh +1 -1
- data/lib/tapioca/dsl/compilers/store_model.rb +49 -17
- data/lib/tapioca_dsl_compiler_store_model/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d2b1c2961c1a8654af26478b1d16ed1e92c09b2cd8b991d6ce90a7687d390114
|
|
4
|
+
data.tar.gz: b865368c224effbb4706c6f99a608ffe637dcb26201eaa6b335437b141d42c1f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
151
|
+
create_method_unless_overridden(
|
|
152
|
+
mod,
|
|
147
153
|
attribute_name,
|
|
148
154
|
return_type: nilable_array_type
|
|
149
155
|
)
|
|
150
156
|
|
|
151
|
-
|
|
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
|
-
|
|
171
|
+
create_method_unless_overridden(
|
|
172
|
+
mod,
|
|
165
173
|
attribute_name,
|
|
166
174
|
return_type: "T.nilable(#{return_type})"
|
|
167
175
|
)
|
|
168
176
|
|
|
169
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
+
create_method_unless_overridden(
|
|
200
|
+
mod,
|
|
190
201
|
attribute_name,
|
|
191
202
|
return_type: nilable_array_type
|
|
192
203
|
)
|
|
193
204
|
|
|
194
|
-
|
|
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
|
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.
|
|
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:
|
|
11
|
+
date: 2026-08-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: store_model
|