Two solids are either non-overlapping, or one is within the other, or one intersects the surface of the other (or vice versa).

That means in a bad case, both solids have no vertex within the volume of the other solid, but still one solid intersects the middle of an edge of the other solid. And in the worst case, you don’t find such edges, but still one solid intersects the middle of a face of the other solid.

So the exact algorithm (finding space elements that contain entities of both solids and testing whether they would intersect) comes pretty close to actually intersecting entities with SketchUp’s method, only that it does not make changes to the model. The API gives us no efficient intersection tests, so implementing this in Ruby would be slower than SketchUp’s implementation. It can be accelerated with space partitioning tree datastructures (and checking bounding boxes before actual entity intersection), but the API does not give us access to the internal search datastructures.

You are right, the grid search has no guarantee to ever halt if there is no intersection, and only if the number of entities is very high (small facets where the other algorithm performs poorly) it has a good likelyhood to find an intersection faster.

If you just want to do it for one project and are satisfied with an approximate solution with high likelyhood, I would use your point-in-solid check for all vertices of one solid against the other (and vice versa). But it needs to consider points on the boundary as within the solid (and that is tricky).