Sha256: 1df46307b08ecfcc9936ed3f25254f1635e0ca9b90bba953bb8451554a32ce48

Contents?: true

Size: 933 Bytes

Versions: 12

Compression:

Stored size: 933 Bytes

Contents

module Mocktail
  class ReplacesNext
    def initialize
      @top_shelf = TopShelf.instance
      @redefines_new = RedefinesNew.new
      @imitates_type = ImitatesType.new
    end

    def replace(type, count)
      raise UnsupportedMocktail.new("Mocktail.of_next() only supports classes") unless 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.size == 1 ? mocktails.first : mocktails
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
mocktail-1.2.0 lib/mocktail/replaces_next.rb
mocktail-1.1.3 lib/mocktail/replaces_next.rb
mocktail-1.1.2 lib/mocktail/replaces_next.rb
mocktail-1.1.1 lib/mocktail/replaces_next.rb
mocktail-1.1.0 lib/mocktail/replaces_next.rb
mocktail-1.0.0 lib/mocktail/replaces_next.rb
mocktail-0.0.6 lib/mocktail/replaces_next.rb
mocktail-0.0.5 lib/mocktail/replaces_next.rb
mocktail-0.0.4 lib/mocktail/replaces_next.rb
mocktail-0.0.3 lib/mocktail/replaces_next.rb
mocktail-0.0.2 lib/mocktail/replaces_next.rb
mocktail-0.0.1 lib/mocktail/replaces_next.rb