tapioca 0.11.13 → 0.11.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 071fd87cab365673ec36e85a0cf657865d2c71d1650d02ae7c17ac3133f124f3
4
- data.tar.gz: 34a3b5e83928cb38eefbf57568ca8dc5d16c20ee6653da2ee591d6e3265d8d2a
3
+ metadata.gz: 4f089694c098df2b42355826c7622448368a7f766bd44de3cd2ece4242ebc0fa
4
+ data.tar.gz: 0140650be1098b51150d5a74fac1f349e9a8da6400fcc5ad3ed1e0da84fb7a91
5
5
  SHA512:
6
- metadata.gz: d97568a53647ceb3fe4e7bfd33dc3503cb95d8c95791dc0c0bf8429f9974c4a39d5d5e5aca16251ae866a07761f00ddbd5a224925b11c4a8378f682fd4deef1c
7
- data.tar.gz: f44cccf226efaa3b0ccda730daf3419acb3cdcaeec7c699c91ba9e2f8b4fe59a7e157331afff1723f69f09ff2fc3ff5a208222b2eb86c1738806170578a3ec2b
6
+ metadata.gz: 95bbca796e14a6af94dbbaa9f15a3cd15c46d414472b03385ab7ff6b8ab495ba885ee362e7349bbdc7ed0c60639d22fb2db52e0d901faab582fca96a93dfd408
7
+ data.tar.gz: 179e7b4ef4c30819d7a3e1c3cb856b800ffc17c63d20419341002b4273b56c9cec2d9d06e03d28678275ac2c9e8e82030f7cfb2d8f5bf4bdc99ead5e361d001a
@@ -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).compare_by_identity,
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 { params(user: User).returns(T.any(NotifyUserJob, FalseClass)) }
34
- # def self.perform_later(user); end
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(#{name_of(constant)}, FalseClass)",
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
 
@@ -72,9 +72,9 @@ module Tapioca
72
72
  def attribute_methods_for_constant
73
73
  patterns = if constant.respond_to?(:attribute_method_patterns)
74
74
  # https://github.com/rails/rails/pull/44367
75
- T.unsafe(constant).attribute_method_patterns
75
+ constant.attribute_method_patterns
76
76
  else
77
- constant.attribute_method_matchers
77
+ T.unsafe(constant).attribute_method_matchers
78
78
  end
79
79
  patterns.flat_map do |pattern|
80
80
  constant.attribute_types.filter_map do |name, value|
@@ -101,8 +101,13 @@ module Tapioca
101
101
  HANDLED_METHOD_TARGETS.include?(target.to_s)
102
102
  end
103
103
 
104
- sig { params(attribute_type_value: ::ActiveModel::Type::Value).returns(::String) }
104
+ sig { params(attribute_type_value: T.untyped).returns(::String) }
105
105
  def type_for(attribute_type_value)
106
+ # This guarantees that the type will remain as T.untyped for attributes in the following form:
107
+ # attribute :name
108
+ # This is because for a generic attribute with no specified type, ActiveModel::Type::Value.new is returned
109
+ return "T.untyped" if attribute_type_value.instance_of?(ActiveModel::Type::Value)
110
+
106
111
  type = case attribute_type_value
107
112
  when ActiveModel::Type::Boolean
108
113
  "T::Boolean"
@@ -119,8 +124,7 @@ module Tapioca
119
124
  when ActiveModel::Type::String
120
125
  "::String"
121
126
  else
122
- # we don't want untyped to be wrapped by T.nilable, so just return early
123
- return "T.untyped"
127
+ attribute_type_value.class.name.to_s
124
128
  end
125
129
 
126
130
  as_nilable_type(type)
@@ -108,6 +108,11 @@ module Tapioca
108
108
  def decorate
109
109
  return unless constant.table_exists?
110
110
 
111
+ # We need to call this to ensure that some attribute aliases are defined, e.g.
112
+ # `id_value` as an alias for `id`.
113
+ # I think this is a regression on Rails 7.1, but we are where we are.
114
+ constant.define_attribute_methods
115
+
111
116
  root.create_path(constant) do |model|
112
117
  model.create_module(AttributeMethodsModuleName) do |mod|
113
118
  (constant.attribute_names + ["id"]).uniq.each do |attribute_name|
@@ -119,9 +124,9 @@ module Tapioca
119
124
  column_name = column_name.to_s
120
125
  patterns = if constant.respond_to?(:attribute_method_patterns)
121
126
  # https://github.com/rails/rails/pull/44367
122
- T.unsafe(constant).attribute_method_patterns
127
+ constant.attribute_method_patterns
123
128
  else
124
- constant.attribute_method_matchers
129
+ T.unsafe(constant).attribute_method_matchers
125
130
  end
126
131
  new_method_names = patterns.map { |m| m.method_name(attribute_name) }
127
132
  old_method_names = patterns.map { |m| m.method_name(column_name) }
@@ -110,11 +110,10 @@ module Tapioca
110
110
  return_type: "ActiveSupport::StringInquirer",
111
111
  )
