tapioca 0.17.8 → 0.17.9
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/commands/abstract_gem.rb +1 -1
- data/lib/tapioca/commands/command.rb +1 -1
- data/lib/tapioca/dsl/compilers/active_model_secure_password.rb +6 -0
- data/lib/tapioca/dsl/compilers/active_record_enum.rb +1 -1
- data/lib/tapioca/dsl/compilers/active_record_relations.rb +116 -53
- data/lib/tapioca/dsl/compilers/protobuf.rb +5 -1
- data/lib/tapioca/dsl/helpers/active_record_column_type_helper.rb +4 -2
- data/lib/tapioca/helpers/test/content.rb +1 -1
- data/lib/tapioca/internal.rb +1 -0
- data/lib/tapioca/loaders/gem.rb +1 -1
- data/lib/tapioca/runtime/helpers.rb +40 -0
- data/lib/tapioca/runtime/trackers/autoload.rb +1 -1
- data/lib/tapioca/runtime/trackers/required_ancestor.rb +1 -1
- data/lib/tapioca/sorbet_ext/generic_name_patch.rb +3 -3
- data/lib/tapioca/sorbet_ext/name_patch.rb +3 -14
- data/lib/tapioca/version.rb +1 -1
- data/lib/tapioca.rb +0 -36
- metadata +20 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3668f1f1916b284b762a3ed370a2f658b2edd25d1c0c44be37fd7ca321be9200
|
|
4
|
+
data.tar.gz: ce3540ff4aaebab9b9e506c4192ffdee93ef17c09b2399fb114d2b735fbf0b0e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 648c2bd8e7ef7f14c0bce4736ea47636c043a5ee1e529e676569c85f398b1380838631fab7146439162491523446ac40c112fb8247ca55402947d372b235f5c7
|
|
7
|
+
data.tar.gz: 11370dc255bf5e5508139480e4e9def8a51f145de3574c1f4dd17ad72572f1b64b30d0d876244426542b35d1e639d18662719f47137049d5aaac1fb6bdc7d5c6
|
|
@@ -95,6 +95,12 @@ module Tapioca
|
|
|
95
95
|
# @override
|
|
96
96
|
#: -> T::Enumerable[Module]
|
|
97
97
|
def gather_constants
|
|
98
|
+
# In some versions of Rails 8.1, `ActiveModel::SecurePassword` uses `Numeric#minutes`
|
|
99
|
+
# which isn't explicitly required in the gem, and it might not be loaded already.
|
|
100
|
+
# We might need to require it before referencing the constant to avoid a NoMethodError when
|
|
101
|
+
# the constant is autoloaded.
|
|
102
|
+
require "active_support/core_ext/numeric/time" unless defined?(1.minutes)
|
|
103
|
+
|
|
98
104
|
# This selects all classes that are `ActiveModel::SecurePassword::ClassMethods === klass`.
|
|
99
105
|
# In other words, we select all classes that have `ActiveModel::SecurePassword::ClassMethods`
|
|
100
106
|
# as an ancestor of its singleton class, i.e. all classes that have extended the
|
|
@@ -229,15 +229,7 @@ module Tapioca
|
|
|
229
229
|
use_ranges: ["T.untyped", "nil"],
|
|
230
230
|
} #: Hash[Symbol, [String, String]]
|
|
231
231
|
CALCULATION_METHODS = ActiveRecord::Calculations.instance_methods(false) #: Array[Symbol]
|
|
232
|
-
|
|
233
|
-
FIND_OR_CREATE_METHODS = [
|
|
234
|
-
:find_or_create_by,
|
|
235
|
-
:find_or_create_by!,
|
|
236
|
-
:find_or_initialize_by,
|
|
237
|
-
:create_or_find_by,
|
|
238
|
-
:create_or_find_by!,
|
|
239
|
-
] #: Array[Symbol]
|
|
240
|
-
BUILDER_METHODS = [:new, :create, :create!, :build] #: Array[Symbol]
|
|
232
|
+
RELATION_METHODS = ActiveRecord::Relation.instance_methods(false) #: Array[Symbol]
|
|
241
233
|
TO_ARRAY_METHODS = [:to_ary, :to_a] #: Array[Symbol]
|
|
242
234
|
|
|
243
235
|
private
|
|
@@ -907,61 +899,132 @@ module Tapioca
|
|
|
907
899
|
end
|
|
908
900
|
end
|
|
909
901
|
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
902
|
+
RELATION_METHODS.each do |method_name|
|
|
903
|
+
case method_name
|
|
904
|
+
when :any?, :many?, :none?, :one? # enumerable query methods
|
|
905
|
+
block_type = "T.nilable(T.proc.params(record: #{constant_name}).returns(T.untyped))"
|
|
906
|
+
create_common_method(
|
|
907
|
+
method_name,
|
|
908
|
+
parameters: [
|
|
909
|
+
create_block_param("block", type: block_type),
|
|
910
|
+
],
|
|
911
|
+
return_type: "T::Boolean",
|
|
912
|
+
)
|
|
913
|
+
when :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, :create_or_find_by, :create_or_find_by! # find or create methods
|
|
914
|
+
common_relation_methods_module.create_method(method_name.to_s) do |method|
|
|
915
|
+
method.add_param("attributes")
|
|
916
|
+
method.add_block_param("block")
|
|
920
917
|
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
918
|
+
# `T.untyped` matches `T::Array[T.untyped]` so the array signature
|
|
919
|
+
# must be defined first for Sorbet to pick it, if valid.
|
|
920
|
+
method.add_sig do |sig|
|
|
921
|
+
sig.add_param("attributes", "T::Array[T.untyped]")
|
|
922
|
+
sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
|
|
923
|
+
sig.return_type = "T::Array[#{constant_name}]"
|
|
924
|
+
end
|
|
925
925
|
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
sig.return_type = "T::Array[#{constant_name}]"
|
|
926
|
+
method.add_sig do |sig|
|
|
927
|
+
sig.add_param("attributes", "T.untyped")
|
|
928
|
+
sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
|
|
929
|
+
sig.return_type = constant_name
|
|
930
|
+
end
|
|
932
931
|
end
|
|
932
|
+
when :new, :create, :create!, :build # builder methods
|
|
933
|
+
common_relation_methods_module.create_method(method_name.to_s) do |method|
|
|
934
|
+
method.add_opt_param("attributes", "nil")
|
|
935
|
+
method.add_block_param("block")
|
|
933
936
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
end
|
|
939
|
-
end
|
|
940
|
-
end
|
|
937
|
+
method.add_sig do |sig|
|
|
938
|
+
sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
|
|
939
|
+
sig.return_type = constant_name
|
|
940
|
+
end
|
|
941
941
|
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
942
|
+
# `T.untyped` matches `T::Array[T.untyped]` so the array signature
|
|
943
|
+
# must be defined first for Sorbet to pick it, if valid.
|
|
944
|
+
method.add_sig do |sig|
|
|
945
|
+
sig.add_param("attributes", "T::Array[T.untyped]")
|
|
946
|
+
sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
|
|
947
|
+
sig.return_type = "T::Array[#{constant_name}]"
|
|
948
|
+
end
|
|
946
949
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
+
method.add_sig do |sig|
|
|
951
|
+
sig.add_param("attributes", "T.untyped")
|
|
952
|
+
sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
|
|
953
|
+
sig.return_type = constant_name
|
|
954
|
+
end
|
|
950
955
|
end
|
|
956
|
+
when :insert_all, :insert_all!, :upsert_all # insert all methods
|
|
957
|
+
returning_type = "T.nilable(T.any(T::Array[Symbol], FalseClass))"
|
|
958
|
+
unique_by_type = "T.nilable(T.any(T::Array[Symbol], Symbol))"
|
|
951
959
|
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
960
|
+
parameters = [
|
|
961
|
+
create_param("attributes", type: "T::Array[Hash]"),
|
|
962
|
+
create_kw_opt_param("returning", type: returning_type, default: "nil"),
|
|
963
|
+
]
|
|
964
|
+
|
|
965
|
+
# Bang methods don't have the `unique_by` parameter
|
|
966
|
+
unless bang_method?(method_name)
|
|
967
|
+
parameters << create_kw_opt_param("unique_by", type: unique_by_type, default: "nil")
|
|
958
968
|
end
|
|
959
969
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
970
|
+
common_relation_methods_module.create_method(
|
|
971
|
+
method_name.to_s,
|
|
972
|
+
parameters: parameters,
|
|
973
|
+
return_type: "ActiveRecord::Result",
|
|
974
|
+
)
|
|
975
|
+
when :insert, :insert!, :upsert # insert methods
|
|
976
|
+
returning_type = "T.nilable(T.any(T::Array[Symbol], FalseClass))"
|
|
977
|
+
unique_by_type = "T.nilable(T.any(T::Array[Symbol], Symbol))"
|
|
978
|
+
|
|
979
|
+
parameters = [
|
|
980
|
+
create_param("attributes", type: "Hash"),
|
|
981
|
+
create_kw_opt_param("returning", type: returning_type, default: "nil"),
|
|
982
|
+
]
|
|
983
|
+
|
|
984
|
+
# Bang methods don't have the `unique_by` parameter
|
|
985
|
+
unless bang_method?(method_name)
|
|
986
|
+
parameters << create_kw_opt_param("unique_by", type: unique_by_type, default: "nil")
|
|
964
987
|
end
|
|
988
|
+
|
|
989
|
+
common_relation_methods_module.create_method(
|
|
990
|
+
method_name.to_s,
|
|
991
|
+
parameters: parameters,
|
|
992
|
+
return_type: "ActiveRecord::Result",
|
|
993
|
+
)
|
|
994
|
+
when :delete, :destroy
|
|
995
|
+
# For these cases, it is valid to pass the above kind of things, but also:
|
|
996
|
+
# - a model identifier, which can be:
|
|
997
|
+
# - a numeric id, thus `Integer`
|
|
998
|
+
# - a string id, thus `String`
|
|
999
|
+
# - a collection of identifiers
|
|
1000
|
+
# - a collection of identifiers, thus `T::Enumerable[T.any(Integer, String)]`
|
|
1001
|
+
# which, coupled with the above case, gives us:
|
|
1002
|
+
# `T.any(Model, Integer, String, T::Enumerable[T.any(Model, Integer, String, T::Enumerable[Model])])`
|
|
1003
|
+
|
|
1004
|
+
common_relation_methods_module.create_method(
|
|
1005
|
+
method_name.to_s,
|
|
1006
|
+
parameters: [
|
|
1007
|
+
create_rest_param(
|
|
1008
|
+
"records",
|
|
1009
|
+
type: "T.any(#{constant_name}, Integer, String" \
|
|
1010
|
+
", T::Enumerable[T.any(#{constant_name}, Integer, String, T::Enumerable[#{constant_name}])])",
|
|
1011
|
+
),
|
|
1012
|
+
],
|
|
1013
|
+
return_type: method_name == :delete ? "Integer" : "T::Array[#{constant_name}]",
|
|
1014
|
+
)
|
|
1015
|
+
when :delete_all, :destroy_all
|
|
1016
|
+
common_relation_methods_module.create_method(
|
|
1017
|
+
method_name.to_s,
|
|
1018
|
+
return_type: method_name == :delete_all ? "Integer" : "T::Array[#{constant_name}]",
|
|
1019
|
+
)
|
|
1020
|
+
when :delete_by, :destroy_by
|
|
1021
|
+
common_relation_methods_module.create_method(
|
|
1022
|
+
method_name.to_s,
|
|
1023
|
+
parameters: [
|
|
1024
|
+
create_param("args", type: "T.untyped"),
|
|
1025
|
+
],
|
|
1026
|
+
return_type: method_name == :delete_by ? "Integer" : "T::Array[#{constant_name}]",
|
|
1027
|
+
)
|
|
965
1028
|
end
|
|
966
1029
|
end
|
|
967
1030
|
|
|
@@ -269,7 +269,11 @@ module Tapioca
|
|
|
269
269
|
Field.new(
|
|
270
270
|
name: descriptor.name,
|
|
271
271
|
type: type,
|
|
272
|
-
|
|
272
|
+
# The FFI implementation accepts Enumerables:
|
|
273
|
+
# https://github.com/protocolbuffers/protobuf/blob/fc0eda1fd4eff075f1fb2e9249fa4209f0227e33/ruby/lib/google/protobuf/ffi/repeated_field.rb#L361-L366
|
|
274
|
+
# However the C implementation of the initializer specifically checks for Arrays:
|
|
275
|
+
# https://github.com/protocolbuffers/protobuf/blob/fc0eda1fd4eff075f1fb2e9249fa4209f0227e33/ruby/ext/google/protobuf_c/message.c#L568-L573
|
|
276
|
+
init_type: "T.nilable(T::Array[#{elem_type}])",
|
|
273
277
|
default: "T.unsafe(nil)",
|
|
274
278
|
)
|
|
275
279
|
end
|
|
@@ -152,8 +152,10 @@ module Tapioca
|
|
|
152
152
|
when ActiveRecord::Type::Serialized
|
|
153
153
|
serialized_column_type(column_type)
|
|
154
154
|
when ->(type) {
|
|
155
|
-
defined?(ActiveRecord::Normalization::NormalizedValueType) &&
|
|
156
|
-
ActiveRecord::Normalization::NormalizedValueType === type
|
|
155
|
+
(defined?(ActiveRecord::Normalization::NormalizedValueType) &&
|
|
156
|
+
ActiveRecord::Normalization::NormalizedValueType === type) ||
|
|
157
|
+
(defined?(ActiveModel::Attributes::Normalization::NormalizedValueType) &&
|
|
158
|
+
ActiveModel::Attributes::Normalization::NormalizedValueType === type)
|
|
157
159
|
}
|
|
158
160
|
type_for_activerecord_value(column_type.cast_type, column_nullability:)
|
|
159
161
|
when ->(type) {
|
|
@@ -28,7 +28,7 @@ module Tapioca
|
|
|
28
28
|
#: (String name, String content, ?require_file: bool) -> String
|
|
29
29
|
def add_ruby_file(name, content, require_file: true)
|
|
30
30
|
add_content_file(name, content).tap do |file_name|
|
|
31
|
-
|
|
31
|
+
Runtime.silence_warnings { require(file_name) } if require_file
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
data/lib/tapioca/internal.rb
CHANGED
data/lib/tapioca/loaders/gem.rb
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Tapioca
|
|
5
|
+
module Runtime
|
|
6
|
+
NOOP_METHOD = ->(*_args, **_kwargs, &_block) {} #: ^() -> void
|
|
7
|
+
private_constant :NOOP_METHOD
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
#: [Result] { -> Result } -> Result
|
|
11
|
+
def silence_warnings(&blk)
|
|
12
|
+
original_verbosity = $VERBOSE
|
|
13
|
+
$VERBOSE = nil
|
|
14
|
+
::Gem::DefaultUserInteraction.use_ui(::Gem::SilentUI.new) do
|
|
15
|
+
blk.call
|
|
16
|
+
end
|
|
17
|
+
ensure
|
|
18
|
+
$VERBOSE = original_verbosity
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#: [Result] { -> Result } -> Result
|
|
22
|
+
def with_disabled_exits(&block)
|
|
23
|
+
original_abort = Kernel.instance_method(:abort)
|
|
24
|
+
original_exit = Kernel.instance_method(:exit)
|
|
25
|
+
|
|
26
|
+
begin
|
|
27
|
+
Kernel.define_method(:abort, NOOP_METHOD)
|
|
28
|
+
Kernel.define_method(:exit, NOOP_METHOD)
|
|
29
|
+
|
|
30
|
+
silence_warnings do
|
|
31
|
+
block.call
|
|
32
|
+
end
|
|
33
|
+
ensure
|
|
34
|
+
Kernel.define_method(:exit, original_exit)
|
|
35
|
+
Kernel.define_method(:abort, original_abort)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -15,7 +15,7 @@ module Tapioca
|
|
|
15
15
|
|
|
16
16
|
#: -> void
|
|
17
17
|
def eager_load_all!
|
|
18
|
-
|
|
18
|
+
Runtime.with_disabled_exits do
|
|
19
19
|
until @constant_names_registered_for_autoload.empty?
|
|
20
20
|
# Grab the next constant name
|
|
21
21
|
constant_name = T.must(@constant_names_registered_for_autoload.shift)
|
|
@@ -52,7 +52,7 @@ end
|
|
|
52
52
|
|
|
53
53
|
module T
|
|
54
54
|
module Helpers
|
|
55
|
-
prepend(Module.new do
|
|
55
|
+
prepend(::Module.new do
|
|
56
56
|
def requires_ancestor(&block)
|
|
57
57
|
# We can't directly call the block since the ancestor might not be loaded yet.
|
|
58
58
|
# We save the block in the map and will resolve it later.
|
|
@@ -22,7 +22,7 @@ module T
|
|
|
22
22
|
# `T::Generic#type_member` just instantiates a `T::Type::TypeMember` instance and returns it.
|
|
23
23
|
# We use that when registering the type member and then later return it from this method.
|
|
24
24
|
Tapioca::TypeVariableModule.new(
|
|
25
|
-
T.cast(self, Module),
|
|
25
|
+
T.cast(self, ::Module),
|
|
26
26
|
Tapioca::TypeVariableModule::Type::Member,
|
|
27
27
|
variance,
|
|
28
28
|
bounds_proc,
|
|
@@ -35,7 +35,7 @@ module T
|
|
|
35
35
|
# `T::Generic#type_template` just instantiates a `T::Type::TypeTemplate` instance and returns it.
|
|
36
36
|
# We use that when registering the type template and then later return it from this method.
|
|
37
37
|
Tapioca::TypeVariableModule.new(
|
|
38
|
-
T.cast(self, Module),
|
|
38
|
+
T.cast(self, ::Module),
|
|
39
39
|
Tapioca::TypeVariableModule::Type::Template,
|
|
40
40
|
variance,
|
|
41
41
|
bounds_proc,
|
|
@@ -48,7 +48,7 @@ module T
|
|
|
48
48
|
Tapioca::Runtime::GenericTypeRegistry.register_type_variable(
|
|
49
49
|
self,
|
|
50
50
|
Tapioca::TypeVariableModule.new(
|
|
51
|
-
T.cast(self, Module),
|
|
51
|
+
T.cast(self, ::Module),
|
|
52
52
|
Tapioca::TypeVariableModule::Type::HasAttachedClass,
|
|
53
53
|
variance,
|
|
54
54
|
bounds_proc,
|
|
@@ -5,24 +5,13 @@ module T
|
|
|
5
5
|
module Types
|
|
6
6
|
class Simple
|
|
7
7
|
module NamePatch
|
|
8
|
-
NAME_METHOD = Module.instance_method(:name) #: UnboundMethod
|
|
9
|
-
|
|
10
8
|
def name
|
|
11
9
|
# Sorbet memoizes this method into the `@name` instance variable but
|
|
12
10
|
# doing so means that types get memoized before this patch is applied
|
|
13
|
-
qualified_name_of(@raw_type)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def qualified_name_of(constant)
|
|
17
|
-
name = NAME_METHOD.bind_call(constant)
|
|
18
|
-
name = nil if name&.start_with?("#<")
|
|
19
|
-
return "::T.untyped" if name.nil?
|
|
11
|
+
name = Tapioca::Runtime::Reflection.qualified_name_of(@raw_type)
|
|
12
|
+
name = "::T.untyped" if name.nil?
|
|
20
13
|
|
|
21
|
-
|
|
22
|
-
name
|
|
23
|
-
else
|
|
24
|
-
"::#{name}"
|
|
25
|
-
end
|
|
14
|
+
name
|
|
26
15
|
end
|
|
27
16
|
end
|
|
28
17
|
|
data/lib/tapioca/version.rb
CHANGED
data/lib/tapioca.rb
CHANGED
|
@@ -9,42 +9,6 @@ module Tapioca
|
|
|
9
9
|
|
|
10
10
|
@traces = [] #: Array[TracePoint]
|
|
11
11
|
|
|
12
|
-
NOOP_METHOD = ->(*_args, **_kwargs, &_block) {} #: ^() -> void
|
|
13
|
-
private_constant :NOOP_METHOD
|
|
14
|
-
|
|
15
|
-
class << self
|
|
16
|
-
extend T::Sig
|
|
17
|
-
|
|
18
|
-
#: [Result] { -> Result } -> Result
|
|
19
|
-
def silence_warnings(&blk)
|
|
20
|
-
original_verbosity = $VERBOSE
|
|
21
|
-
$VERBOSE = nil
|
|
22
|
-
::Gem::DefaultUserInteraction.use_ui(::Gem::SilentUI.new) do
|
|
23
|
-
blk.call
|
|
24
|
-
end
|
|
25
|
-
ensure
|
|
26
|
-
$VERBOSE = original_verbosity
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
#: [Result] { -> Result } -> Result
|
|
30
|
-
def with_disabled_exits(&block)
|
|
31
|
-
original_abort = Kernel.instance_method(:abort)
|
|
32
|
-
original_exit = Kernel.instance_method(:exit)
|
|
33
|
-
|
|
34
|
-
begin
|
|
35
|
-
Kernel.define_method(:abort, NOOP_METHOD)
|
|
36
|
-
Kernel.define_method(:exit, NOOP_METHOD)
|
|
37
|
-
|
|
38
|
-
Tapioca.silence_warnings do
|
|
39
|
-
block.call
|
|
40
|
-
end
|
|
41
|
-
ensure
|
|
42
|
-
Kernel.define_method(:exit, original_exit)
|
|
43
|
-
Kernel.define_method(:abort, original_abort)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
12
|
class Error < StandardError; end
|
|
49
13
|
|
|
50
14
|
LIB_ROOT_DIR = T.must(__dir__) #: String
|
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.17.
|
|
4
|
+
version: 0.17.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ufuk Kayserilioglu
|
|
@@ -69,89 +69,89 @@ dependencies:
|
|
|
69
69
|
- !ruby/object:Gem::Version
|
|
70
70
|
version: 1.21.0
|
|
71
71
|
- !ruby/object:Gem::Dependency
|
|
72
|
-
name:
|
|
72
|
+
name: require-hooks
|
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
|
74
74
|
requirements:
|
|
75
75
|
- - ">="
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: 0.
|
|
77
|
+
version: 0.2.2
|
|
78
78
|
type: :runtime
|
|
79
79
|
prerelease: false
|
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
|
82
82
|
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: 0.
|
|
84
|
+
version: 0.2.2
|
|
85
85
|
- !ruby/object:Gem::Dependency
|
|
86
|
-
name:
|
|
86
|
+
name: sorbet-static-and-runtime
|
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
|
88
88
|
requirements:
|
|
89
89
|
- - ">="
|
|
90
90
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: 0.
|
|
91
|
+
version: 0.5.11087
|
|
92
92
|
type: :runtime
|
|
93
93
|
prerelease: false
|
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
|
95
95
|
requirements:
|
|
96
96
|
- - ">="
|
|
97
97
|
- !ruby/object:Gem::Version
|
|
98
|
-
version: 0.
|
|
98
|
+
version: 0.5.11087
|
|
99
99
|
- !ruby/object:Gem::Dependency
|
|
100
|
-
name:
|
|
100
|
+
name: thor
|
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
|
102
102
|
requirements:
|
|
103
103
|
- - ">="
|
|
104
104
|
- !ruby/object:Gem::Version
|
|
105
|
-
version:
|
|
105
|
+
version: 1.2.0
|
|
106
106
|
type: :runtime
|
|
107
107
|
prerelease: false
|
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
|
109
109
|
requirements:
|
|
110
110
|
- - ">="
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
|
-
version:
|
|
112
|
+
version: 1.2.0
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
|
-
name:
|
|
114
|
+
name: yard-sorbet
|
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
|
116
116
|
requirements:
|
|
117
117
|
- - ">="
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version:
|
|
119
|
+
version: '0'
|
|
120
120
|
type: :runtime
|
|
121
121
|
prerelease: false
|
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
|
123
123
|
requirements:
|
|
124
124
|
- - ">="
|
|
125
125
|
- !ruby/object:Gem::Version
|
|
126
|
-
version:
|
|
126
|
+
version: '0'
|
|
127
127
|
- !ruby/object:Gem::Dependency
|
|
128
|
-
name:
|
|
128
|
+
name: rbi
|
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
|
130
130
|
requirements:
|
|
131
131
|
- - ">="
|
|
132
132
|
- !ruby/object:Gem::Version
|
|
133
|
-
version:
|
|
133
|
+
version: 0.3.7
|
|
134
134
|
type: :runtime
|
|
135
135
|
prerelease: false
|
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
|
137
137
|
requirements:
|
|
138
138
|
- - ">="
|
|
139
139
|
- !ruby/object:Gem::Version
|
|
140
|
-
version:
|
|
140
|
+
version: 0.3.7
|
|
141
141
|
- !ruby/object:Gem::Dependency
|
|
142
|
-
name:
|
|
142
|
+
name: spoom
|
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
|
144
144
|
requirements:
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version:
|
|
147
|
+
version: 1.7.9
|
|
148
148
|
type: :runtime
|
|
149
149
|
prerelease: false
|
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
|
151
151
|
requirements:
|
|
152
152
|
- - ">="
|
|
153
153
|
- !ruby/object:Gem::Version
|
|
154
|
-
version:
|
|
154
|
+
version: 1.7.9
|
|
155
155
|
email:
|
|
156
156
|
- ruby@shopify.com
|
|
157
157
|
executables:
|
|
@@ -280,6 +280,7 @@ files:
|
|
|
280
280
|
- lib/tapioca/runtime/attached_class_of_legacy.rb
|
|
281
281
|
- lib/tapioca/runtime/dynamic_mixin_compiler.rb
|
|
282
282
|
- lib/tapioca/runtime/generic_type_registry.rb
|
|
283
|
+
- lib/tapioca/runtime/helpers.rb
|
|
283
284
|
- lib/tapioca/runtime/reflection.rb
|
|
284
285
|
- lib/tapioca/runtime/source_location.rb
|
|
285
286
|
- lib/tapioca/runtime/trackers.rb
|