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