112
112
 
113
- return_type = sorbet_supports?(:generic_class) ? "T::Class[T.anything]" : "Class"
114
113
  mod.create_method(
115
114
  "#{role}_class",
116
115
  parameters: [],
117
- return_type: return_type,
116
+ return_type: "T::Class[T.anything]",
118
117
  )
119
118
 
120
119
  mod.create_method(
@@ -76,7 +76,12 @@ module Tapioca
76
76
  Class.new do
77
77
  T.unsafe(self).include(ActiveRecord::TestFixtures)
78
78
 
79
- T.unsafe(self).fixture_path = Rails.root.join("test", "fixtures")
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 { params(argument: T.nilable(GraphQL::Schema::Argument)).returns(String) }
71
- def argument_type(argument)
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 { params(argument: GraphQL::Schema::Argument).returns(String) }
13
- def type_for(argument)
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)
@@ -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 = active_compilers.map(&:processable_constants).reduce(Set.new, :union)
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
- .to_set
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
- final_methods = modules_with_final[signature.owner.object_id]
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)
@@ -271,9 +271,7 @@ module Tapioca
271
271
 
272
272
  klass = class_of(value)
273
273
 
274
- klass_name = if klass == ObjectSpace::WeakMap
275
- sorbet_supports?(:non_generic_weak_map) ? "ObjectSpace::WeakMap" : "ObjectSpace::WeakMap[T.untyped]"
276
- elsif T::Generic === klass
274
+ klass_name = if T::Generic === klass
277
275
  generic_name_of(klass)
278
276
  else
279
277
  name_of(klass)
@@ -24,8 +24,6 @@ module Tapioca
24
24
  FEATURE_REQUIREMENTS = T.let(
25
25
  {
26
26
  # feature_name: ::Gem::Requirement.new(">= ___"), # https://github.com/sorbet/sorbet/pull/___
27
- non_generic_weak_map: ::Gem::Requirement.new(">= 0.5.10587"), # https://github.com/sorbet/sorbet/pull/6610
28
- generic_class: ::Gem::Requirement.new(">= 0.5.10820"), # https://github.com/sorbet/sorbet/pull/6781
29
27
  }.freeze,
30
28
  T::Hash[Symbol, ::Gem::Requirement],
31
29
  )
@@ -32,7 +32,6 @@ require "tapioca/helpers/git_attributes"
32
32
  require "tapioca/helpers/sorbet_helper"
33
33
  require "tapioca/helpers/rbi_helper"
34
34
  require "tapioca/sorbet_ext/backcompat_patches"
35
- require "tapioca/sorbet_ext/fixed_hash_patch"
36
35
  require "tapioca/sorbet_ext/name_patch"
37
36
  require "tapioca/sorbet_ext/generic_name_patch"
38
37
  require "tapioca/sorbet_ext/proc_bind_patch"
