Sha256: ba78676339e56d3a61d0e130ecc464eeae7fb1f12f5bd3f6334ffd6e0956f996

Contents?: true

Size: 1.91 KB

Versions: 60

Compression:

Stored size: 1.91 KB

Contents

require 'delegate'
require 'vcr/errors'

module VCR
  # A Cassette wrapper for linking cassettes from another thread
  class LinkedCassette < SimpleDelegator
    # An enumerable lazily wrapping a list of cassettes that a context is using
    class CassetteList
      include Enumerable

      # Creates a new list of context-owned cassettes and linked cassettes
      # @param [Array] context-owned cassettes
      # @param [Array] context-unowned (linked) cassettes
      def initialize(cassettes, linked_cassettes)
        @cassettes = cassettes
        @linked_cassettes = linked_cassettes
      end

      # Yields linked cassettes first, and then context-owned cassettes
      def each
        @linked_cassettes.each do |cassette|
          yield wrap(cassette)
        end

        @cassettes.each do |cassette|
          yield cassette
        end
      end

      # Provide last implementation, which is not provided by Enumerable
      def last
        cassette = @cassettes.last
        return cassette if cassette

        cassette = @linked_cassettes.last
        wrap(cassette) if cassette
      end

      # Provide size implementation, which is not provided by Enumerable
      def size
        @cassettes.size + @linked_cassettes.size
      end

    protected
      def wrap(cassette)
        if cassette.linked?
          cassette
        else
          LinkedCassette.new(cassette)
        end
      end
    end

    # Create a new CassetteList
    # @param [Array] context-owned cassettes
    # @param [Array] context-unowned (linked) cassettes
    def self.list(cassettes, linked_cassettes)
      CassetteList.new(cassettes, linked_cassettes)
    end

    # Prevents cassette ejection by raising EjectLinkedCassetteError
    def eject(*args)
      raise Errors::EjectLinkedCassetteError,
        "cannot eject a cassette inserted by a parent thread"
    end

    # @return [Boolean] true
    def linked?
      true
    end
  end
end

Version data entries

60 entries across 60 versions & 7 rubygems

Version Path
docspring-3.0.0 vendor/bundle/ruby/3.3.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.16 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.15 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.14 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.13 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.12 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.11 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.10 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.9 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.8 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.7 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.6 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.5 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.4 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.2 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.1 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-2.0.0 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-1.142.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb
cloudsmith-api-1.120.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/linked_cassette.rb