Sha256: 43198123beb3a794fd2b4fff52eb4539fb6afe89c164be762d6365194623975b

Contents?: true

Size: 1.16 KB

Versions: 9

Compression:

Stored size: 1.16 KB

Contents

require 'forwardable'

module VCR
  class HTTPInteraction < Struct.new(:request, :response)
    extend ::Forwardable
    def_delegators :request, :uri, :method

    def ignore!
      @ignored = true
    end

    def ignored?
      @ignored
    end

    def filter!(text, replacement_text)
      return self if [text, replacement_text].any? { |t| t.to_s.empty? }
      filter_object!(self, text, replacement_text)
    end

    private

      def filter_object!(object, text, replacement_text)
        if object.respond_to?(:gsub)
          object.gsub!(text, replacement_text) if object.include?(text)
        elsif Hash === object
          filter_hash!(object, text, replacement_text)
        elsif object.respond_to?(:each)
          # This handles nested arrays and structs
          object.each { |o| filter_object!(o, text, replacement_text) }
        end

        object
      end

      def filter_hash!(hash, text, replacement_text)
        filter_object!(hash.values, text, replacement_text)

        hash.keys.each do |k|
          new_key = filter_object!(k.dup, text, replacement_text)
          hash[new_key] = hash.delete(k) unless k == new_key
        end
      end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
vcr-1.11.1 lib/vcr/structs/http_interaction.rb
vcr-1.10.3 lib/vcr/structs/http_interaction.rb
vcr-1.10.2 lib/vcr/structs/http_interaction.rb
vcr-1.10.0 lib/vcr/structs/http_interaction.rb
vcr-1.9.0 lib/vcr/structs/http_interaction.rb
vcr-1.8.0 lib/vcr/structs/http_interaction.rb
vcr-1.7.2 lib/vcr/structs/http_interaction.rb
vcr-1.7.1 lib/vcr/structs/http_interaction.rb
vcr-1.7.0 lib/vcr/structs/http_interaction.rb