Module: T::Utils::Nilable

Defined in:
lib/types/utils.rb

Defined Under Namespace

Classes: TypeInfo

Constant Summary collapse

NIL_TYPE =
T::Utils.coerce(NilClass)

Class Method Summary collapse

Class Method Details

.get_type_info(prop_type) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
# File 'lib/types/utils.rb', line 175

def self.get_type_info(prop_type)
  if prop_type.is_a?(T::Types::Union)
    non_nilable_type = prop_type.unwrap_nilable
    if non_nilable_type.is_a?(T::Types::Simple)
      non_nilable_type = non_nilable_type.raw_type
    end
    TypeInfo.new(true, non_nilable_type)
  else
    TypeInfo.new(false, nil)
  end
end

.get_underlying_type(prop_type) ⇒ Object

Get the underlying type inside prop_type:

- if the type is A, the function returns A
- if the type is T.nilable(A), the function returns A


190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/types/utils.rb', line 190

def self.get_underlying_type(prop_type)
  if prop_type.is_a?(T::Types::Union)
    non_nilable_type = prop_type.unwrap_nilable
    if non_nilable_type.is_a?(T::Types::Simple)
      non_nilable_type = non_nilable_type.raw_type
    end
    non_nilable_type || prop_type
  elsif prop_type.is_a?(T::Types::Simple)
    prop_type.raw_type
  else
    prop_type
  end
end

.get_underlying_type_object(prop_type) ⇒ Object

The difference between this function and the above function is that the Sorbet type, like T::Types::Simple is preserved.



206
207
208
# File 'lib/types/utils.rb', line 206

def self.get_underlying_type_object(prop_type)
  T::Utils.unwrap_nilable(prop_type) || prop_type
end

.is_union_with_nilclass(prop_type) ⇒ Object



210
211
212
213
214
215
216
217
# File 'lib/types/utils.rb', line 210

def self.is_union_with_nilclass(prop_type)
  case prop_type
  when T::Types::Union
    prop_type.types.include?(NIL_TYPE)
  else
    false
  end
end