if defined?(Psych) && Psych.respond_to?(:dump)
  module Psych
    class << self
      def dump_with_mocks(object, *args)
        return dump_without_mocks(object, *args) unless object.instance_variable_defined?(:@mock_proxy)

        mp = object.instance_variable_get(:@mock_proxy)
        return dump_without_mocks(object, *args) unless mp.is_a?(::RSpec::Mocks::Proxy)

        object.__send__(:remove_instance_variable, :@mock_proxy)

        begin
          dump_without_mocks(object, *args)
        ensure
          object.instance_variable_set(:@mock_proxy,mp)
        end
      end

      alias_method :dump_without_mocks, :dump
      alias_method :dump, :dump_with_mocks
    end
  end
end