@@ -1,24 +1,6 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- unless defined?(T.anything)
5
- module T
6
- class << self
7
- def anything
8
- T.untyped
9
- end
10
- end
11
- end
12
- end
4
+ # This file contains patches to make Tapioca work with older versions of Sorbet.
13
5
 
14
- unless defined?(T::Class)
15
- module T
16
- module Class
17
- class << self
18
- def [](type)
19
- T.untyped
20
- end
21
- end
22
- end
23
- end
24
- end
6
+ # NOTE: If there is currently no need for any patches, this file will be empty.
@@ -18,32 +18,26 @@ module T
18
18
  Tapioca::Runtime::GenericTypeRegistry.register_type(constant, types)
19
19
  end
20
20
 
21
- def type_member(variance = :invariant, fixed: nil, lower: nil, upper: nil, &bounds_proc)
21
+ def type_member(variance = :invariant, &bounds_proc)
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
25
  T.cast(self, Module),
26
26
  Tapioca::TypeVariableModule::Type::Member,
27
27
  variance,
28
- fixed,
29
- lower,
30
- upper,
31
28
  bounds_proc,
32
29
  ).tap do |type_variable|
33
30
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
34
31
  end
35
32
  end
36
33
 
37
- def type_template(variance = :invariant, fixed: nil, lower: nil, upper: nil, &bounds_proc)
34
+ def type_template(variance = :invariant, &bounds_proc)
38
35
  # `T::Generic#type_template` just instantiates a `T::Type::TypeTemplate` instance and returns it.
39
36
  # We use that when registering the type template and then later return it from this method.
40
37
  Tapioca::TypeVariableModule.new(
41
38
  T.cast(self, Module),
42
39
  Tapioca::TypeVariableModule::Type::Template,
43
40
  variance,
44
- fixed,
45
- lower,
46
- upper,
47
41
  bounds_proc,
48
42
  ).tap do |type_variable|
49
43
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
@@ -57,9 +51,6 @@ module T
57
51
  T.cast(self, Module),
58
52
  Tapioca::TypeVariableModule::Type::HasAttachedClass,
59
53
  variance,
60
- nil,
61
- nil,
62
- nil,
63
54
  bounds_proc,
64
55
  ),
65
56
  )
@@ -93,29 +84,9 @@ module T
93
84
  end
94
85
 
95
86
  module Utils
96
- # This duplication is required to preserve backwards compatibility with sorbet-runtime versions prior to the
97
- # introduction of the `Private` module in https://github.com/sorbet/sorbet/pull/6559.
98
- if defined?(T::Utils::Private)
99
- module Private
100
- module PrivateCoercePatch
101
- def coerce_and_check_module_types(val, check_val, check_module_type)
102
- if val.is_a?(Tapioca::TypeVariableModule)
103
- val.coerce_to_type_variable
104
- elsif val.respond_to?(:__tapioca_override_type)
105
- val.__tapioca_override_type
106
- else
107
- super
108
- end
109
- end
110
- end
111
-
112
- class << self
113
- prepend(PrivateCoercePatch)
114
- end
115
- end
116
- else
117
- module CoercePatch
118
- def coerce(val)
87
+ module Private
88
+ module PrivateCoercePatch
89
+ def coerce_and_check_module_types(val, check_val, check_module_type)
119
90
  if val.is_a?(Tapioca::TypeVariableModule)
120
91
  val.coerce_to_type_variable
121
92
  elsif val.respond_to?(:__tapioca_override_type)
@@ -127,7 +98,7 @@ module T
127
98
  end
128
99
 
129
100
  class << self
130
- prepend(CoercePatch)
101
+ prepend(PrivateCoercePatch)
131
102
  end
132
103
  end
133
104
  end
@@ -159,35 +130,27 @@ module Tapioca
159
130
  end
160
131
  end
161
132
 
133
+ DEFAULT_BOUNDS_PROC = T.let(-> { {} }, T.proc.returns(T::Hash[Symbol, T.untyped]))
134
+
162
135
  sig { returns(Type) }
