Sha256: 9c1b02a0d29f622e39e5121bbe8a20040ba0fd83cf2c9052294aaf8ed5dedaa0
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
# typed: strict module Mocktail class ReplacesNext extend T::Sig sig { void } def initialize @top_shelf = T.let(TopShelf.instance, TopShelf) @redefines_new = T.let(RedefinesNew.new, RedefinesNew) @imitates_type = T.let(ImitatesType.new, ImitatesType) end sig { type_parameters(:T) .params(type: T::Class[T.all(T.type_parameter(:T), Object)]) .returns(T.type_parameter(:T)) } def replace_once(type) replace(type, 1).fetch(0) end sig { type_parameters(:T) .params(type: T::Class[T.all(T.type_parameter(:T), Object)], count: Integer) .returns(T::Array[T.type_parameter(:T)]) } def replace(type, count) raise UnsupportedMocktail.new("Mocktail.of_next() only supports classes") unless T.unsafe(type).is_a?(Class) mocktails = count.times.map { @imitates_type.imitate(type) } @top_shelf.register_of_next_replacement!(type) @redefines_new.redefine(type) mocktails.reverse_each do |mocktail| Mocktail.stubs( ignore_extra_args: true, ignore_block: true, ignore_arity: true, times: 1 ) { type.new }.with { if mocktail == mocktails.last @top_shelf.unregister_of_next_replacement!(type) end mocktail } end mocktails end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mocktail-2.0.0 | lib/mocktail/sorbet/mocktail/replaces_next.rb |