Module: T::Utils::Private
- Defined in:
- lib/types/utils.rb
Class Method Summary collapse
-
.coerce_and_check_module_types(val, check_val, check_module_type) ⇒ Object
NOTE: the Module and SimplePairUnion branches of this method are inlined for speed in several hot paths.
Class Method Details
.coerce_and_check_module_types(val, check_val, check_module_type) ⇒ Object
NOTE: the Module and SimplePairUnion branches of this method are inlined for speed in several hot paths. The ‘T.cast` / `T.let` / `T.bind` / `T.assert_type!` happy paths in `_types.rb` inline the value check and return early on success; `T::Private::Casts.cast` is only reached after that check has already failed, so it reproduces the coercion branches but skips the (now always-false) value check. If you change the behavior here, update those callers too.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/types/utils.rb', line 13 def self.coerce_and_check_module_types(val, check_val, check_module_type) # rubocop:disable Style/CaseLikeIf if val.is_a?(T::Types::Base) if val.is_a?(T::Private::Types::TypeAlias) val.aliased_type else val end elsif val.is_a?(Module) if check_module_type && check_val.is_a?(val) nil else T::Types::Simple::Private::Pool.type_for_module(val) end elsif val.is_a?(::Array) T::Types::FixedArray.new(val) elsif val.is_a?(::Hash) T::Types::FixedHash.new(val) elsif val.is_a?(T::Private::Methods::DeclBuilder) T::Private::Methods.finalize_proc(val.decl) elsif val.is_a?(::T::Enum) T::Types::TEnum.new(val) elsif val.is_a?(::String) raise "Invalid String literal for type constraint. Must be an #{T::Types::Base}, a " \ "class/module, or an array. Got a String with value `#{val}`." else raise "Invalid value for type constraint. Must be an #{T::Types::Base}, a " \ "class/module, or an array. Got a `#{val.class}`." end # rubocop:enable Style/CaseLikeIf end |