def proxy_message_chain_a(messages, &last_proxy_setup_block)
      first_message = messages.first
      return last_proxy_setup_block.call(receive(first_message)) if messages.size == 1

      receive(first_message).and_wrap_original do |m, *args, &original_block|
        result = m.call(*args, &original_block)
        allow(result).to proxy_message_chain_a(messages.drop(1), &last_proxy_setup_block)
        result
      end
    end
def proxy_message_chain_a(messages, &last_proxy_setup_block)
      first_message = messages.first
      return last_proxy_setup_block.call(receive(first_message)) if messages.size == 1

      receive(first_message).and_wrap_original do |m, *args, &original_block|
        result = m.call(*args, &original_block)
        allow(result).to proxy_message_chain_a(messages.drop(1), &last_proxy_setup_block)
        result
      end
    end
Same as #proxy_message_chain but using an array of symbols as
 message_chain instead of a dot separated string