tapioca 0.11.13 → 0.11.14
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/lib/tapioca/dsl/compiler.rb +1 -1
- data/lib/tapioca/dsl/compilers/active_job.rb +29 -4
- data/lib/tapioca/dsl/compilers/active_record_fixtures.rb +6 -1
- data/lib/tapioca/dsl/compilers/graphql_input_object.rb +1 -1
- data/lib/tapioca/dsl/compilers/graphql_mutation.rb +9 -4
- data/lib/tapioca/dsl/helpers/graphql_type_helper.rb +19 -2
- data/lib/tapioca/dsl/pipeline.rb +7 -3
- data/lib/tapioca/gem/listeners/methods.rb +1 -2
- data/lib/tapioca/gem/listeners/sorbet_signatures.rb +3 -2
- data/lib/tapioca/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: 52388d4c8afe40a2b6807e54bf1dd09701cb016ca1fed7ce5d3a691c3f93e0e5
|
4
|
+
data.tar.gz: 18550aa93626f63257b387154585dc2ae9e74c5aa17c7d4e2b82702bf5ce5b2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0be5c5d8108519bbda67d2498ff032273ad855a45c464a5a0acf0780412e7f4d3ee706322ef287fd2882ee0083f3c3fe1ab67611a16a6f45f5aa5a7aeb1a709
|
7
|
+
data.tar.gz: 6a87ab2319905c976cfb0b6a004c12d613a9200269268c6c452f8f7ba9175a1b7fd29c5d32de945a04614aff1de037463ad3c0fd090f883770a7f72d7f2f1476
|
data/lib/tapioca/dsl/compiler.rb
CHANGED
@@ -36,7 +36,7 @@ module Tapioca
|
|
36
36
|
sig { returns(T::Set[Module]) }
|
37
37
|
def processable_constants
|
38
38
|
@processable_constants ||= T.let(
|
39
|
-
T::Set[Module].new(gather_constants)
|
39
|
+
T::Set[Module].new.compare_by_identity.merge(gather_constants),
|
40
40
|
T.nilable(T::Set[Module]),
|
41
41
|
)
|
42
42
|
end
|
@@ -30,8 +30,13 @@ module Tapioca
|
|
30
30
|
# # notify_user_job.rbi
|
31
31
|
# # typed: true
|
32
32
|
# class NotifyUserJob
|
33
|
-
# sig
|
34
|
-
#
|
33
|
+
# sig do
|
34
|
+
# params(
|
35
|
+
# user: User,
|
36
|
+
# block: T.nilable(T.proc.params(job: NotifyUserJob).void),
|
37
|
+
# ).returns(T.any(NotifyUserJob, FalseClass))
|
38
|
+
# end
|
39
|
+
# def self.perform_later(user, &block); end
|
35
40
|
#
|
36
41
|
# sig { params(user: User).returns(Mail) }
|
37
42
|
# def self.perform_now(user); end
|
@@ -48,13 +53,14 @@ module Tapioca
|
|
48
53
|
|
49
54
|
root.create_path(constant) do |job|
|
50
55
|
method = constant.instance_method(:perform)
|
56
|
+
constant_name = name_of(constant)
|
51
57
|
parameters = compile_method_parameters_to_rbi(method)
|
52
58
|
return_type = compile_method_return_type_to_rbi(method)
|
53
59
|
|
54
60
|
job.create_method(
|
55
61
|
"perform_later",
|
56
|
-
parameters: parameters,
|
57
|
-
return_type: "T.any(#{
|
62
|
+
parameters: perform_later_parameters(parameters, constant_name),
|
63
|
+
return_type: "T.any(#{constant_name}, FalseClass)",
|
58
64
|
class_method: true,
|
59
65
|
)
|
60
66
|
|
@@ -67,6 +73,25 @@ module Tapioca
|
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
76
|
+
private
|
77
|
+
|
78
|
+
sig do
|
79
|
+
params(
|
80
|
+
parameters: T::Array[RBI::TypedParam],
|
81
|
+
constant_name: T.nilable(String),
|
82
|
+
).returns(T::Array[RBI::TypedParam])
|
83
|
+
end
|
84
|
+
def perform_later_parameters(parameters, constant_name)
|
85
|
+
if ::Gem::Requirement.new(">= 7.0").satisfied_by?(::ActiveJob.gem_version)
|
86
|
+
parameters + [create_block_param(
|
87
|
+
"block",
|
88
|
+
type: "T.nilable(T.proc.params(job: #{constant_name}).void)",
|
89
|
+
)]
|
90
|
+
else
|
91
|
+
parameters
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
70
95
|
class << self
|
71
96
|
extend T::Sig
|
72
97
|
|
@@ -76,7 +76,12 @@ module Tapioca
|
|
76
76
|
Class.new do
|
77
77
|
T.unsafe(self).include(ActiveRecord::TestFixtures)
|
78
78
|
|
79
|
-
|
79
|
+
if respond_to?(:fixture_paths=)
|
80
|
+
T.unsafe(self).fixture_paths = [Rails.root.join("test", "fixtures")]
|
81
|
+
else
|
82
|
+
T.unsafe(self).fixture_path = Rails.root.join("test", "fixtures")
|
83
|
+
end
|
84
|
+
|
80
85
|
# https://github.com/rails/rails/blob/7c70791470fc517deb7c640bead9f1b47efb5539/activerecord/lib/active_record/test_fixtures.rb#L46
|
81
86
|
singleton_class.define_method(:file_fixture_path) do
|
82
87
|
Rails.root.join("test", "fixtures", "files")
|
@@ -55,7 +55,7 @@ module Tapioca
|
|
55
55
|
root.create_path(constant) do |input_object|
|
56
56
|
arguments.each do |argument|
|
57
57
|
name = argument.keyword.to_s
|
58
|
-
input_object.create_method(name, return_type: Helpers::GraphqlTypeHelper.type_for(argument))
|
58
|
+
input_object.create_method(name, return_type: Helpers::GraphqlTypeHelper.type_for(argument, constant))
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -59,7 +59,7 @@ module Tapioca
|
|
59
59
|
params = compile_method_parameters_to_rbi(method_def).map do |param|
|
60
60
|
name = param.param.name
|
61
61
|
argument = arguments_by_name.fetch(name, nil)
|
62
|
-
create_typed_param(param.param, argument_type(argument))
|
62
|
+
create_typed_param(param.param, argument_type(argument, constant))
|
63
63
|
end
|
64
64
|
|
65
65
|
root.create_path(constant) do |mutation|
|
@@ -67,11 +67,16 @@ module Tapioca
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
sig
|
71
|
-
|
70
|
+
sig do
|
71
|
+
params(
|
72
|
+
argument: T.nilable(GraphQL::Schema::Argument),
|
73
|
+
constant: T.class_of(GraphQL::Schema::Mutation),
|
74
|
+
).returns(String)
|
75
|
+
end
|
76
|
+
def argument_type(argument, constant)
|
72
77
|
return "T.untyped" unless argument
|
73
78
|
|
74
|
-
Helpers::GraphqlTypeHelper.type_for(argument)
|
79
|
+
Helpers::GraphqlTypeHelper.type_for(argument, constant)
|
75
80
|
end
|
76
81
|
|
77
82
|
class << self
|
@@ -9,8 +9,13 @@ module Tapioca
|
|
9
9
|
|
10
10
|
extend T::Sig
|
11
11
|
|
12
|
-
sig
|
13
|
-
|
12
|
+
sig do
|
13
|
+
params(
|
14
|
+
argument: GraphQL::Schema::Argument,
|
15
|
+
constant: T.any(T.class_of(GraphQL::Schema::Mutation), T.class_of(GraphQL::Schema::InputObject)),
|
16
|
+
).returns(String)
|
17
|
+
end
|
18
|
+
def type_for(argument, constant)
|
14
19
|
type = if argument.loads
|
15
20
|
loads_type = ::GraphQL::Schema::Wrapper.new(argument.loads)
|
16
21
|
loads_type = loads_type.to_list_type if argument.type.list?
|
@@ -60,6 +65,17 @@ module Tapioca
|
|
60
65
|
"T.untyped"
|
61
66
|
end
|
62
67
|
|
68
|
+
if argument.prepare.is_a?(Symbol) || argument.prepare.is_a?(String)
|
69
|
+
if constant.respond_to?(argument.prepare)
|
70
|
+
prepare_method = constant.method(argument.prepare)
|
71
|
+
prepare_signature = Runtime::Reflection.signature_of(prepare_method)
|
72
|
+
|
73
|
+
if valid_return_type?(prepare_signature&.return_type)
|
74
|
+
parsed_type = prepare_signature.return_type&.to_s
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
63
79
|
if type.list?
|
64
80
|
parsed_type = "T::Array[#{parsed_type}]"
|
65
81
|
end
|
@@ -77,6 +93,7 @@ module Tapioca
|
|
77
93
|
def type_for_constant(constant)
|
78
94
|
if constant.instance_methods.include?(:prepare)
|
79
95
|
prepare_method = constant.instance_method(:prepare)
|
96
|
+
|
80
97
|
prepare_signature = Runtime::Reflection.signature_of(prepare_method)
|
81
98
|
|
82
99
|
return prepare_signature.return_type&.to_s if valid_return_type?(prepare_signature&.return_type)
|
data/lib/tapioca/dsl/pipeline.rb
CHANGED
@@ -130,7 +130,10 @@ module Tapioca
|
|
130
130
|
|
131
131
|
sig { params(requested_constants: T::Array[Module], requested_paths: T::Array[Pathname]).returns(T::Set[Module]) }
|
132
132
|
def gather_constants(requested_constants, requested_paths)
|
133
|
-
constants =
|
133
|
+
constants = Set.new.compare_by_identity
|
134
|
+
active_compilers.each do |compiler|
|
135
|
+
constants.merge(compiler.processable_constants)
|
136
|
+
end
|
134
137
|
constants = filter_anonymous_and_reloaded_constants(constants)
|
135
138
|
|
136
139
|
constants &= requested_constants unless requested_constants.empty? && requested_paths.empty?
|
@@ -158,11 +161,12 @@ module Tapioca
|
|
158
161
|
|
159
162
|
# Look up all the constants back from their names. The resulting constant set will be the
|
160
163
|
# set of constants that are actually in memory with those names.
|
161
|
-
constants_by_name
|
164
|
+
filtered_constants = constants_by_name
|
162
165
|
.keys
|
163
166
|
.map { |name| T.cast(Runtime::Reflection.constantize(name), Module) }
|
164
167
|
.select { |mod| Runtime::Reflection.constant_defined?(mod) }
|
165
|
-
|
168
|
+
|
169
|
+
Set.new.compare_by_identity.merge(filtered_constants)
|
166
170
|
end
|
167
171
|
|
168
172
|
sig { params(constant: Module).returns(T.nilable(RBI::File)) }
|
@@ -97,12 +97,11 @@ module Tapioca
|
|
97
97
|
# method and the parameter is required and there is a single
|
98
98
|
# parameter and the signature also defines a single parameter and
|
99
99
|
# the name of the method ends with a = character.
|
100
|
-
writer_method_with_sig =
|
100
|
+
writer_method_with_sig =
|
101
101
|
signature && type == :req &&
|
102
102
|
parameters.size == 1 &&
|
103
103
|
signature.arg_types.size == 1 &&
|
104
104
|
method_name[-1] == "="
|
105
|
-
)
|
106
105
|
|
107
106
|
if writer_method_with_sig
|
108
107
|
method_name.delete_suffix("=")
|
@@ -67,8 +67,9 @@ module Tapioca
|
|
67
67
|
sig { params(signature: T.untyped).returns(T::Boolean) }
|
68
68
|
def signature_final?(signature)
|
69
69
|
modules_with_final = T::Private::Methods.instance_variable_get(:@modules_with_final)
|
70
|
-
|
71
|
-
|
70
|
+
# In https://github.com/sorbet/sorbet/pull/7531, Sorbet changed internal hashes to be compared by identity,
|
71
|
+
# starting on version 0.5.11155
|
72
|
+
final_methods = modules_with_final[signature.owner] || modules_with_final[signature.owner.object_id]
|
72
73
|
return false unless final_methods
|
73
74
|
|
74
75
|
final_methods.include?(signature.method_name)
|
data/lib/tapioca/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tapioca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ufuk Kayserilioglu
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2023-12-
|
14
|
+
date: 2023-12-18 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|