Sha256: 5181e983401372df99fb04f938847ca6c7bc41cd9a02402133d166f51dee8fb1

Contents?: true

Size: 1.32 KB

Versions: 11

Compression:

Stored size: 1.32 KB

Contents

module VCR
  module HttpStubbingAdapters
    class MultiObjectProxy < VCR::BasicObject

      def self.for(*objects)
        return objects.first if objects.size == 1
        new(*objects)
      end

      attr_reader :proxied_objects

      def initialize(*objects)
        ::Kernel.raise ::ArgumentError.new("You must pass at least one object to proxy to") if objects.empty?
        ::Kernel.raise ::ArgumentError.new("Cannot proxy to nil") if objects.any? { |o| o.nil? }

        @proxied_objects = objects
      end

      def respond_to?(message)
        proxied_objects.any? { |o| o.respond_to?(message) }
      end

      private

        def method_missing(name, *args)
          responding_proxied_objects = proxied_objects.select { |o| o.respond_to?(name) }
          return super if responding_proxied_objects.empty?

          uniq_return_vals = responding_proxied_objects.map { |o| o.__send__(name, *args) }.uniq

          return nil unless method_return_val_important?(name)
          return uniq_return_vals.first if uniq_return_vals.size == 1

          ::Kernel.raise "The proxied objects returned different values for calls to #{name}: #{uniq_return_vals.inspect}"
        end

        def method_return_val_important?(method_name)
          method_name == :request_uri || method_name.to_s =~ /\?$/
        end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
vcr-1.11.3 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.11.2 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.11.1 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.10.3 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.10.2 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.10.0 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.9.0 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.8.0 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.7.2 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.7.1 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
vcr-1.7.0 lib/vcr/http_stubbing_adapters/multi_object_proxy.rb