Sha256: d520f50335c9581c0259383ab954f523ac89cab8822b5f49230db8af947b14f3

Contents?: true

Size: 928 Bytes

Versions: 1

Compression:

Stored size: 928 Bytes

Contents

module Mocktail
  class RedefinesNew
    extend T::Sig

    def initialize
      @handles_dry_new_call = HandlesDryNewCall.new
    end

    def redefine(type)
      type_replacement = TopShelf.instance.type_replacement_for(type)

      if type_replacement.replacement_new.nil?
        type_replacement.original_new = type.method(:new)
        type.singleton_class.send(:undef_method, :new)
        handles_dry_new_call = @handles_dry_new_call
        type.define_singleton_method :new, ->(*args, **kwargs, &block) {
          if TopShelf.instance.new_replaced?(type) ||
              (type.is_a?(Class) && TopShelf.instance.of_next_registered?(type))
            handles_dry_new_call.handle(type, args, kwargs, block)
          else
            type_replacement.original_new.call(*args, **kwargs, &block)
          end
        }
        type_replacement.replacement_new = type.singleton_method(:new)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mocktail-2.0.0 lib/mocktail/replaces_type/redefines_new.rb