I think this post-condition (begin-end while) loop is really similar to that of many other common languages.
For example in both Java and Javascript you have:
do {
statement(s)
} while (expression);
which will execute the code in the block at least once.
Why in Ruby would that be much of a surprise then?
The only difference is that in Ruby you use "begin-end" (and not "do-end" which can be used to create a block only in some contextes).
Please correct me if I am wrong.