163
136
  attr_reader :type
164
137
 
165
- # rubocop:disable Metrics/ParameterLists
166
138
  sig do
167
139
  params(
168
140
  context: Module,
169
141
  type: Type,
170
142
  variance: Symbol,
171
- fixed: T.untyped,
172
- lower: T.untyped,
173
- upper: T.untyped,
174
143
  bounds_proc: T.nilable(T.proc.returns(T::Hash[Symbol, T.untyped])),
175
144
  ).void
176
145
  end
177
- def initialize(context, type, variance, fixed, lower, upper, bounds_proc)
146
+ def initialize(context, type, variance, bounds_proc)
178
147
  @context = context
179
148
  @type = type
180
149
  @variance = variance
181
- @bounds_proc = if bounds_proc
182
- bounds_proc
183
- else
184
- build_bounds_proc(fixed, lower, upper)
185
- end
150
+ @bounds_proc = bounds_proc || DEFAULT_BOUNDS_PROC
186
151
 
187
152
  super()
188
153
  end
189
- # rubocop:enable Metrics/ParameterLists
190
-
191
154
  sig { returns(T.nilable(String)) }
192
155
  def name
193
156
  constant_name = super
@@ -221,19 +184,6 @@ module Tapioca
221
184
 
222
185
  private
223
186
 
224
- sig do
225
- params(fixed: T.untyped, lower: T.untyped, upper: T.untyped)
226
- .returns(T.proc.returns(T::Hash[Symbol, T.untyped]))
227
- end
228
- def build_bounds_proc(fixed, lower, upper)
229
- bounds = {}
230
- bounds[:fixed] = fixed unless fixed.nil?
231
- bounds[:lower] = lower unless lower.nil?
232
- bounds[:upper] = upper unless upper.nil?
233
-
234
- -> { bounds }
235
- end
236
-
237
187
  sig { returns(T::Hash[Symbol, T.untyped]) }
238
188
  def bounds
239
189
  @bounds ||= @bounds_proc.call
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.11.13"
5
+ VERSION = "0.11.15"
6
6
  end
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.13
4
+ version: 0.11.15
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-06 00:00:00.000000000 Z
14
+ date: 2024-01-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -81,14 +81,14 @@ dependencies:
81
81
  requirements:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
- version: 0.5.10187
84
+ version: 0.5.10820
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 0.5.10187
91
+ version: 0.5.10820
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: spoom
94
94
  requirement: !ruby/object:Gem::Requirement
@@ -265,7 +265,6 @@ files:
265
265
  - lib/tapioca/runtime/trackers/required_ancestor.rb
266
266
  - lib/tapioca/runtime/trackers/tracker.rb
267
267
  - lib/tapioca/sorbet_ext/backcompat_patches.rb
268
- - lib/tapioca/sorbet_ext/fixed_hash_patch.rb
269
268
  - lib/tapioca/sorbet_ext/generic_name_patch.rb
270
269
  - lib/tapioca/sorbet_ext/name_patch.rb
271
270
  - lib/tapioca/sorbet_ext/proc_bind_patch.rb
@@ -293,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
292
  - !ruby/object:Gem::Version
294
293
  version: '0'
295
294
  requirements: []
296
- rubygems_version: 3.4.22
295
+ rubygems_version: 3.5.4
297
296
  signing_key:
298
297
  specification_version: 4
299
298
  summary: A Ruby Interface file generator for gems, core types and the Ruby standard
@@ -1,20 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module T
5
- module Types
6
- class FixedHash
7
- def name
8
- entries = @types.map do |(k, v)|
9
- if Symbol === k && ":#{k}" == k.inspect
10
- "#{k}: #{v}"
11
- else
12
- "#{k.inspect} => #{v}"
13
- end
14
- end
15
-
16
- "{#{entries.join(", ")}}"
17
- end
18
- end
19
- end
20
- end